plotly 中的 Avg-min-max 图表
Avg-min-max chart in plotly
我正在使用基于 Microsoft Excel 生成的一些图的 plotly dash 构建一个筛选器。其中一个图表是 Avg-max-min,下面是此类图表的示例。
我不知道如何将这种图表“翻译”成情节图,到目前为止我已经尝试过了,但没有成功:
fig = go.Figure(data=go.Scatter(
x=[0, 1, 2],
y=[6, 10, 2],
error_y=dict(
type='data', # value of error bar given in data coordinates
array=[1, 2, 3],
visible=True)
))
我认为我已经非常接近真正的解决方案,基本上是在没有线条的情况下绘制误差线图。
在我看来,除非您对 box plots 感到满意,否则似乎没有预建函数可以这样做。
数据
import pandas as pd
import plotly.graph_obj as go
df = pd.DataFrame({"x": [0, 0, 0, 1, 1, 2],
"y":[1,2,4, 1, 10, 4]})
# here I calculate min, max and mean for every x
grp = df.groupby("x").agg({"y":{"min", "max", "mean"}})
grp.columns = ["_".join(col) for col in grp.columns]
grp = grp.reset_index()
情节
fig = go.Figure()
# first I add a trace for every x
fig.add_trace(go.Scatter(x=grp["x"],
y=grp["y_min"],
mode="markers",
showlegend=False,
marker=dict(color="blue",
size=10)))
fig.add_trace(go.Scatter(x=grp["x"],
y=grp["y_mean"],
mode="markers",
showlegend=False,
marker=dict(color="blue",
size=20)))
fig.add_trace(go.Scatter(x=grp["x"],
y=grp["y_max"],
mode="markers",
showlegend=False,
marker=dict(color="blue",
size=10)))
# then I add a vertical line for
# every x where y_min!=y_max
for i, row in grp.iterrows():
if row["y_min"]!=row["y_max"]:
fig.add_shape(
dict(type="line",
x0=row["x"],
x1=row["x"],
y0=row["y_min"],
y1=row["y_max"],
line=dict(
color="blue",
width=2)
)
)
fig.update_layout(title="Avg-Max-Min Graph", title_x=0.5)
fig.show()
我正在使用基于 Microsoft Excel 生成的一些图的 plotly dash 构建一个筛选器。其中一个图表是 Avg-max-min,下面是此类图表的示例。
我不知道如何将这种图表“翻译”成情节图,到目前为止我已经尝试过了,但没有成功:
fig = go.Figure(data=go.Scatter(
x=[0, 1, 2],
y=[6, 10, 2],
error_y=dict(
type='data', # value of error bar given in data coordinates
array=[1, 2, 3],
visible=True)
))
我认为我已经非常接近真正的解决方案,基本上是在没有线条的情况下绘制误差线图。
在我看来,除非您对 box plots 感到满意,否则似乎没有预建函数可以这样做。
数据
import pandas as pd
import plotly.graph_obj as go
df = pd.DataFrame({"x": [0, 0, 0, 1, 1, 2],
"y":[1,2,4, 1, 10, 4]})
# here I calculate min, max and mean for every x
grp = df.groupby("x").agg({"y":{"min", "max", "mean"}})
grp.columns = ["_".join(col) for col in grp.columns]
grp = grp.reset_index()
情节
fig = go.Figure()
# first I add a trace for every x
fig.add_trace(go.Scatter(x=grp["x"],
y=grp["y_min"],
mode="markers",
showlegend=False,
marker=dict(color="blue",
size=10)))
fig.add_trace(go.Scatter(x=grp["x"],
y=grp["y_mean"],
mode="markers",
showlegend=False,
marker=dict(color="blue",
size=20)))
fig.add_trace(go.Scatter(x=grp["x"],
y=grp["y_max"],
mode="markers",
showlegend=False,
marker=dict(color="blue",
size=10)))
# then I add a vertical line for
# every x where y_min!=y_max
for i, row in grp.iterrows():
if row["y_min"]!=row["y_max"]:
fig.add_shape(
dict(type="line",
x0=row["x"],
x1=row["x"],
y0=row["y_min"],
y1=row["y_max"],
line=dict(
color="blue",
width=2)
)
)
fig.update_layout(title="Avg-Max-Min Graph", title_x=0.5)
fig.show()