绘图表达面图中的单轴标题

时间:2019-09-30 11:29:35

标签: python graph plotly plotly-express

我正在学习使用pyplot.express并遇到以下设计问题:在多面图中,每个子图都重复轴标题(在示例情况下为“花瓣宽度(cm)”)。是否可以使用pyplot.express为多面图中的所有子图获取单轴标签?

谢谢迈克尔

最小示例:

from sklearn.datasets import load_iris
import plotly.express as px
import pandas as pd
import numpy as np

# import iris-data
iris = load_iris()
df= pd.DataFrame(data= np.c_[iris['data'], iris['target']], columns= iris['feature_names'] + ['target'])
df['species'] = pd.Categorical.from_codes(iris.target, iris.target_names)

# plot using pyplot.express
fig = px.bar(df, x="sepal length (cm)", y="petal width (cm)", color = 'petal length (cm)', facet_row="species")
fig.show()

Iris facet plot

2 个答案:

答案 0 :(得分:3)

对于这种特殊情况,在您的示例代码段之后,只需运行

fig['layout']['yaxis']['title']['text']=''
fig['layout']['yaxis3']['title']['text']=''
fig.show()

情节:

enter image description here

答案 1 :(得分:2)

感谢@vestland的帮助!

我根据您的回答找到了一种更灵活的设计方式(多facet_rows):

首先,我需要删除所有子图轴:

for axis in fig.layout:
    if type(fig.layout[axis]) == go.layout.YAxis:
        fig.layout[axis].title.text = ''

下一步是添加注释而不是轴,因为布局中的yaxis属性始终会修改其中一个轴的比例并弄乱绘图。在搜索注释时,我发现了link如何添加自定义轴。需要 xref ='paper' yref ='paper'来独立于子图定位标签。

fig.update_layout(
    # keep the original annotations and add a list of new annotations:
    annotations = list(fig.layout.annotations) + 
    [go.layout.Annotation(
            x=-0.07,
            y=0.5,
            font=dict(
                size=14
            ),
            showarrow=False,
            text="Custom y-axis title",
            textangle=-90,
            xref="paper",
            yref="paper"
        )
    ]
)

pyplot