Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.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
使用Matplotlib在Python中绘制时间_Python_Graph_Plot_Matplotlib - Fatal编程技术网

使用Matplotlib在Python中绘制时间

使用Matplotlib在Python中绘制时间,python,graph,plot,matplotlib,Python,Graph,Plot,Matplotlib,我有一个格式为(HH:MM:SS.mmmmmm)的时间戳数组和另一个浮点数数组,每个浮点数对应于时间戳数组中的一个值 我可以使用Matplotlib在x轴上绘制时间,在y轴上绘制数字吗 我试图这么做,但不知怎的,它只接受了一系列的浮动。我怎样才能让它画出时间呢?我必须以任何方式修改格式吗?您必须首先将时间戳转换为Pythondatetime对象(使用datetime.strtime)。然后使用date2num将日期转换为matplotlib格式 使用以下方法绘制日期和值: 还可以使用(在从字符串

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

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


我试图这么做,但不知怎的,它只接受了一系列的浮动。我怎样才能让它画出时间呢?我必须以任何方式修改格式吗?

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

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


还可以使用(在从字符串表示形式解析时间戳和值对之后)绘制时间戳和值对。(使用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()
生成类似以下内容的图像:


7年后,这段代码帮助了我。 然而,我的时间仍然没有正确地显示出来

使用Matplotlib 2.0.0,我不得不添加Paul H

import matplotlib.dates as mdates
myFmt = mdates.DateFormatter('%d')
ax.xaxis.set_major_formatter(myFmt)
我将格式更改为(%H:%M),时间显示正确。


这一切都要感谢社区。

我在使用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()
这将生成一个气泡按需要分布的图像


熊猫数据帧尚未被提及。我想展示一下这些是如何解决我的约会时间问题的。我已将datetime设置为毫秒
2021-04-01 16:05:37
。我正在从/proc获取linux/haproxy吞吐量,这样我就可以按自己喜欢的方式格式化它。这非常适合将数据输入到实时图形动画中

下面是csv的一个例子。(忽略我在另一个图中使用的每秒数据包列)

head-2~/数据
日期,mbps,pps
2021-04-01 16:05:37,113,9342.00
...
通过使用
print(dataframe.dtype)
我可以看到数据是如何读入的:

(基本)➜  图表./throughput.py
日期对象
mbps int64
缴费灵浮动64
数据类型:对象
Pandas将日期字符串作为“object”拉入,它只是char类型。在脚本中使用此选项:

导入matplotlib.pyplot作为plt
作为pd进口熊猫
dataframe=pd.read\u csv(“~/data”)
日期=数据帧[“日期”]
mbps=数据帧[“mbps”]
plt.绘图(日期、mbps、标签=“mbps”)
产品名称(“吞吐量”)
plt.xlabel(“时间”)
plt.ylabel(“mbps”)
plt.legend()
plt.xticks(旋转=45)
plt.show()

Matplotlib渲染所有毫秒级时间数据。我添加了
plt.xticks(rotation=45)
来倾斜日期,但这不是我想要的。我可以将日期“对象”转换为datetime64[ns]。哪个matplotlib知道如何渲染

dataframe[“date”]=pd.to_datetime(dataframe[“date”])
这次我的日期是类型
datetime64[ns]

(基本)➜  图表./throughput.py
日期时间64[ns]
mbps int64
缴费灵浮动64
数据类型:对象
相同的脚本,但有一行差异

#/usr/bin/env python
将matplotlib.pyplot作为plt导入
作为pd进口熊猫
dataframe=pd.read\u csv(“~/data”)
#将对象转换为datetime64[ns]
dataframe[“date”]=pd.to_datetime(dataframe[“date”])
日期=数据帧[“日期”]
mbps=数据帧[“mbps”]
plt.绘图(日期、mbps、标签=“mbps”)
产品名称(“吞吐量”)
plt.xlabel(“时间”)
plt.ylabel(“mbps”)
plt.legend()
plt.xticks(旋转=45)
plt.show()
这可能不适合您的用例,但它可能会帮助其他人


它是绘制日期还是仅绘制时间?我只想要时间,因为在转换为datetime时,年份被设置为1990年。”…在转换为datetime时,年份被设置为1990年”:您可以发布用于从字符串转换为datetime的代码吗?转换可能有问题。重新。关于图表标签的格式,请参见J.K.Seppänen提供的date_demo1链接。matplot库文档非常优秀,顺便说一句,plot_dates-->matplotlib.pyplot.plot_date(日期、值)散点图怎么样?我想提供一个大小数组来确定散点气泡的大小,但没有等效的
散点日期()
,也没有明显/直接的方法来获取此图形。上面返回的列表包含一个类型为matplotlib.lines.Line2D object的对象。现在我如何使用它来显示图形?@andi它应该和我的示例一样工作(将
绘图
更改为
散布
)。我不明白为什么这是我遇到的第五个问题,没有人真正尝试使用散布图-它不起作用<代码>类型错误-无效的类型升级@dwanderson那么,也许你做错了什么。我在我的帖子中添加了一个x轴上带有
datetime.datetime
对象的散点图示例。对于网格,添加
plt.grid(True)
@AimForClarity适用于
matplotlib.\uu version\uu
2.2.2。不过,散点图默认设置了一些过宽的x限制。这个答案似乎提供了一种解决方法,而不是手动调整
plt.xlim(…)
:对我来说,py2.6不起作用。I get ValueError:视图限制最小值-0.05500000000000001小于1,并且是无效的Matplotlib日期值。如果将非日期时间值传递给具有日期时间单位的轴,则通常会发生这种情况。奇怪的x-LIM的解决方案是自行设置:
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()