Plotly中实现随机日期间等间距的柱状图绘制
问题描述
我用Plotly Express的px.bar绘制柱状图,代码如下:
px.bar(data_, x='DATE', y='Change')
其中DATE是日期时间列,当前图表的柱子会按照日期跨度分散排列,我需要让所有柱子等间距紧密排列,请问有没有参数可以实现这个需求?
示例数据:
0 2015-05-11 7.15 1 2015-05-12 -14.56 2 2015-06-19 2.18 3 2015-06-22 -12.73 4 2018-01-18 19.17 5 2020-03-16 -6.92 6 2020-03-17 -6.07 7 2020-03-18 -12.49 8 2020-03-19 -30.54 9 2020-03-20 -41.73 10 2020-03-23 -37.37 11 2020-03-24 -28.02 12 2020-03-25 -25.29 13 2020-03-26 -21.15 14 2020-04-02 -3.60 15 2021-05-19 -8.02 16 2021-05-20 -6.45 17 2021-06-04 -8.38 18 2021-06-07 -8.81 19 2021-06-08 -6.05 20 2021-06-10 -8.01 21 2022-02-28 -9.79 22 2022-03-09 -10.81 23 2022-06-14 -16.04 24 2022-06-15 -22.17 25 2022-06-16 -19.93 26 2022-06-17 -12.68 27 2022-08-05 15.76 28 2022-09-22 -4.23 29 2022-09-28 10.02
解决方案
Plotly Express的px.bar没有直接参数强制日期轴等间距,但可以通过两种简单方法实现需求:
方法1:将日期列转为字符串类型
把DATE列从datetime类型转为字符串,Plotly会将其当作分类变量处理,自动让柱子等间距排列:
# 转换日期列类型 data_['DATE'] = data_['DATE'].astype(str) # 绘制柱状图 fig = px.bar(data_, x='DATE', y='Change') fig.show()
方法2:用索引作为x轴,自定义刻度标签
如果需要保留日期的datetime属性(方便后续时间相关操作),可以用数据索引作为x轴,再将日期设置为x轴刻度标签:
fig = px.bar(data_, x=data_.index, y='Change') # 自定义x轴刻度与标签 fig.update_xaxes( tickmode='array', tickvals=data_.index, ticktext=data_['DATE'].dt.strftime('%Y-%m-%d') # 可自行调整日期显示格式 ) fig.show()
额外优化:调整柱子紧密程度
如果想让柱子更紧凑,可以添加barmode='group'或调整width参数:
fig = px.bar(data_, x='DATE', y='Change', barmode='group', width=0.8)
内容的提问来源于stack exchange,提问作者Spedtsberg
相关产品推荐
相关产品推荐

