如何解决如何在仅带有谨慎的x轴刻度位置的带有日期时间标签的条形图上绘制垂直线?
我正在尝试使用axvline
绘制一条垂直线,但最终出现以下错误。
更新:该问题与已发布的参考文献有所不同,因为仅使用了谨慎的x轴刻度位置(如Trenton McKinney所述)。
错误
TypeError: '<' not supported between instances of 'Timestamp' and 'numpy.float64'
代码
import pandas as pd
df = pd.DataFrame({'A': {0: '2020-01-01 06:00:00',1: '2020-01-01 18:00:00',2: '2020-01-02 06:00:00',3: '2020-01-02 18:00:00',4: '2020-01-03 06:00:00',5: '2020-01-03 18:00:00',6: '2020-01-04 06:00:00',7: '2020-01-04 18:00:00'},'B': {0: 5,1: 5,2: 6,3:6,4:7,5:7,6:1,7:1}})
df['A'] = pd.to_datetime(df['A'])
df= df.set_index('A')
ax = df.plot.bar()
ax.axvline(pd.to_datetime('2020-01-02 18:00:00'),color='grey',zorder=1,linestyle='--',marker="v" )
ax.axvline(pd.to_datetime('2020-01-03 00:00:00'),marker="v" )
解决方法
您可以使用ax.vlines用真实的日期时间x轴构建自己的条形图:
import pandas as pd
from matplotlib.dates import DateFormatter
df = pd.DataFrame({'A': {0: '2020-01-01 06:00:00',1: '2020-01-01 18:00:00',2: '2020-01-02 06:00:00',3: '2020-01-02 18:00:00',4: '2020-01-03 06:00:00',5: '2020-01-03 18:00:00',6: '2020-01-04 06:00:00',7: '2020-01-04 18:00:00'},'B': {0: 5,1: 5,2: 6,3:6,4:7,5:7,6:1,7:1}})
df['A'] = pd.to_datetime(df['A'])
df= df.set_index('A')
fig,ax = plt.subplots()
ax.vlines(df.index,[0]*df.shape[0],df['B'],lw=25)
ax.axvline(pd.Timestamp('2020-01-02 18:00:00'),color='grey',zorder=1,linestyle='--',marker="v" )
ax.axvline(pd.Timestamp('2020-01-03 00:00:00'),marker="v" )
myFmt = DateFormatter("%m/%d/%Y %H:%M:%S")
ax.xaxis.set_major_formatter(myFmt)
ax.set_xticks(df.index)
for label in ax.xaxis.get_ticklabels():
label.set_rotation(90)
ax.set_ylim(0,);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。