【问题标题】:How to display such a graph using plotly [closed]如何使用 plotly 显示这样的图表 [关闭]
【发布时间】:2021-11-22 20:10:18
【问题描述】:

【问题讨论】:

  • 数据作为文本 - 它是一个堆叠条
  • @RobRaymond 数据可以用 OCR 转换 :)
  • 但是,@Sohibjon,您应该将数据作为文本包含在内,以便我们可以更轻松地回答。此外,您应该直接在您的问题中添加图片以获得更好的答案。

标签: python database dataframe plotly plotly-dash


【解决方案1】:
  • 您作为图像的数据意味着它不能用于答案。大部分代码都在生成具有代表性的样本数据集
  • 这是一个直截了当的条形图。已设置 dtick,因此 xaxis 中的每个值都有一个标签。已重新定位图例
import numpy as np
import random
import pandas as pd
import plotly.express as px

ROWS = 24
careers = [
    "Director",
    "Accountant",
    "Programmer",
    "Technician",
    "Office Manager",
    "Designer",
]
df = pd.DataFrame(
    {
        c: a[1][np.where(a[0] >= 0)[0][0] : np.where(a[0] == 0)[0][0] + ROWS]
        for c, a in zip(
            careers,
            [
                np.unique(
                    np.random.normal(
                        ROWS / 2, (ROWS / 2) / 2.33, random.randint(500, 1000)
                    ).astype(int),
                    return_counts=True,
                )
                for _ in careers
            ],
        )
    }
)

px.bar(df, y=df.columns).update_layout(
    xaxis={"dtick": 1, "title":""},
    yaxis={"title":""},
    legend={"yanchor": "bottom", "xanchor": "left", "x": 0, "y": -.2, "orientation": "h", "title":""},
)

【讨论】:

    【解决方案2】:

    您可以使用 Plotly Express bar 图表。但是您首先必须将数据框从宽格式转换为长格式。

    你的数据有一个完整的例子:

    from io import StringIO
    
    import pandas as pd
    import plotly.express as px
    
    
    data = """Director,Accountant,Foo,Texawaka,MeHenokep,Wed nosap,Programmer,Cy-wed
    0,0,90,19,5,2,0,0
    0,0,84,19,7,2,0,1
    0,0,84,19,9,4,0,1
    0,0,90,19,9,5,0,1
    0,0,92,19,9,6,0,1
    0,0,92,19,9,41,0,1
    0,0,138,81,11,47,0,1
    0,17,338,237,20,57,0,4
    1,155,412,272,52,116,0,5
    6,156,454,282,51,121,1,20
    15,156,506,307,53,122,10,42
    19,156,581,310,59,123,13,77
    20,156,612,311,61,123,16,78
    20,156,624,314,60,123,16,78
    20,133,660,359,59,123,16,78
    19,128,703,398,59,123,16,78
    19,127,713,398,59,117,16,78
    19,119,561,315,59,103,16,78
    17,10,533,249,59,93,15,78
    16,1,500,212,58,85,13,78
    6,1,467,192,58,81,9,72
    1,0,404,171,50,38,4,13
    0,0,365,171,37,19,2,6
    0,0,357,171,30,9,1,4
    """
    
    # Create pandas.DataFrame
    df = pd.read_csv(StringIO(data), sep=",").reset_index()
    
    # Convert DataFrame from wide to long format
    df_long = pd.melt(df, id_vars="index", var_name='position', value_name='value')
    
    # Plot 
    fig = px.bar(df_long, x="index", y="value", color="position")
    fig.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-08
      • 2016-05-20
      • 1970-01-01
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      相关资源
      最近更新 更多