Matplotlib:绘制字符串值会产生奇怪的行为

时间:2019-08-07 15:59:53

标签: python matplotlib

我正在尝试绘制两个数据序列:

  • 一年中的某天(X轴):with open(aws_env_list) as csv_file: csv_reader = csv.reader(csv_file, delimiter=',') for row in csv_reader[1:]: "" do whatever action ""
  • 日出时间(Y轴):['2019-01-01', '2019-01-02', ...]

但是 matplotlib 让我发疯了……这是一个子集(['07:04', '07:03', ...])的图:

example plot

如您所见,Y轴从ax.plot(datelist[130:230], hourlist[130:230], label='sunrise')减少到'03:57',然后突然开始增加到'03:33'。对我来说这是无稽之谈。

您能帮我解决这个问题吗?

如果您告诉我如何在两个轴上显示一个体面的刻度(例如,00:00 – 24:00间隔1小时,并有较小的滴答;以及X轴的选定日期列表),则奖励积分。< / p>

提前谢谢!

2 个答案:

答案 0 :(得分:1)

因此,由于@ ImportanceOfBeingErnest insight,我设法通过将两个数据系列都转换为Python的datetime.datetime对象来使其工作,但这还不够

为了正确绘制,Y值还必须具有相同的日期(具有固定的参考日期仅用于绘制目的)。

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

为了使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

再次感谢您!

答案 1 :(得分:0)

您使用了哪种类型的变量?您可能在日期列表和小时列表中使用了字符串。因此,在绘制它们时,matplotlib不会对列表进行排序。 您需要将值转换为正确的对象类型,然后才能正确绘制。

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