Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python plotly:如何在带有分类x轴的条形图中添加不同的垂直线_Python_Plotly_Boxplot - Fatal编程技术网

Python plotly:如何在带有分类x轴的条形图中添加不同的垂直线

Python plotly:如何在带有分类x轴的条形图中添加不同的垂直线,python,plotly,boxplot,Python,Plotly,Boxplot,我有一个简单的带x轴的条形图。我想为每个类别添加一条垂直线(在不同的y值上) 我可以在整个绘图中创建一条垂直线,如下所示: import plotly.express as px fig = px.strip(df, x="category", y="value") fig.add_hline(y=191) 结果如下所示: import plotly.express as px fig = px.strip(df, x="category&

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

我可以在整个绘图中创建一条垂直线,如下所示:

import plotly.express as px

fig = px.strip(df, x="category", y="value")
fig.add_hline(y=191)
结果如下所示:

import plotly.express as px

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

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

期望输出 我想要的输出是这样的:

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]
})

添加带有形状的线条。坐标轴有两种类型: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轴是一个分类变量,所以这次我手动设置它。根据分类变量的数量,我认为可以从逻辑上推导出位置。您可以找到官方参考。是的,在那里说:“如果设置为“纸”,则
x
位置指的是从标准化坐标系中绘图区域左侧的距离,其中“0”(“1”)对应于左侧(右侧)”