如何使用 plotly 显示这样的图表 [关闭]

Posted

技术标签:

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

I have a dataset like this

i want to display a graph like this using plotly (dash)

【问题讨论】:

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

【讨论】:

以上是关于如何使用 plotly 显示这样的图表 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JS 客户端上正确显示使用 Python Plotly 在服务器上创建的图表?

Plotly Dash:图表未根据下拉选择更新

如何在 plotly.js 图表中添加彩色背景条

为啥通过 django 数据显示图表时 Plotly 显示空白?

如何为具有多个 y 轴的图表设置动画(python)

如何使用ggplot或plotly重现使用多个级别在分类Y上绘制数字X的图表?