ran*_*ght 145 python plot graph matplotlib
我有一个格式(HH:MM:SS.mmmmmm)的时间戳数组和另一个浮点数数组,每个数组对应一个timestamp数组中的值.
我可以使用Matplotlib在x轴上绘制时间和在y轴上绘制数字吗?
我试图,但不知何故,它只接受花车阵列.我怎样才能让它画出时间?我是否必须以任何方式修改格式?
cod*_*ape 159
您必须先将时间戳转换为Python datetime对象(使用datetime.strptime).然后使用date2num将日期转换为matplotlib格式.
使用plot_date以下内容绘制日期和值:
dates = matplotlib.dates.date2num(list_of_datetimes)
matplotlib.pyplot.plot_date(dates, values)
Run Code Online (Sandbox Code Playgroud)
moo*_*eep 77
您还可以使用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()
Run Code Online (Sandbox Code Playgroud)
结果图片:

这与散点图相同:
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()
Run Code Online (Sandbox Code Playgroud)
生成类似于此的图像:
Geo*_*ins 17
7年后,这段代码帮助了我.但是,我的时代仍然没有正确显示.
使用Matplotlib 2.0.0,我必须添加以下一些代码来自编辑保护 H.的matplotlib中x轴刻度标签的日期格式.
import matplotlib.dates as mdates
myFmt = mdates.DateFormatter('%d')
ax.xaxis.set_major_formatter(myFmt)
Run Code Online (Sandbox Code Playgroud)
感谢社区.
小智 12
我使用matplotlib版本遇到了麻烦:2.0.2.从上面运行示例我得到了一组居中的堆叠气泡.

我通过添加另一行"修复"了这个问题:
plt.plot([],[])
Run Code Online (Sandbox Code Playgroud)
整个代码段变为:
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()
Run Code Online (Sandbox Code Playgroud)
这产生了具有根据需要分布的气泡的图像.

尚未提及 Pandas 数据框。我想展示这些如何解决我的日期时间问题。我的日期时间精确到毫秒2021-04-01 16:05:37。我正在从 /proc 中提取 linux/haproxy 吞吐量,这样我就可以按照自己喜欢的方式对其进行格式化。这对于将数据输入实时图形动画非常有用。
这是 csv。(忽略我在另一张图中使用的每秒数据包列)
\nhead -2 ~/data\ndate,mbps,pps\n2021-04-01 16:05:37,113,9342.00\n...\nRun Code Online (Sandbox Code Playgroud)\n通过使用print(dataframe.dtype)我可以看到数据是如何读取的:
(base) \xe2\x9e\x9c graphs ./throughput.py\ndate object\nmbps int64\npps float64\ndtype: object\nRun Code Online (Sandbox Code Playgroud)\nPandas 将日期字符串作为“对象”拉入,即 char 类型。在脚本中按原样使用此内容:
\nimport matplotlib.pyplot as plt\nimport pandas as pd\n\ndataframe = pd.read_csv("~/data")\n\ndates = dataframe["date"]\nmbps = dataframe["mbps"]\n\nplt.plot(dates, mbps, label="mbps")\nplt.title("throughput")\nplt.xlabel("time")\nplt.ylabel("mbps")\nplt.legend()\nplt.xticks(rotation=45)\n\nplt.show()\nRun Code Online (Sandbox Code Playgroud)\n\nMatplotlib 渲染所有毫秒时间数据。我已经添加plt.xticks(rotation=45)倾斜日期,但这不是我想要的。我可以将日期“对象”转换为 datetime64[ns]。哪个 matplotlib 确实知道如何渲染。
dataframe["date"] = pd.to_datetime(dataframe["date"]) \nRun Code Online (Sandbox Code Playgroud)\n这次我的约会类型是datetime64[ns]
(base) \xe2\x9e\x9c graphs ./throughput.py\ndate datetime64[ns]\nmbps int64\npps float64\ndtype: object\nRun Code Online (Sandbox Code Playgroud)\n相同的脚本,但有 1 行差异。
\n#!/usr/bin/env python\nimport matplotlib.pyplot as plt\nimport pandas as pd\n\ndataframe = pd.read_csv("~/data")\n\n# convert object to datetime64[ns]\ndataframe["date"] = pd.to_datetime(dataframe["date"]) \n\ndates = dataframe["date"]\nmbps = dataframe["mbps"]\n\nplt.plot(dates, mbps, label="mbps")\nplt.title("throughput")\nplt.xlabel("time")\nplt.ylabel("mbps")\nplt.legend()\nplt.xticks(rotation=45)\n\nplt.show()\nRun Code Online (Sandbox Code Playgroud)\n这可能不适合您的用例,但可能对其他人有帮助。
\n\n| 归档时间: |
|
| 查看次数: |
293994 次 |
| 最近记录: |