plotly / plotly/plotly.py

Axis labels are not shown for all subplots when using plotly express, facets and string labels

未关闭
#4,452 4 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

bug P3
主要语言
Python
星标
18.8k
派生
2.8k
平均合并
16 小时 26 分钟
30 天内合并 PR
21

描述

Problem summary

Whenever I have the following combination:

  • plotly express
  • facet plots
  • labels used for axis are strings

The first subplot shows the axis labels properly, but all following subplots don't show labels at all:
Plot showing the issue
If the axis labels are numbers, there is no problem.

From a comment of the initial issue I opened I now know that fig.update_traces(bingroup='x2', row=1, col=2) can work around the issue, but that's not a permanent solution.

Reproducible example

I originally created these plots in Python (plotly 5.18.0) and then used the .to_json(pretty=True) method to obtain the Javascript for the codepens.

Original Python code
If necessary, this is the original Python code I used
import pandas as pd
import plotly.express as px
from plotly.subplots import make_subplots
import plotly.graph_objects as go

df = pd.DataFrame(
    {
        "age": { "0": "Adult", "1": "Adult", "2": "Adult", "3": "Adult", "4": "Adult", "5": "Kid", "6": "Kid", "7": "Kid", "8": "Kid", "9": "Kid", },
        "favourite_food": { "0": "Pizza", "1": "Noodles", "2": "Pizza", "3": "Pizza", "4": "Pizza", "5": "Burger", "6": "Pancake", "7": "Noodles", "8": "Pizza", "9": "Pancake", },
        "favourite_drink": { "0": "Beer", "1": "Tea", "2": "Beer", "3": "Wine", "4": "Coffee", "5": "Coffee", "6": "Water", "7": "Beer", "8": "Tea", "9": "Wine", },
        "max_running_speed": { "0": 4.7362803248, "1": 16.7084927714, "2": 8.1135697835, "3": 1.0704264989, "4": 4.6330187561, "5": 6.331593807, "6": 16.5221040135, "7": 3.2256763127, "8": 4.3084468631, "9": 6.3677742299, },
        "number_of_bicycles": { "0": 4, "1": 2, "2": 1, "3": 3, "4": 4, "5": 3, "6": 3, "7": 3, "8": 4, "9": 2, },
    }
)
df.set_index("age", inplace=True)


working = make_subplots(rows=1, cols=2, subplot_titles=["Food", "Drink"])

working.add_trace( go.Histogram( histfunc="count", histnorm="percent", x=df.loc["Adult"].favourite_food, name="Adult", legendgroup="Adult", ), row=1, col=1, )
working.add_trace( go.Histogram( histfunc="count", histnorm="percent", x=df.loc["Kid"].favourite_food, name="Kid", legendgroup="Kid" ), row=1, col=1, )
working.add_trace( go.Histogram( histfunc="count", histnorm="percent", x=df.loc["Adult"].favourite_drink, name="Adult", legendgroup="Adult", ), row=1, col=2, )
working.add_trace( go.Histogram( histfunc="count", histnorm="percent", x=df.loc["Kid"].favourite_drink, name="Kid", legendgroup="Kid" ), row=1, col=2, )
working.show()

broken = px.histogram(
    df,
    x=["favourite_food", "favourite_drink"],
    facet_col="variable",
    color=df.index,
    barmode="group",
    histnorm="percent",
    text_auto=".2r",
).update_xaxes(matches=None, showticklabels=True).update_yaxes(matches=None, showticklabels=True)
broken.show()
Related

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

先从可复现 Python 示例中描述的 plotly.express 直方图和 facet 处理开始,然后将其生成的 figure 与可正常工作的 make_subplots 示例以及链接的 CodePens 进行比较。完成的标准是:分类字符串轴标签无需 bingroup workaround 即可在每个 facet 上渲染,并且有一个覆盖该情况的回归测试。

由索引模型根据 Issue 内容生成。

评估

技术栈
pandas, python
领域
data-visualization
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。