jsontime = [-9,-8,-7,-6,-5,-4,-3,-2,-1,0]
f, axarr = plt.subplots(1, 1)
ax1 = axarr[0, 0]
ax2 = axarr[0, 1]
def tempa_plot():
jsontempa = []
ay=[]
for k in range(100):
jsontempaval = random.randint(30, 80)
jsontempa.append(jsontempaval)
print(len(jsontempa))
for i in jsontempa:
ay.append(i)
if len(ay) > 10:
ay.pop(0)
ax1.ylim(30, 80) # Set y min and max values
ax1.xlim(-9, 1)
ax1.title('Live Streaming Sensor Data: Temperature')
ax1.grid(True)
ax1.ylabel('Temp C') # Set ylabels
ax1.xlabel('Time')
ax1.plot(jsontime,ay,label='Degrees C')
ax1.legend(loc='upper left') # plot the legend
ax1.pause(0.2)
ax1.clf()
ax1.set_title('Axis [0,0]')
def tempb_plot():
jsontempb = []
by=[]
for k in range(100):
jsontempaval = random.randint(50, 100)
jsontempb.append(jsontempaval)
print(len(jsontempb))
for i in jsontempb:
by.append(i)
if len(by) > 10:
by.pop(0)
print(by)
ax2.ylim(45, 105) # Set y min and max values
ax2.xlim(-9, 1)
ax2.title('Live Streaming Sensor Data: Temperature b')
ax2.grid(True)
ax2.ylabel('Temp C') # Set ylabels
ax2.xlabel('Time')
ax2.plot(jsontime,by,label='Degrees C')
ax2.legend(loc='upper left') # plot the legend
ax2.pause(0.2)
ax2.clf()
axarr[0, 1].set_title('Axis [0,0]')
tempa_plot()
tempb_plot()
这将引发轴不可下标的错误。 我有来自Arduino的恒定数据流。我应该尝试多线程吗?有没有更简单,更有效的方法?我尝试从其他程序运行,效果很好。 TIA
答案 0 :(得分:0)
plt.subplots(1, 1)
创建一个1乘1的子图网格,即只有一个图。因此,返回的对象是轴本身,而不是数组。我怀疑您在寻找plt.subplots(1, 2)
还是plt.subplots(2, 1)
,具体取决于您希望轴如何定向。
此外,修复该错误之后,您还会发现代码中还有其他错误。您似乎正在将matplotlib.pyplot
(plt
)中的某些函数名称与axis对象上的方法混合在一起。例如,要设置y限制,可以使用plt.ylim(...)
或axes.set_ylim(...)
,但不能使用axes.ylim(...)
。我认为尝试设置ylim
,xlim
,title
,xlabel
和ylabel
时会遇到这个问题,所有这些问题均可通过如果我没记错的话,只需在每个属性的前面添加set_...
。
编辑:
另外,我刚刚注意到您在每个轴上都设置了两次标题,第一次是错误的,第二次是正确的;您可能只想这样做一次。同样也不确定clf
和pause
调用发生了什么(顺便说一句,这两个都需要指向plt
,而不是轴对象)。调用完两个函数后,只需执行plt.show()
。