如何在同一图中绘制两条线?下面的代码是我的尝试,但它没有工作。'Temp'是我添加的新变量
(2nd EDITED )
from datetime import datetime
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import numpy as np
from scipy.stats import mode
import re
linematchregex = re.compile('(d+/d+/d+ d+:d+),(d+.d+),(d+.d+)')
startTime = datetime.strptime(raw_input('please enter start time in format like 21/7/2014 0:00 :'), '%d/%m/%Y %H:%M')
endTime = datetime.strptime(raw_input('please enter end time in format like 22/7/2014 23:57 :') , '%d/%m/%Y %H:%M')
with open(r'data.txt', 'r') as strm:
strm.next() #skip first line
t, y, temp = zip(*[p for line in strm for p in linematchregex.findall(line)])
t = [datetime.strptime(x, '%d/%m/%Y %H:%M') for x in t ]
temp = [float(x) for i,x in enumerate(temp) if startTime<=t[i]<=endTime]
y = [float(x) for i,x in enumerate(y) if startTime<=t[i]<=endTime]
t = [x for x in t if startTime<=x<=endTime]
fig = plt.figure()
ax1 = fig.add_subplot(1, 1, 1, axisbg='white')
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
ax1.plot(t, y, 'c', linewidth=3.3)
ax1.plot(t, temp)
plt.show()
我的程序可以绘制时间戳与辐照度,但我怎么能绘制下面的所有列时间与辐照度,温度
时间(EDITED)
TimeStamp,Irradiance,Ambient_Temperature
21/7/2014 12:00:06 AM,0.66,29.16
21/7/2014 12:00:20 AM,0.71,29.16
21/7/2014 12:00:34 AM,0.65,29.17
21/7/2014 12:00:48 AM,0.67,29.17
21/7/2014 12:01:08 AM,0.58,29.17
21/7/2014 12:01:23 AM,0.54,29.18
21/7/2014 12:01:37 AM,0.63,29.17
21/7/2014 12:01:52 AM,0.65,29.16
21/7/2014 12:02:07 AM,0.64,29.16
21/7/2014 12:02:22 AM,0.63,29.18
21/7/2014 12:02:36 AM,0.63,29.16
21/7/2014 12:02:50 AM,0.64,29.17
21/7/2014 12:03:04 AM,0.62,29.19
21/7/2014 12:03:24 AM,0.64,29.21
如果您想在绘图中创建另一个子绘图。试试这个,
fig = plt.figure()
ax1 = fig.add_subplot(1, 2, 1, axisbg='white')
ax2 = fig.add_subplot(1, 2, 2, axisbg='white')
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%d/%m/%Y %H:%M'))
ax2.xaxis.set_major_formatter(mdates.DateFormatter('%d/%m/%Y %H:%M'))
ax1.plot(t, y, 'c', linewidth=3.3)
ax2.plot(t, temp)
方法add_subplot
添加了一个子图。前两个参数给出行数和列数,第三个参数表示要在1x2矩阵中创建哪个子图。上面的代码将在左侧和右侧各创建一个子图。如果你想要一个在另一个之上,你可以在两次调用add_subplot
时反转前两个参数。
另一个问题是(据我所知)有一个bug,当你创建temp
,
temp = [float(x) for i,x in enumerate(y) if startTime<=t[i]<=endTime]
应为
temp = [float(x) for i,x in enumerate(temp) if startTime<=t[i]<=endTime]
如果你想在同一组轴上的两个绘图,你的原始代码将工作与上述更改。如果你想在图例中标记行,你也可以通过将plot命令更改为
来做到这一点ax1.plot(t, y, 'c', linewidth=3.3, label="Irradiance")
ax1.plot(t, temp, label="Temperature")
plt.legend()