Plotly:具有共享 y 轴的多个 x 轴

Plotly: Multiple x-axes with shared y-axis

我有以下数据框:

df = pd.DataFrame(data={'day': [1,2,3,4,5], 'date': pd.date_range("2020-01-01", periods=5, freq="D"), 'value': [43,45,52,55,63]})

在我的情节中,我希望“值”列是唯一的 y 轴,但同时将“天”和“日期”列作为 X 轴。

我的常规情节是这样的:

fig = px.line(df, x='day', y='value')
fig.show()

Plotly 不支持以下内容:

fig = px.line(df, x=['day', 'date'], y='value')

如何将星期和日期同时显示为 x 轴,一个在另一个下方,一个在顶部,一个在底部?

您可以使用 plotly.graph_objects 并将 xaxis 类型设置为 multicategory:

import pandas as pd
import plotly.graph_objects as go

df = pd.DataFrame(data={'day': [1,2,3,4,5], 'date': pd.date_range('2020-01-01', periods=5, freq='D'), 'value': [43,45,52,55,63]})

data = go.Scatter(
    x=[df['date'], df['day']],
    y=df['value'],
    mode='lines'
)

layout = dict(
    xaxis=dict(
        type='multicategory',
        tickfont=dict(
            size=7
        )
    ),
    yaxis=dict(
        tickfont=dict(
            size=7
        )
    ),
    margin=dict(t=20, l=20, r=20, b=20),
    height=300,
    width=600
)

fig = go.Figure(data=data, layout=layout)

fig.write_image('fig.png')

您可以使用文本注释功能doc

fig = px.line(df, x="day", y="value", text=df.date)
fig.update_traces(texttemplate='%{text|%d/%m/%Y}', textposition='bottom center')
fig.show()

这给你:


如果您只想每 delta 步有一个日期:

delta = 3
fig = px.line(df, x="day", y="value", text=[str(df.date[i].strftime("%d/%m/%Y")) if i % delta == 0 else "" for i in range(len(df))])
fig.update_traces(textposition='bottom center')
fig.show()

给你: