如何注释条之间的差异?
How to annotate difference between bars?
我正在尝试使用注释显示条形图之间的差异。具体来说,显示所有柱与第一个柱之间的差异。
我的代码如下所示:
import plotly.graph_objects as go
lables = ['a','b','c']
values = [30,20,10]
difference = [ str(values[0] - x) for x in values[1:] ]
fig = go.Figure( data= go.Bar(x=lables,y=values,width = [0.5,0.5,0.5] ) )
fig.add_annotation( x=lables[0],y= values[0],
xref="x",yref="y",
showarrow=True,arrowhead=7,
ax = 1200, ay= 0 )
fig.add_annotation( x = lables[1], y=values[0],
xref="x",yref="y",
showarrow=True,arrowhead=1,
ax = 0 , ay = 100,
text= difference[0]
)
fig.show()
结果图如下所示:
如您所见,我正在尝试使用注释来指示 a
和 b
之间的区别。但我不知道如何获得 a
的水平线与 b
.
的顶部之间的垂直距离
我试图让箭头从水平线指向 b
和 c
的顶部。我想知道有没有办法获得这个垂直距离,或者有没有其他方法可以达到相同的结果?
可以通过以下方式轻松获得垂直距离:
diffs = [max(values) - v for v in values]
唯一真正的挑战是正确设置 fig.add_annotations()
的每个参数。 yanchor
、ax
和 ayref
的正确组合将为您提供此图:
您可以在下面的代码片段中仔细查看详细信息。如果您不喜欢数字的位置,我们也可以解决。
完整代码:
import plotly.graph_objects as go
labels = ['a','b','c']
values = [30,20,10]
diffs = [max(values) - v for v in values]
diff_labels = dict(zip(labels, diffs))
#print(diff_labels)
fig = go.Figure( data= go.Bar(x=labels,y=values,width = [0.5,0.5,0.5] ) )
for k, v in diff_labels.items():
if v > 0:
print(v)
fig.add_annotation(x=k, y=max(values)-v, ax=0,
yanchor='bottom',
ay=max(values), ayref='y',
showarrow=True, arrowsize=2,
arrowhead=1,
text = v
)
fig.add_traces(go.Scatter(x=labels, y=[max(values)]*3, mode = 'lines',
line=dict(color='black', width=1)))
fig.show()
我正在尝试使用注释显示条形图之间的差异。具体来说,显示所有柱与第一个柱之间的差异。
我的代码如下所示:
import plotly.graph_objects as go
lables = ['a','b','c']
values = [30,20,10]
difference = [ str(values[0] - x) for x in values[1:] ]
fig = go.Figure( data= go.Bar(x=lables,y=values,width = [0.5,0.5,0.5] ) )
fig.add_annotation( x=lables[0],y= values[0],
xref="x",yref="y",
showarrow=True,arrowhead=7,
ax = 1200, ay= 0 )
fig.add_annotation( x = lables[1], y=values[0],
xref="x",yref="y",
showarrow=True,arrowhead=1,
ax = 0 , ay = 100,
text= difference[0]
)
fig.show()
结果图如下所示:
如您所见,我正在尝试使用注释来指示 a
和 b
之间的区别。但我不知道如何获得 a
的水平线与 b
.
我试图让箭头从水平线指向 b
和 c
的顶部。我想知道有没有办法获得这个垂直距离,或者有没有其他方法可以达到相同的结果?
可以通过以下方式轻松获得垂直距离:
diffs = [max(values) - v for v in values]
唯一真正的挑战是正确设置 fig.add_annotations()
的每个参数。 yanchor
、ax
和 ayref
的正确组合将为您提供此图:
您可以在下面的代码片段中仔细查看详细信息。如果您不喜欢数字的位置,我们也可以解决。
完整代码:
import plotly.graph_objects as go
labels = ['a','b','c']
values = [30,20,10]
diffs = [max(values) - v for v in values]
diff_labels = dict(zip(labels, diffs))
#print(diff_labels)
fig = go.Figure( data= go.Bar(x=labels,y=values,width = [0.5,0.5,0.5] ) )
for k, v in diff_labels.items():
if v > 0:
print(v)
fig.add_annotation(x=k, y=max(values)-v, ax=0,
yanchor='bottom',
ay=max(values), ayref='y',
showarrow=True, arrowsize=2,
arrowhead=1,
text = v
)
fig.add_traces(go.Scatter(x=labels, y=[max(values)]*3, mode = 'lines',
line=dict(color='black', width=1)))
fig.show()