Python3.x,Matplotlib:在 for 循环中绘制子图
Python3.x, Matplotlib: Plotting subplots in a for-loop
我想在 for 循环中制作子图。这被集成在一个更大的代码中。我有多个 csv 文件,其中包含所有文件的各种 x 值和固定 y 值。每个文件的形状是相同的。例如,它看起来像下面这样:
数据集 #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
无法重现错误消息,使用 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
我想在 for 循环中制作子图。这被集成在一个更大的代码中。我有多个 csv 文件,其中包含所有文件的各种 x 值和固定 y 值。每个文件的形状是相同的。例如,它看起来像下面这样: 数据集 #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
无法重现错误消息,使用 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