在一个窗口中绘制2个图形(python)



如何在同一图中绘制两条线?下面的代码是我的尝试,但它没有工作。'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()

最新更新