Python3.x,Matplotlib:在for循环中绘制子图

时间:2019-10-12 00:06:51

标签: python python-3.x for-loop matplotlib subplot

我想在for循环中创建子图。这被集成在较大的代码中。我有多个包含所有文件的x值和y固定值的csv文件。每个文件的形状都相同。例如,它看起来如下所示: 数据集1。

y   x1   x2   x3   x4
1  0.2  5.4  3.0  0.7
2  0.1  1.2  4.0  0.6
3  5.0  2.0  2.0  1.8
4  1.2  0.1  0.1  3.8
5  1.0  0.5  0.7  5.8
6  6.5  8.0  0.8  0.8

每个数据中的x值都被遵守:my_xdata=[array([0.2,0.1,5.0,1.2,1.0,6.5],[5.4,1.2,2.0,0.1,0.5,8.0],[3.0,4.0,2.0,0.1,0.7,0.8], [0.7,0.6,1.8,3.8,5.8,0.8)]

我想要的结果是绘制x1和y,x2和y,x3和y以及x4和y的子图。但是目前,该代码无法正常工作。以下是我当前拥有的代码。

for i in range(len(my_xdata)):
     for a in range(len(specific_x)):
         ax=plt.subplot(4,1,i+1)
         ax.plot(my_y,my_xdata[i])
         ax.set_xlim(15,70)
         ax.axhline(y=0.1, linestyle='--', color='k')
         ax.axhline(y=0.5, linestyle='--', color='k')
         ax.axhline(y=0.9, linestyle='--', color='k')
         ax.axvline(x=median_ten1[a], linestyle='--', color='k')
         ax.axvline(x=median_fifty1[a], linestyle='--', color='k')
         ax.axvline(x=median_ninety1[a], linestyle='--', color='k')
         ax.show()

它不起作用。

我收到以下错误消息,num must be 1 <= num <= 4, not 5。有什么想法吗?

specific_x并不那么重要,但是如果您想知道的话。在这里:

for i in range(len(my_xdata)):
   f90= interp1d(my_xdata[i], my_y, assume_sorted = False) #interpolate the x values 
   specific_x.append(f90(1.2)) #determine the x values when y is 1.2

1 个答案:

答案 0 :(得分:0)

无法重现该错误消息,在带有for循环的子图中绘制效果很好。我使用以下代码进行测试:

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d

my_xdata=np.array([[0.2,0.1,5.0,1.2,1.0,6.5],[5.4,1.2,2.0,0.1,0.5,8.0],[3.0,4.0,2.0,0.1,0.7,0.8],[0.7,0.6,1.8,3.8,5.8,0.8]])
my_y = np.array([10,20,30,40,50,60])

specific_x = []
for i in range(len(my_xdata)):
   f90= interp1d(my_xdata[i], my_y, assume_sorted = False) #interpolate the x values 
   specific_x.append(f90(1.2)) #determine the x values when y is 1.2


for i in range(len(my_xdata)):
     for a in range(len(specific_x)):
         ax=plt.subplot(4,1,i+1)
         ax.plot(my_y,my_xdata[i])
         ax.set_xlim(15,70)
         ax.axhline(y=0.1, linestyle='--', color='k')
         ax.axhline(y=0.5, linestyle='--', color='k')
         ax.axhline(y=0.9, linestyle='--', color='k')
#         ax.axvline(x=median_ten1[a], linestyle='--', color='k')
#         ax.axvline(x=median_fifty1[a], linestyle='--', color='k')
#         ax.axvline(x=median_ninety1[a], linestyle='--', color='k')
         #ax.show()

matplotlib output 4 subplots