绘图条形图与网格中心对齐

问题描述 投票:0回答:2

我想知道是否有办法将 Plotly Bar 中的条形与网格单元的中心对齐。我正在使用绘图表达栏,x 轴显示日期类型值。如下图所示。

我希望每天都有我的刻度标签,但条形图应位于当天的中心,而不是横跨当天的刻度。 可以用几行代码重现该行为:

fig = px.bar(
    x=[datetime.datetime(2022, 3, 1), datetime.datetime(2022, 3, 2), datetime.datetime(2022, 3, 3)],
    y=[2, 4, 5]
)
fig.update_xaxis(dtick=86400000,tickmode='linear',
        ticklabelmode="period")
fig.show()
python plotly
2个回答
1
投票

我无法很好地控制express中的时间序列数据,所以我使用了graph_objects。 go 允许您设置 x 轴位置和刻度单位。

import plotly.express as px
import plotly.graph_objects as go
import datetime

fig = go.Figure()

fig.add_trace(go.Bar(
    x=[datetime.datetime(2022, 3, 1), datetime.datetime(2022, 3, 2), datetime.datetime(2022, 3, 3)],
    y=[2, 4, 5],
    xperiod=86400000,
    xperiodalignment="middle"
))
#fig.update_xaxes(dtick=86400000,tickmode='linear', ticklabelmode="period")
fig.update_xaxes(tickmode='linear', ticklabelmode="period")

fig.show()


0
投票

除了

graph_objects
解决方案之外,您还可以通过以下方式继续使用plotly
express
解决方案:

import plotly.express as px
import plotly.graph_objects as go
import datetime

fig = px.bar(
    x=[datetime.datetime(2022, 3, 1), datetime.datetime(2022, 3, 2), datetime.datetime(2022, 3, 3)], 
    y=[2, 4, 5], 
)
fig.update_xaxes(
    dtick="D1",
    # tickmode='linear',
    # ticklabelmode="period",
)

您指定

dtick="D1"
(而不是毫秒),如果提供了
tick0
dtick
,则“线性”是默认值。另外,您不需要
ticklabelmode
。在“D1”的情况下,
tick0
会被忽略,但当您在每月系列中对绘图进行采样时,它是一个有用的参数。我发现这在这个组合中很有用:

dtick="M1",
tick0="2000-01-31",

为了在月末对齐条形,或

15
为月中对齐,或
01
为月初对齐。

© www.soinside.com 2019 - 2024. All rights reserved.