Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib:打印字符串值会产生奇怪的行为_Python_Matplotlib - Fatal编程技术网

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

Python Matplotlib:打印字符串值会产生奇怪的行为,python,matplotlib,Python,Matplotlib,我试图绘制两个数据系列: 年度日期(X轴):['2019-01-01','2019-01-02',…] 日出时间(Y轴):['07:04','07:03',…] 但是matplotlib让我抓狂了……下面是一个子集的图(ax.plot(datelist[130:230],hourlist[130:230],label='sunrise')): 如您所见,Y轴从'03:57'减小到'03:33',然后突然开始增加到'04:26'。那对我来说毫无意义 你能帮我修一下吗 如果您告诉我如何在两个轴

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

  • 年度日期(X轴):
    ['2019-01-01','2019-01-02',…]
  • 日出时间(Y轴):
    ['07:04','07:03',…]
但是matplotlib让我抓狂了……下面是一个子集的图(
ax.plot(datelist[130:230],hourlist[130:230],label='sunrise')
):

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

你能帮我修一下吗

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


提前谢谢你

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

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

因此,多亏了@ImportanceOfBeingErnest,我通过将两个数据系列转换为Python的
datetime.datetime
对象,成功地实现了这一点,但这还不够

为了正确打印,Y值还需要具有相同的日期(仅用于打印的固定参考日期)

对于图表的比例,我找到了
matplotlib.dates
模块,该模块恰好包含轴属性的有用
Formatter
s和
Locator
s

为了获得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的偏移):


再次感谢你

首先需要将字符串转换为
datetime
对象。(否则,matplotlib无法知道“2019-01-01”是一个日期。)谢谢,这帮了大忙。我必须为Y轴的值强制一个日期,但没关系。尝试将Y轴的时间增量转换为时间增量,这样就不需要强制日期。我从未尝试过自己,但我认为应该也能用。@Valentino不,matplotlib需要日期(但如果只需要时间,可以使用任意日期)