我是matplotlib的新手,请原谅我的无知并帮我解决这个问题。本质上,我有一个CSV文件中的其他Python脚本正在生成以下数据。针对同一图形中matplotlib中不同时间戳的多个X值绘制多个Y值?
CSV1: 时间戳,DATA1
23:04:17, 1163557.14 bps
23:04:27, 1137578.47 bps
23:04:37, 1139094.66 bps
23:04:47, 1095752.97 bps
23:04:57, 1264145.01 bps
CSV2: 时间戳,DATA2
23:04:21, 1011000.00 bps
23:04:31, 1011000.00 bps
23:04:41, 1011000.00 bps
23:04:51, 1014000.00 bps
23:05:01, 1008000.00 bps
CSV3: 时间戳,DATA3
23:05:28, 1109617.96 bps
23:05:38, 1139177.95 bps
23:05:48, 1108110.09 bps
23:05:58, 1107078.94 bps
23:06:08, 1163406.80 bps
我想要的是沿X轴有时间运行,沿Y轴有三个Y值,分别显示“data1”,“data2”和“data3”。数据每10秒收集一次,但不一定同步。所以我不能有一个单一的X轴阵列。但我希望所有这些在同一个图表中进行比较。我怎么解决这个问题 ?
任何示例代码或导致文档将不胜感激。
**编辑:
基本上我的问题是,数据被索引沿不同的时戳,但我要绘制THEM在同一图表上。我该怎么做**
编辑2:
谢谢你们为输入。这真的有帮助。因此,这是代码我现在有:
import csv
import sys
import datetime
import random
import matplotlib.pyplot as plt
from matplotlib.dates import MinuteLocator, SecondLocator, DateFormatter
time_e_z_raw_list = []
bitrate_e_z_list = []
time_i_z_raw_list = []
bitrate_i_z_list = []
time_i_query_z_raw_list = []
bitrate_i_q_z_raw_list = []
f_enc_z = open(sys.argv[1], 'rt')
f_ing_z = open(sys.argv[2], 'rt')
f_ing_q_z = open(sys.argv[3], 'rt')
try:
reader1 = csv.reader(f_enc_z)
for row in reader1:
bitrate = row[1]
time_e_z_raw_list.append(row[0])
bitrate_e_z_list.append(bitrate[:-4])
reader3 = csv.reader(f_ing_z)
for row in reader3:
bitrate = row[1]
time_i_z_raw_list.append(row[0])
bitrate_i_z_list.append(bitrate[:-4])
reader4 = csv.reader(f_ing_q_z)
for row in reader4:
bitrate = row[1]
time_i_q_z_raw_list.append(row[0])
bitrate_i_q_z_raw_list.append(bitrate[:-4])
finally:
f_enc_z.close()
f_ing_z.close()
f_ing_q_z.close()
time_e_z_list = [datetime.datetime.strptime(s, '%H:%M:%S') for s in time_e_z_raw_list]
time_i_z_list = [datetime.datetime.strptime(s, '%H:%M:%S') for s in time_i_z_raw_list]
time_i_q_z_list = [datetime.datetime.strptime(s, '%H:%M:%S') for s in time_i_q_z_raw_list]
fig = plt.figure(figsize=(18,16))
plt.plot(time_e_z_list, bitrate_e_z_list, label="label1", lw=1)
plt.plot(time_i_z_list, bitrate_i_z_list, label="label2", lw=1)
plt.plot(time_i_q_z_list, bitrate_i_z_list, label="label3", lw=1)
minutes = MinuteLocator()
seconds = SecondLocator()
ax = plt.gca()
ax.xaxis.set_major_locator(minutes)
ax.xaxis.set_minor_locator(seconds)
ax.xaxis.set_major_formatter(DateFormatter("%H:%M:%S"))
plt.xlabel('time')
plt.ylabel('bitrate in bps')
plt.grid()
plt.legend(loc='upper right')
plt.gcf().autofmt_xdate()
plt.show()
麻烦的是,当我有一个范围超过3小时以上的时间戳,图形被扭曲得到。我如何确保X轴显示的范围根据我采样的时间戳范围动态调整?通常,我每20秒运行4个小时以上的数据点。所以,当我绘制我得到一个非常糟糕的图。我如何解决它 ?但是,当我有少量数据时,我会得到一个适当的图表。
我会非常想拥有完整的时间戳太。所以我希望时间戳沿着X轴运行。只要data1和data2的数据点关闭几秒钟。是否有可能在X轴上有时间戳? – rajath26
很高兴听到。也许你可以提供一些图像来显示这个问题实际上看起来如何 – Sebastian