使用Matplotlib在Python中绘制时间


163

我有一个格式为(HH:MM:SS.mmmmmm)的时间戳数组和另一个浮点数数组,每个浮点数对应于timestamp数组中的一个值。

我可以使用Matplotlib在x轴上绘制时间,在y轴上绘制数字吗?

我试图这样做,但是不知何故它只接受浮点数数组。如何获取时间图?我必须以任何方式修改格式吗?

Answers:


178

您必须首先将时间戳转换为Python datetime对象(使用datetime.strptime)。然后使用date2num将日期转换为matplotlib格式。

使用plot_date以下方式绘制日期和值:

dates = matplotlib.dates.date2num(list_of_datetimes)
matplotlib.pyplot.plot_date(dates, values)

2
它会绘制日期还是时间?我只想要自从转换为日期时间以来的时间,年份设置为1990
。– randomThought

“ ...到日期时间的转换,年份设置为1990”:请问您发布用于将字符串转换为日期时间的代码?转换可能有问题。回覆。图表标签的格式,请参阅JKSeppänen提供的date_demo1链接。matplot lib文档非常棒,顺便说一句。matplotlib.sourceforge.net/index.html
代码解码器

14
plot_dates-> matplotlib.pyplot.plot_date(dates,values)
Pete 2010年

3
散点图呢?我想提供一个size数组来确定散点气泡的大小,但是没有等效项scatter_date(),也没有明显/直接的方法来获取此图。
dwanderson

4
上面的代码返回一个带有一个对象类型的列表:matplotlib.lines.Line2D对象。现在如何使用它来显示图形?
Arindam Roychowdhury

87

您还可以使用pyplot.plot绘制时间戳,值对(从它们的字符串表示形式解析它们之后)。(使用matplotlib 1.2.0和1.3.1版进行了测试)

例:

import datetime
import random
import matplotlib.pyplot as plt

# make up some data
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]

# plot
plt.plot(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()

plt.show()

结果图像:

线图


这与散点图相同:

import datetime
import random
import matplotlib.pyplot as plt

# make up some data
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]

# plot
plt.scatter(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()

plt.show()

产生类似于此的图像:

散点图


4
@andi应该可以像我的示例一样工作(更改plotscatter)。
moooeeeep 2014年

1
我不明白为什么这是我遇到的第五个问题,在这个问题上没有人真正使用散点图进行TRIED-它不起作用。Type Error - invalid type promotion
dwanderson

1
@dwanderson然后,也许您做错了。我在datetime.datetime帖子中添加了一个在x轴上带有对象的散点图示例。
moooeeeep

对于网格中添加plt.grid(True)
克里斯托夫鲁西研究所

1
@AimForClarity在matplotlib.__version__2.2.2下为我工作。不过,默认情况下,散点图设置了一些过宽的x限制。这个答案似乎提供了一种手动调整以外的解决方法plt.xlim(...)stackoverflow.com/a/46467896/1025391
moooeeeep

23

7年后,这段代码对我有所帮助。但是,我的时间仍然没有正确显示。

在此处输入图片说明

使用Matplotlib 2.0.0,我不得不从Paul H 编辑matplotlib中编辑x轴刻度标签的日期格式中添加以下代码。

import matplotlib.dates as mdates
myFmt = mdates.DateFormatter('%d')
ax.xaxis.set_major_formatter(myFmt)

我将格式更改为(%H:%M),并且时间显示正确。 在此处输入图片说明

非常感谢社区。


16

我在使用matplotlib版本2.0.2时遇到了麻烦。从上面运行示例,我得到了一组居中的气泡集合。

气泡居中的堆栈图

我通过添加另一行“修复”了该问题:

plt.plot([],[])

整个代码段变为:

import datetime
import random
import matplotlib.pyplot as plt
import matplotlib.dates as mdates


# make up some data
x = [datetime.datetime.now() + datetime.timedelta(minutes=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]

# plot
plt.plot([],[])
plt.scatter(x,y)

# beautify the x-labels
plt.gcf().autofmt_xdate()
myFmt = mdates.DateFormatter('%H:%M')
plt.gca().xaxis.set_major_formatter(myFmt)

plt.show()
plt.close()

这将生成图像,其中气泡按需分布。

气泡随时间分布的图形


对我来说在py2.6上不起作用。我得到ValueError:视图限制最小值-0.05500000000000001小于1,并且是无效的Matplotlib日期值。如果您将非datetime值传递给具有datetime单位的轴,则该情况经常发生<图形尺寸432x288带1个轴>
AimForClarity

有解决的奇怪X-LIMS是设置他们自己:stackoverflow.com/questions/21423158/...
Qaswed
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.