繁体   English   中英

如何使用 plotly.express 在顶部创建带有共享 x 轴的条形 plot?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM