[英]How to create a bar plot with shared x-axis using plotly.express with sub-titles on top?
我想知道如何在 plotly 中正确创建一个带有共享 x 轴的条形 plot? 我创建了这个栏 plot 并指定fig.update_xaxes(matches='x')
,据我所知,它应该与轴匹配,但显然这不起作用。 这看起来像一个错误还是我做错了什么? 如您所见,除了一个完全关闭的子图外,它看起来不错。 有时,使用facet_row
代替facet_col
会得到更好的结果,但随后标题出现在 plot 的侧面。 标题有时很长,不适合在那里。 因此,我正在使用facet_col
。
fig = px.bar(data_frame=df, x='RawFile', y=plot_column,
facet_col='Majority protein IDs', facet_col_wrap=1, color=color,
color_discrete_sequence=px.colors.qualitative.Dark24,
color_continuous_scale=px.colors.sequential.Rainbow)
n_rows = len(df['Majority protein IDs'].drop_duplicates())
height = 300*(1+n_rows)
fig.update_layout(
height=height,
margin=dict( l=50, r=10, b=200, t=50, pad=0 ),
hovermode='closest')
fig.for_each_annotation(lambda a: a.update(text=a.text.split("=")[-1]))
fig.update(layout_showlegend=True)
fig.update_xaxes(matches='x')
奇怪的是, y-axes
是共享的,但x-axes
不是。 这与我正在寻找的完全相反。
# django-plotly-dash 1.6.3
# plotly 4.14.3
我想对此的一种解决方案是使用facet_row
但是,然后我需要将标题从右侧移动到顶部。
我的理解是,您希望所有 plot 标题出现在所有子图的顶部。 plotly express 似乎没有任何内置功能可以做到这一点。 您总是可以调整图形的元素,但在这种情况下有点棘手,因为您必须调整所有子图的高度才能为标题腾出空间。 到目前为止,这是我对示例数据集的最佳尝试:
如果这是你可以使用的东西,我们可以仔细看看细节。
import plotly.express as px
df = px.data.tips()
fig = px.scatter(df, x="total_bill", y="tip", color="smoker", facet_row="sex")
f = fig.full_figure_for_development(warn=False)
yrefs = []
for i, elem in enumerate(fig.layout):
if elem[:5] == 'yaxis':
yrefs.append(fig.layout[elem].domain[1])
for i, title in enumerate(fig.layout.annotations):
title.textangle = 0
title.y = yrefs[i] - 0.03
# title.x = 0.5 - ((len(title.text)+1) / 100)
title.x = 0.40
title.align = 'center'
title.bgcolor='rgba(0,0,0,0.25)'
fig.show()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.