分类分组条形图中的形状定位
Shape positioning in categorical grouped bar chart
如何将下面分类条形图中的形状放在指定SF动物园长颈鹿数量的条形中间(如附图中洋红色所示)?
import plotly.graph_objects as go
import plotly.express as px
animals=['giraffes', 'orangutans', 'monkeys']
fig = go.Figure(data=[
go.Bar(name='SF Zoo', x=animals, y=[20, 14, 23]),
go.Bar(name='LA Zoo', x=animals, y=[12, 18, 29])
])
# Change the bar mode
fig.update_layout(barmode='group')
# Shape
fig.add_trace(go.Scatter(x=['giraffes', 'giraffes', 'orangutans', 'orangutans'],
y=[21, 25, 25, 16],
fill=None, mode="lines", line=dict(color='rgba(0,0,0,1)',width=2),
showlegend=False
)
)
fig.show()
正如@Maximilian Peters 指出的那样,没有一种很好的方法可以在 分类坐标 .
之间引用任意数量的点
你能做的最好的事情是将 xref
设置为 paper
,这意味着 x 轴被缩放到 0 到 1 之间。然后你必须猜测并检查 x-坐标应该排列在你想要的地方。由于您的 y 轴是数字,您可以直接引用您喜欢的 y 值。经过一些尝试和错误后,在 (0.10, 20)、(0,10, 25)、(0.44, 25)、(0.44, 14) 之间画线可以使您非常接近所需的注释。
这绝对是 hacky,如果您添加更多条或以任何方式更改条的宽度,则无法推广。
import plotly.graph_objects as go
import plotly.express as px
animals=['giraffes', 'orangutans', 'monkeys']
fig = go.Figure(data=[
go.Bar(name='SF Zoo', x=animals, y=[20, 14, 23]),
go.Bar(name='LA Zoo', x=animals, y=[12, 18, 29])
])
# Change the bar mode
fig.update_layout(barmode='group')
# Shape composed of three lines, looping through coordinates
x_coords = [0.10, 0.10, 0.44, 0.44]
y_coords = [20, 25, 25, 14]
for i in range(1,len(x_coords)):
fig.add_shape(
type="line",
xref="paper",
x0=x_coords[i-1],
y0=y_coords[i-1],
x1=x_coords[i],
y1=y_coords[i],
line=dict(color="magenta",width=3)
)
fig.show()
如何将下面分类条形图中的形状放在指定SF动物园长颈鹿数量的条形中间(如附图中洋红色所示)?
import plotly.graph_objects as go
import plotly.express as px
animals=['giraffes', 'orangutans', 'monkeys']
fig = go.Figure(data=[
go.Bar(name='SF Zoo', x=animals, y=[20, 14, 23]),
go.Bar(name='LA Zoo', x=animals, y=[12, 18, 29])
])
# Change the bar mode
fig.update_layout(barmode='group')
# Shape
fig.add_trace(go.Scatter(x=['giraffes', 'giraffes', 'orangutans', 'orangutans'],
y=[21, 25, 25, 16],
fill=None, mode="lines", line=dict(color='rgba(0,0,0,1)',width=2),
showlegend=False
)
)
fig.show()
正如@Maximilian Peters 指出的那样,没有一种很好的方法可以在 分类坐标 .
之间引用任意数量的点你能做的最好的事情是将 xref
设置为 paper
,这意味着 x 轴被缩放到 0 到 1 之间。然后你必须猜测并检查 x-坐标应该排列在你想要的地方。由于您的 y 轴是数字,您可以直接引用您喜欢的 y 值。经过一些尝试和错误后,在 (0.10, 20)、(0,10, 25)、(0.44, 25)、(0.44, 14) 之间画线可以使您非常接近所需的注释。
这绝对是 hacky,如果您添加更多条或以任何方式更改条的宽度,则无法推广。
import plotly.graph_objects as go
import plotly.express as px
animals=['giraffes', 'orangutans', 'monkeys']
fig = go.Figure(data=[
go.Bar(name='SF Zoo', x=animals, y=[20, 14, 23]),
go.Bar(name='LA Zoo', x=animals, y=[12, 18, 29])
])
# Change the bar mode
fig.update_layout(barmode='group')
# Shape composed of three lines, looping through coordinates
x_coords = [0.10, 0.10, 0.44, 0.44]
y_coords = [20, 25, 25, 14]
for i in range(1,len(x_coords)):
fig.add_shape(
type="line",
xref="paper",
x0=x_coords[i-1],
y0=y_coords[i-1],
x1=x_coords[i],
y1=y_coords[i],
line=dict(color="magenta",width=3)
)
fig.show()