我想知道是否有办法将 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()
我无法很好地控制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()
除了
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
为月初对齐。