使用matplotlib为多个数据集创建子图的问题

我试图在两个子图的一组上绘制14个数据帧的(力与时间)和(位置与时间)图,但它一直作为单个子图显示。所以现在我有14组子图,但我只想将所有图绘制在一组子图中。请帮我修复它!

数据集预览:https://imgur.com/ayZgQD8

我尝试创建一个循环,但似乎不起作用

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_excel('HL3 Plot.xlsx',sep= "\s+|\t+|\s+\t+|\t+\s+",sheet_name = 'HL3 New',skiprows=1)

time = np.linspace(0.01,0.8,num=80)



df1 = data.iloc[:80,:2]
df2 = data.iloc[:80,2:4]
df3 = data.iloc[:80,4:6]
df4 = data.iloc[:80,6:8]
df5 = data.iloc[:80,8:10]
df6 = data.iloc[:80,10:12]
df7 = data.iloc[:80,12:14]
df8 = data.iloc[:80,14:16]
df9 = data.iloc[:80,16:18]
df10 = data.iloc[:80,18:20]
df11 = data.iloc[:80,20:22]
df12 = data.iloc[:80,22:24]
df13 = data.iloc[:80,24:26]
df14 = data.iloc[:80,26:]

dfs = [df1,df2,df3,df4,df5,df6,df7,df8,df9,df10,df11,df12,df13,df14]


df2.rename(columns={'Force.1':'Force','Position.1':'Position'},inplace=True)
df3.rename(columns={'Force.2':'Force','Position.2':'Position'},inplace=True)
df4.rename(columns={'Force.3':'Force','Position.3':'Position'},inplace=True)
df5.rename(columns={'Force.4':'Force','Position.4':'Position'},inplace=True)
df6.rename(columns={'Force.5':'Force','Position.5':'Position'},inplace=True)
df7.rename(columns={'Force.6':'Force','Position.6':'Position'},inplace=True)
df8.rename(columns={'Force.7':'Force','Position.7':'Position'},inplace=True)
df9.rename(columns={'Force.8':'Force','Position.8':'Position'},inplace=True)
df10.rename(columns={'Force.9':'Force','Position.9':'Position'},inplace=True)
df11.rename(columns={'Force.10':'Force','Position.10':'Position'},inplace=True)
df12.rename(columns={'Force.11':'Force','Position.11':'Position'},inplace=True)
df13.rename(columns={'Force.12':'Force','Position.12':'Position'},inplace=True)
df14.rename(columns={'Force.13':'Force','Position.13':'Position'},inplace=True)

force1 = []
position1 = []
for i,df in enumerate(dfs):
    fig,axs = plt.subplots(2) 
    #plt2 = plt1.twinx()
    force1 += axs[0].plot(time,df['Force'],linestyle='-.',alpha= 0.8,label='sample{}'.format(i))
    position1 += axs[1].plot(time,df['Position'],label='sample{}'.format(i))
    fig.tight_layout()
plt.legend(force1[:],['5% Compression','10% Compression','15% Compression','20% Compression','25% Compression','30% Compression','35% Compression','40% Compression','45% Compression','50% Compression','55% Compression','60% Compression','65% Compression','70% Compression'],loc='best')
plt.title("Force vs. Displacement (CN3)",fontsize=17)
plt.xlabel("Displacement [microns]",fontsize=17)
plt.ylabel("Force [microNewtons]",fontsize=17)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plt.show()
luke_wonder 回答:使用matplotlib为多个数据集创建子图的问题

如Wavy的评论中所述,请尝试将无花果的创建放在循环之外。
这是一个更新的版本,在这里我也用循环替换了您的一些代码。 请检查此方法是否有效,因为我们没有您要检查的数据。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_excel('HL3 Plot.xlsx',sep= "\s+|\t+|\s+\t+|\t+\s+",sheet_name = 'HL3 New',skiprows=1)

time = np.linspace(0.01,0.8,num=80)
n_sets = 14
dfs = [None] * n_sets

for i in range(0,n_sets*2,2):

    dfs[i] = data.iloc[:80,i:i+2]

for i,df in enumerate(dfs[1:]) : 

    num = str(i+1)
    df.rename(columns={'Force.'+num:'Force','Position.'+num:'Position'},inplace=True)

force1 = []
position1 = []

fig,axs = plt.subplots(2) 

for i,df in enumerate(dfs):
    #plt2 = plt1.twinx()
    force1 += axs[0].plot(time,df['Force'],linestyle='-.',alpha= 0.8,label='sample{}'.format(i))
    position1 += axs[1].plot(time,df['Position'],label='sample{}'.format(i))

labels = ['{}% Compression' .format(i) for i in range(5,75,5)]

plt.legend(force1[:],labels,loc='best')
plt.title("Force vs. Displacement (CN3)",fontsize=17)
plt.xlabel("Displacement [microns]",fontsize=17)
plt.ylabel("Force [microNewtons]",fontsize=17)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)

fig.tight_layout()

plt.show()
本文链接:https://www.f2er.com/3163004.html

大家都在问