具有日期时间轴的散景图中的恒定宽度

Constant width in bokeh graph with datetime axis

我在散景中设置了一个堆叠条形图,每个条表示一个月:

各自的代码位如下:

p.vbar_stack(
        categories,
        x="zeit",
        width=2629800000 * 0.9,
        color=Category20c[len(categories)],
        source=plot_data,
    )

宽度以毫秒为单位指定,对应一个月的平均长度。我将其乘以 0.9 以在条形之间创建间隙。问题是由于月份长度的实际差异,柱之间的差距不同。这在 2 月和 3 月之间最为显着(例如,图中左侧的第三个和第四个柱)。

如何使条形宽度(和间隙)在几个月的长度内稳健?

在您的情况下,从语义上讲,它并不是真正的日期时间轴,而是分类轴。如果您切换到正确的分类轴,您的问题应该会得到解决。

如果您喜欢可变宽度的条,则可以使用 timedelta 作为宽度。我们必须每个月创建一个。这涉及 Feb/March 问题。我使用 line_width 来分隔条形图。

df['days'] = df.index.to_series().apply(lambda x: datetime.timedelta(days=x.days_in_month))

plot_data = ColumnDataSource(df)

p.vbar_stack(
    categories,
    x="zeit",
    width='days',
    line_width=1, 
    line_color='white',
    color=Category20c[len(categories)],
    source=plot_data,
)