【发布时间】:2020-03-24 03:54:37
【问题描述】:
我想在时间序列图表上显示具有适当条形宽度的条形。
fig,ax1=plt.subplots()
x_nums = list(range(50))
x_dates = pd.date_range(date_from,periods=50,freq='h')
y1 = list(range(50))
y2=y1.copy()
y2.reverse()
ax1.plot(x_nums, y1, color='r',zorder=10,linewidth=5)
# ax1.plot(x_dates, y1, color='r',zorder=10,linewidth=5)
ax2=ax1.twinx()
ax2.bar(x_nums, y2, color='b',zorder=1,alpha=0.3)
# ax2.bar(x_dates, y2, color='b',zorder=1,alpha=0.3)
当我使用 x_nums 绘制时,将显示左侧图像,如果使用 x_dates,则将显示右侧。
- 如何制作适当宽度的条形,即与图 1 上的相同?我知道我可以设置 ax2.bar(width=.1) 或其他东西,但我想生成许多具有不同刻度数和大小的图表,我只想让 matplotlib 保持适当的宽度,就像 x_nums 是 X 轴一样。
我尝试设置 witdth = 1/len(x_dates) 但这不适用于具有大量刻度的图表,因为它会使条形太细。
[编辑] 答案:将 matplotlib 升级到 width 接受 np.timedelta 的版本,然后
ax2.bar(x_dates, y2, width=(x_dates[1]-x_dates[0])*0.8)
- 如何将 ax1 发送到前面? zorder 在这种情况下不起作用。我仍然希望 y1 在左侧,而 y2 在右侧。
[编辑] 答案:PyPlot move alternative y axis to background
谢谢!
【问题讨论】:
-
@rafaelgonzalez 看到了那个,没有帮助。宽度在该答案中是固定的,但我希望宽度根据我绘制的任何数据行的方式而改变。 (窄表示大量数据,宽表示少量数据)
-
较新版本的 matplotlib 允许将宽度指定为 timedelta。
-
@JodyKlymak 你能发一些链接吗?没找到
标签: python matplotlib