plotly / plotly/plotly.py

Bar ordering is inconsistent

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

还没有人认领这个 Issue。

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

描述

Plotly 5.15.0
Python 3.11

When creating a stacked bar chart with a sorted dataframe the order of bars is inconsistent. In some cases I get the desired result sorted by total bar length and in other cases I get what appears to be sorted by category.

For example, the following sorted dataframe is charted with the expected bar order:

   index        name category  value  total
0      2  rnlblpykns     cat1     75    173
1      4  rnlblpykns     cat3     66    173
2      1  rnlblpykns     cat0     26    173
3      3  rnlblpykns     cat2      6    173
4      8  lfqlfxlpxt     cat1     77     86
5      7  lfqlfxlpxt     cat0      9     86
6      5  axnqvjlmql     cat0     46     54
7      6  axnqvjlmql     cat1      8     54
8      0  zfbcsrusbq     cat0     18     18

correct

While the chart for the following sorted dataframe appears to be ordered by 'name':

    index        name category  value  total
0       4  tprmmexxdf     cat4     96    307
1       1  tprmmexxdf     cat1     89    307
2       0  tprmmexxdf     cat0     58    307
3       2  tprmmexxdf     cat2     54    307
4       3  tprmmexxdf     cat3     10    307
5      10  iontrwxbjg     cat0     91    271
6      11  iontrwxbjg     cat1     86    271
7      13  iontrwxbjg     cat3     46    271
8      14  iontrwxbjg     cat4     37    271
9      12  iontrwxbjg     cat2     11    271
10      7  ffxalebxgi     cat2     57    234
11      8  ffxalebxgi     cat3     48    234
12      5  ffxalebxgi     cat0     44    234
13      9  ffxalebxgi     cat4     44    234
14      6  ffxalebxgi     cat1     41    234
15     16  bzbaayrcra     cat1     78    146
16     15  bzbaayrcra     cat0     55    146
17     18  bzbaayrcra     cat3      8    146
18     17  bzbaayrcra     cat2      5    146
19     20  ejehjurxge     cat1     50    132
20     22  ejehjurxge     cat3     39    132
21     23  ejehjurxge     cat4     22    132
22     21  ejehjurxge     cat2     15    132
23     19  ejehjurxge     cat0      6    132

image

The code is as follows:

import random
import string

import plotly.express as px
import pandas as pd


def random_dataframe():
    names = []
    categories = []
    values = []
    for i in range(random.randint(3, 6)):
        letters = string.ascii_lowercase
        name = ''.join(random.choice(letters) for i in range(10))
        for j in range(random.randint(1, 5)):
            names.append(name)
            categories.append(f"cat{j}")
            values.append(random.randint(1, 100))

    df = pd.DataFrame({
        "name": names,
        "category": categories,
        "value": values
    })

    return df


df = random_dataframe()
df["total"] = df.groupby("name")["value"].transform(sum)
df = df.sort_values(by=["total", "name", "value"], ascending=False).reset_index()

print(df)

fig = px.bar(
    df,
    x="value",
    y="name",
    orientation="h",
    color="category",
    width=640,
    height=480
)

fig.show()

贡献指南

打开贡献指南

从这里开始

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

调研方向

运行提供的 Python 3.11 示例,使用 Plotly Express px.bar,并比较两种 dataframe 情况。调查条形的排序如何从分组后的 name、category 和 value 列中推导出来。完成的标准是:等效排序的数据产生一致且有文档说明的条形顺序,并且该行为由回归测试覆盖。

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

评估

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

把新 issue 发到你的邮箱

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