使用绘图子图时绘制自定义误差线
Posted
技术标签:
【中文标题】使用绘图子图时绘制自定义误差线【英文标题】:Drawing custom error bars when using plotly subplots 【发布时间】:2022-01-01 07:55:54 【问题描述】:这个问题与to an earlier one that I posted密切相关。我想使用来自描述每个置信区间上限和下限的数据框中两列的信息来绘制图形子图中每个条形的置信区间。我尝试使用之前那篇文章中的解决方案,但是当人们想要使用不同的颜色和/或不同的行来为图形绘制子图时,它似乎并不适用。
例如,以下代码不会产生正确的置信区间。例如,第二行第 3 个柱的 CI 应该从 11 变为 5:
import pandas as pd
import plotly.express as px
df = pd.DataFrame(
"x": [0, 1, 2, 3, 0, 1, 2, 3],
"y": [6, 10, 2, 5, 8, 9, 10, 11],
"ci_upper": [8, 11, 2.5, 4, 9, 10, 11, 12],
"ci_lower": [5, 9, 1.5, 3, 7, 6, 5, 10],
"state": ['foo','foo','foo','foo','bar','bar','bar','bar'],
"color": ['0','0','1','1','0','0','1','1']
)
fig = px.bar(df, x="x", y="y",facet_row='state',color='color').update_traces(
error_y=
"type": "data",
"symmetric": False,
"array": df["ci_upper"] - df["y"],
"arrayminus": df["y"] - df["ci_lower"],
)
fig.update_yaxes(dtick=1)
fig.show(renderer='png')
【问题讨论】:
【参考方案1】: 这是相同的技术,但解决方案需要考虑它是多条迹线(本例中为 4 条) 在每条轨迹的hovertemplate
中编码的是facet 和color。提取这些并将数据过滤到适当的行
然后像更简单的条件一样构建误差条指令
import pandas as pd
import plotly.express as px
df = pd.DataFrame(
"x": [0, 1, 2, 3, 0, 1, 2, 3],
"y": [6, 10, 2, 5, 8, 9, 10, 11],
"ci_upper": [8, 11, 2.5, 4, 9, 10, 11, 12],
"ci_lower": [5, 9, 1.5, 3, 7, 6, 5, 10],
"state": ["foo", "foo", "foo", "foo", "bar", "bar", "bar", "bar"],
"color": ["0", "0", "1", "1", "0", "0", "1", "1"],
)
fig = px.bar(df, x="x", y="y", facet_row="state", color="color")
fig.update_yaxes(dtick=1)
def error_facet(t):
# filter data frame based on contents of hovertemplate
d = df.query(
" and ".join(
[
f"q.split('=')[0]==\"q.split('=')[1]\""
for q in t.hovertemplate.split("<br>")[0:2]
]
)
)
t.update(
"error_y":
"type": "data",
"symmetric": False,
"array": d["ci_upper"] - d["y"],
"arrayminus": d["y"] - d["ci_lower"],
)
fig.for_each_trace(error_facet)
fig
【讨论】:
以上是关于使用绘图子图时绘制自定义误差线的主要内容,如果未能解决你的问题,请参考以下文章
ValueError:使用自定义回调绘制卷积层特征图时,函数模型的输出张量必须是 TensorFlow `Layer` 的输出
python可视化自定义设置坐标轴的范围自定义设置主坐标轴刻度和次坐标轴刻度自定义坐标轴刻度的显示样式自定义坐标轴刻度数值的颜色以及小数点位数添加坐标轴刻度网格线自定义移动坐标轴的位置