Matplotlib:打印字符串值会产生奇怪的行为

2024-05-14 16:31:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图绘制两个数据系列:

  • 一年中的某一天(X轴):['2019-01-01', '2019-01-02', ...]
  • 日出时间(Y轴):['07:04', '07:03', ...]

但是,matplotlib让我抓狂了…下面是一个子集(ax.plot(datelist[130:230], hourlist[130:230], label='sunrise'))的图:

example plot

如您所见,Y轴从'03:57'减小到'03:33',然后突然开始增大到'04:26'。那对我来说毫无意义

你能帮我修一下吗

如果您告诉我如何在两个轴上显示一个合适的刻度(即00:00–24:00,等距1小时,带有小刻度,则可获得额外点数;以及为X轴选择的日期列表)

提前谢谢


Tags: 数据plotmatplotlib时间绘制axlabel子集
2条回答

所以,多亏了@ImportanceOfBeingErnest的insight,我成功地将这两个数据序列转换成Python的datetime.datetime对象,但这还不够

为了正确绘制,Y值也需要具有相同的日期(仅出于绘制目的,具有固定的参考日期)

对于图表的比例,我找到了matplotlib.dates模块,它恰好包含了对属性有用的FormatterLocator

为了得到一个完整的Y轴24小时的范围,我用了:

ax.set_ylim([datetime.datetime(2019, 1, 1), datetime.datetime(2019, 1, 2)])
ax.yaxis.set_major_formatter(DateFormatter('%H:%M'))
ax.yaxis.set_major_locator(HourLocator())

总体结果(添加了一些内容)目前看来已经足够好了(即使我必须修复UTC的偏移): result chart

再次感谢

你使用了什么类型的变量?您可能在datelist和hourlist中使用了字符串。因此,在打印列表时,matplotlib不会对列表进行排序。 您需要将值转换为正确的对象类型,然后才能正确绘制

例如: 如果我在y值中绘制列表['c','a','b',,那么我的y轴将是:c,然后是a,然后是b

相关问题 更多 >

    热门问题