[英]Plotly Express - ho to plot a stacked bar chart of single variable
[英]plot error bar with plotly express not work
我尝试 plot 错误栏与 plotly 表达但它报告错误:输入元素是 3 但它说 error_y 大小是 6:
ValueError: All arguments should have the same length. The length of argument `error_y` is 6, whereas the length of previously-processed arguments ['x', 'y'] is 3
代码:
import plotly.express as px
import pandas as pd
import numpy as np
from io import StringIO
def save_fig(fig,pngname):
fig.write_image(pngname,format="png", width=800, height=300, scale=1)
print("[[%s]]"%pngname)
#plt.show()
return
def date_linspace(start, end, steps):
delta = (end - start) / (steps-1)
increments = range(0, steps) * np.array([delta]*steps)
return start + increments
def plot_timedelta(x,y,colors,pngname):
fig = px.scatter(
x=x,
y=y,
color=colors,
error_y=dict(
type='data',
symmetric=False,
arrayminus=y,
array=[0] * len(y),
thickness=1,
width=0,
),
)
tickvals = date_linspace(x.min(),x.max(),15)
print(x.min(),x.max())
layout =dict(
title="demo",
xaxis_title="X",
yaxis_title="Y",
title_x=0.5,
margin=dict(l=10,t=20,r=0,b=40),
height=300,
xaxis=dict(
tickangle=-25,
tickvals = tickvals,
ticktext=[d.strftime('%m-%d %H:%M:%S') for d in tickvals]
),
yaxis=dict(
showgrid=True,
zeroline=False,
showline=False,
showticklabels=True
)
)
fig.update_traces(
marker_size=14,
)
fig.update_layout(layout)
save_fig(fig,pngname)
return
def get_delta(df):
df['delta'] = df['ts'].diff().dt.total_seconds()
df['prev'] = df['ts'].shift(1)
print("delta min:",df['delta'].min())
print("delta max:",df['delta'].max())
#df = df[df['delta'] >= 40]
return df
data = """ts,source
2022-12-12 15:46:20.350,izat
2022-12-12 15:46:36.372,skyhook
2022-12-12 15:46:37.181,skyhook
"""
csvtext = StringIO(data)
df = pd.read_csv(csvtext, sep=",")
df['ts'] = pd.to_datetime(df['ts'])
df = get_delta(df)
df['delta'] = df['delta'].fillna(0)
plot_timedelta(df['ts'],df['delta'],df['source'],"demo.png")
发生这种情况是因为px.scatter
期望error_y
和error_y_minus
参数都是(str or int or Series or array-like)
并且它正在评估您传递给error_y
的字典的长度。
我相信您混淆了px.scatter
和go.Scatter
的error_y
参数类型,因为如果您使用 go.Scatter(如此处所示),您只将字典传递给 error_y 参数。
如果您想继续使用px.scatter
,您可以通过以下方式实现负误差条(并且没有正误差条):
fig = px.scatter(
x=x,
y=y,
color=colors,
error_y=[0] * len(y),
error_y_minus=y
)
进行此更改后,您的代码运行,我将save_fig(fig,pngname)
替换为fig.show()
以检查 output:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.