【问题标题】:plotly: how to add different vertical lines in strip plot with categorical x-axisplotly:如何在带分类 x 轴的条形图中添加不同的垂直线
【发布时间】:2021-07-03 07:55:54
【问题描述】:

我有一个带有分类 x 轴的简单条形图。我想为每个类别添加一条垂直线(在不同的 y 值上)。

我可以像这样在整个绘图中创建一条垂直线:

import plotly.express as px

fig = px.strip(df, x="category", y="value")
fig.add_hline(y=191)

结果如下所示:

但是,我无法为每个类别绘制一条垂直线。

期望的输出

我想要的输出是这样的:

我尝试在布局中添加形状,但不影响输出:

fig.update_layout(shapes=[
    dict( type= 'line',
      yref= 'paper', y0= 180, y1= 180,
      xref= 'x', x0= "cat1", x1= "cat1")])

如果 x 轴是数字,这样的事情可能会起作用。但是,不确定如何在此处指定类别。如果这是要走的路,那么我可能做错了。

如何添加一条水平线,如上所述,每个类别都有不同的 y 值?


重现情节的数据:

import pandas as pd

df = pd.DataFrame(data={
    "category": ["cat1", "cat1", "cat2", "cat2"],
    "value": [150, 160, 180, 190]
})

【问题讨论】:

    标签: python plotly boxplot


    【解决方案1】:

    添加带有形状的线条。坐标轴有两种类型:x,y 轴和基于纸张的坐标轴。从您想要的输出中,您可以读取并将 x 轴指定为纸质,将 y 轴指定为 y 轴值。

    import pandas as pd
    import plotly.express as px
    
    df = pd.DataFrame({'category':['cat1','cat1','cat2','cat2'],'value':[150,160,180,190]})
    fig = px.strip(df, x="category", y="value")
    
    fig.update_layout(shapes=[dict(type='line', x0=0.2, y0=180, x1=0.3, y1=180,
                                   xref='paper', yref='y',
                                   line_width=3, line_color='red'),
                              dict(type='line', x0=0.7, y0=192, x1=0.8, y1=192,
                                   xref='paper', yref='y',
                                   line_width=3, line_color='red'),
                             ])
    fig.show()
    

    【讨论】:

    • 我是否正确解释了“纸张”坐标:第一行从宽度的 20%-30% 开始,第二行从宽度的 70%-80% 开始。因此,如果我的数据框中有更多类别,我需要根据添加的类别对行进行硬编码,对吗?
    • 据我所知,坐标是由xy轴和纸张参考指定的;由于x轴是一个分类变量,所以这次我手动设置了它。根据分类变量的数量,我认为可以从逻辑上得出该位置。可以找到官方参考here
    • 是的,在那里说:“如果设置为“纸”,x 位置是指在标准化坐标中距绘图区域左侧的距离,其中“0”(“1”)对应左(右)”
    猜你喜欢
    • 2018-12-28
    • 2021-12-08
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    相关资源
    最近更新 更多