如何在 for 循环内的一个 window 中制作 Pandas 数据框中列的子图
How can make subplots of columns in Pandas dataframe in one window inside of for-loop
* 请帮助它非常重要:为什么无法通过在 for 循环中使用 HeatMap 来获取 Pandas 数据帧的子图?
我正在尝试在迭代期间在 for 循环内的 pandas 数据帧中创建列的子图,因为我为每个循环绘制了 每个 480 个值 的结果将属于 A、B、C 的所有 3 个子图并排放在一个 window 中。我只找到一个答案 here which I'm afraid is not my case! @euri10 answered by using flat.
我的脚本如下:
# Import and call the needed libraries
import numpy as np
import pandas as pd
import os
import seaborn as sns
import matplotlib.pyplot as plt
'''
Take a list and create the formatted matrix
'''
def mkdf(ListOf480Numbers):
normalMatrix = np.array_split(ListOf480Numbers,8) #Take a list and create 8 array (Sections)
fixMatrix = []
for i in range(8):
lines = np.array_split(normalMatrix[i],6) #Split each section in lines (each line contains 10 cells from 0-9)
newMatrix = [0,0,0,0,0,0] #Empty array to contain reordered lines
for j in (1,3,5):
newMatrix[j] = lines[j] #lines 1,3,5 remain equal
for j in (0,2,4):
newMatrix[j] = lines[j][::-1] #lines 2,4,6 are inverted
fixMatrix.append(newMatrix) #After last update of format of table inverted (bottom-up zig-zag)
return fixMatrix
'''
Print the matrix with the required format
'''
def print_df(fixMatrix):
values = []
for i in range(6):
values.append([*fixMatrix[4][i], *fixMatrix[7][i]]) #lines form section 6 and 7 are side by side
for i in range(6):
values.append([*fixMatrix[5][i], *fixMatrix[6][i]]) #lines form section 4 and 5 are side by side
for i in range(6):
values.append([*fixMatrix[1][i], *fixMatrix[2][i]]) #lines form section 2 and 3 are side by side
for i in range(6):
values.append([*fixMatrix[0][i], *fixMatrix[3][i]]) #lines form section 0 and 1 are side by side
df = pd.DataFrame(values)
return (df)
'''
Normalizing Formula
'''
def normalize(value, min_value, max_value, min_norm, max_norm):
new_value = ((max_norm - min_norm)*((value - min_value)/(max_value - min_value))) + min_norm
return new_value
'''
Split data in three different lists A, B and C
'''
dft = pd.read_csv('D:\me4.TXT', header=None)
id_set = dft[dft.index % 4 == 0].astype('int').values
A = dft[dft.index % 4 == 1].values
B = dft[dft.index % 4 == 2].values
C = dft[dft.index % 4 == 3].values
data = {'A': A[:,0], 'B': B[:,0], 'C': C[:,0]}
#df contains all the data
df = pd.DataFrame(data, columns=['A','B','C'], index = id_set[:,0])
'''
Data generation phase
'''
#next iteration create all plots, change the number of cycles
cycles = int(len(df)/480)
print(cycles)
for i in df:
try:
os.mkdir(i)
except:
pass
min_val = df[i].min()
min_nor = -1
max_val = df[i].max()
max_nor = 1
for cycle in range(1): #iterate thriugh all cycles range(1) by ====> range(int(len(df)/480))
count = '{:04}'.format(cycle)
j = cycle * 480
ordered_data = mkdf(df.iloc[j:j+480][i])
csv = print_df(ordered_data)
#Print .csv files contains matrix of each parameters by name of cycles respectively
csv.to_csv(f'{i}/{i}{count}.csv', header=None, index=None)
if 'C' in i:
min_nor = -40
max_nor = 150
#Applying normalization for C between [-40,+150]
new_value3 = normalize(df['C'].iloc[j:j+480][i].values, min_val, max_val, -40, 150)
n_cbar_kws = {"ticks":[-40,150,-20,0,25,50,75,100,125]}
df3 = print_df(mkdf(new_value3))
else:
#Applying normalizayion for A,B between [-1,+1]
new_value1 = normalize(df['A'].iloc[j:j+480][i].values, min_val, max_val, -1, 1)
new_value2 = normalize(df['B'].iloc[j:j+480][i].values, min_val, max_val, -1, 1)
n_cbar_kws = {"ticks":[-1.0,-0.75,-0.50,-0.25,0.00,0.25,0.50,0.75,1.0]}
df1 = print_df(mkdf(new_value1))
df2 = print_df(mkdf(new_value2))
#Plotting parameters by using HeatMap
plt.figure()
sns.heatmap(df, vmin=min_nor, vmax=max_nor, cmap ='coolwarm', cbar_kws=n_cbar_kws)
plt.title(i, fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
#Print .PNG images contains HeatMap plots of each parameters by name of cycles respectively
plt.savefig(f'{i}/{i}{count}.png')
#plotting all columns ['A','B','C'] in-one-window side by side
fig, axes = plt.subplots(nrows=1, ncols=3 , figsize=(20,10))
plt.subplot(131)
sns.heatmap(df1, vmin=-1, vmax=1, cmap ="coolwarm", linewidths=.75 , linecolor='black', cbar=True , cbar_kws={"ticks":[-1.0,-0.75,-0.5,-0.25,0.00,0.25,0.5,0.75,1.0]})
fig.axes[-1].set_ylabel('[MPa]', size=20) #cbar_kws={'label': 'Celsius'}
plt.title('A', fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
plt.subplot(132)
sns.heatmap(df2, vmin=-1, vmax=1, cmap ="coolwarm", cbar=True , cbar_kws={"ticks":[-1.0,-0.75,-0.5,-0.25,0.00,0.25,0.5,0.75,1.0]})
fig.axes[-1].set_ylabel('[Mpa]', size=20) #cbar_kws={'label': 'Celsius'}
#sns.despine(left=True)
plt.title('B', fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
plt.subplot(133)
sns.heatmap(df3, vmin=-40, vmax=150, cmap ="coolwarm" , cbar=True , cbar_kws={"ticks":[-40,150,-20,0,25,50,75,100,125]})
fig.axes[-1].set_ylabel('[°C]', size=20) #cbar_kws={'label': 'Celsius'}
#sns.despine(left=True)
plt.title('C', fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
plt.suptitle(f'Analysis of data in cycle Nr.: {count}', color='yellow', backgroundcolor='black', fontsize=48, fontweight='bold')
plt.subplots_adjust(top=0.7, bottom=0.3, left=0.05, right=0.95, hspace=0.2, wspace=0.2)
#plt.subplot_tool()
plt.savefig(f'{i}/{i}{i}{count}.png')
plt.show()
到目前为止,我无法获得正确的输出,因为在每个周期中,它都会以不同的间隔打印 3 次 plot,例如。它在左侧打印 'A'
然后再次在 'B'
和 'C'
的名称下打印 'A'
在中间和右侧 in-one-window。它再次打印 'B'
3 次而不是一次并将其放在中间,最后它打印 'C'
3 次而不是一次并放在右侧它放在中间和左侧!
Target 是捕获 one-window 中所有 3 列 A、B & C 的子图45=]主for循环中的每个循环(每480个值乘以480个值)!
第一个循环:0000 -----> A、B、C 的子图 ----> 将其存储为 0000.png
第 2 个循环:0001 -----> A、B、C 的子图 ----> 将其存储为 0001.png
...
问题是在for循环中使用df,它传递A或B或C的值 3 次 虽然它应该传递它值分别属于每个列 一次 我提供了一张不成功输出的图片 here 这样你就可以准确地看到问题所在显然是
我想要的输出如下:
我还提供了 3 个周期的数据集示例文本文件:dataset
所以在查看了您的代码和您的要求之后,我想我知道问题出在哪里了。
您的 for
循环顺序错误。您希望每个周期都有一个新图形,包含每个 'A'、'B' 和 'C' 作为子图。
这意味着你的 outer 循环应该遍历循环,然后你的 inner 循环遍历 i
,而你的缩进并且循环的顺序使您尝试通过 i
(i='A'
, cycle=1
) 在您的第一个循环中绘制所有 'A','B','C'
子图,而不是在您的第一个循环之后绘制第一个循环,所有 i
(i='A','B','C'
, cycle=1
).
这也是您遇到未定义 df3 的问题(如您对 this answer 的评论中所述)的原因。 df3 的定义在 if 块中检查是否 'C' in i
,在你的第一次循环中,这个条件不满足,因此 df3 没有定义,但你仍在尝试绘制它!
你也遇到了和你另一个问题一样的问题NaN/inf值。
重新排列 for
循环和缩进并清理 NaN/inf 值得到以下代码:
#...
#df contains all the data
df = pd.DataFrame(data, columns=['A','B','C'], index = id_set[:,0])
df = df.replace(np.inf, np.nan)
df = df.fillna(0)
'''
Data generation phase
'''
#next iteration create all plots, change the number of cycles
cycles = int(len(df)/480)
print(cycles)
for cycle in range(cycles): #iterate thriugh all cycles range(1) by ====> range(int(len(df)/480))
count = '{:04}'.format(cycle)
j = cycle * 480
for i in df:
try:
os.mkdir(i)
except:
pass
min_val = df[i].min()
min_nor = -1
max_val = df[i].max()
max_nor = 1
ordered_data = mkdf(df.iloc[j:j+480][i])
csv = print_df(ordered_data)
#Print .csv files contains matrix of each parameters by name of cycles respectively
csv.to_csv(f'{i}/{i}{count}.csv', header=None, index=None)
if 'C' in i:
min_nor = -40
max_nor = 150
#Applying normalization for C between [-40,+150]
new_value3 = normalize(df['C'].iloc[j:j+480], min_val, max_val, -40, 150)
n_cbar_kws = {"ticks":[-40,150,-20,0,25,50,75,100,125]}
df3 = print_df(mkdf(new_value3))
else:
#Applying normalizayion for A,B between [-1,+1]
new_value1 = normalize(df['A'].iloc[j:j+480], min_val, max_val, -1, 1)
new_value2 = normalize(df['B'].iloc[j:j+480], min_val, max_val, -1, 1)
n_cbar_kws = {"ticks":[-1.0,-0.75,-0.50,-0.25,0.00,0.25,0.50,0.75,1.0]}
df1 = print_df(mkdf(new_value1))
df2 = print_df(mkdf(new_value2))
# #Plotting parameters by using HeatMap
# plt.figure()
# sns.heatmap(df, vmin=min_nor, vmax=max_nor, cmap ='coolwarm', cbar_kws=n_cbar_kws)
# plt.title(i, fontsize=12, color='black', loc='left', style='italic')
# plt.axis('off')
# #Print .PNG images contains HeatMap plots of each parameters by name of cycles respectively
# plt.savefig(f'{i}/{i}{count}.png')
#plotting all columns ['A','B','C'] in-one-window side by side
fig, axes = plt.subplots(nrows=1, ncols=3 , figsize=(20,10))
plt.subplot(131)
sns.heatmap(df1, vmin=-1, vmax=1, cmap ="coolwarm", linewidths=.75 , linecolor='black', cbar=True , cbar_kws={"ticks":[-1.0,-0.75,-0.5,-0.25,0.00,0.25,0.5,0.75,1.0]})
fig.axes[-1].set_ylabel('[MPa]', size=20) #cbar_kws={'label': 'Celsius'}
plt.title('A', fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
plt.subplot(132)
sns.heatmap(df2, vmin=-1, vmax=1, cmap ="coolwarm", cbar=True , cbar_kws={"ticks":[-1.0,-0.75,-0.5,-0.25,0.00,0.25,0.5,0.75,1.0]})
fig.axes[-1].set_ylabel('[Mpa]', size=20) #cbar_kws={'label': 'Celsius'}
#sns.despine(left=True)
plt.title('B', fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
plt.subplot(133)
sns.heatmap(df3, vmin=-40, vmax=150, cmap ="coolwarm" , cbar=True , cbar_kws={"ticks":[-40,150,-20,0,25,50,75,100,125]})
fig.axes[-1].set_ylabel('[°C]', size=20) #cbar_kws={'label': 'Celsius'}
#sns.despine(left=True)
plt.title('C', fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
plt.suptitle(f'Analysis of data in cycle Nr.: {count}', color='yellow', backgroundcolor='black', fontsize=48, fontweight='bold')
plt.subplots_adjust(top=0.7, bottom=0.3, left=0.05, right=0.95, hspace=0.2, wspace=0.2)
#plt.subplot_tool()
plt.savefig(f'{i}/{i}{i}{count}.png')
plt.show()
这会为您提供以下三张图像,作为三个单独的图形以及您提供的数据:
Figure 1, Figure 2, Figure 3
总的来说,你的代码比较乱。我明白了,如果你是编程新手,只是想分析你的数据,你可以做任何有用的事情,不管它是否漂亮。
但是,我认为混乱的代码意味着您无法正确查看脚本的底层逻辑,这就是您遇到此问题的原因。
如果您再次遇到类似的问题,我会建议您写出一些包含所有循环的 'pseudo code' 并尝试思考您在每个循环中要完成的任务。
* 请帮助它非常重要:为什么无法通过在 for 循环中使用 HeatMap 来获取 Pandas 数据帧的子图?
我正在尝试在迭代期间在 for 循环内的 pandas 数据帧中创建列的子图,因为我为每个循环绘制了 每个 480 个值 的结果将属于 A、B、C 的所有 3 个子图并排放在一个 window 中。我只找到一个答案 here which I'm afraid is not my case! @euri10 answered by using flat.
我的脚本如下:
# Import and call the needed libraries
import numpy as np
import pandas as pd
import os
import seaborn as sns
import matplotlib.pyplot as plt
'''
Take a list and create the formatted matrix
'''
def mkdf(ListOf480Numbers):
normalMatrix = np.array_split(ListOf480Numbers,8) #Take a list and create 8 array (Sections)
fixMatrix = []
for i in range(8):
lines = np.array_split(normalMatrix[i],6) #Split each section in lines (each line contains 10 cells from 0-9)
newMatrix = [0,0,0,0,0,0] #Empty array to contain reordered lines
for j in (1,3,5):
newMatrix[j] = lines[j] #lines 1,3,5 remain equal
for j in (0,2,4):
newMatrix[j] = lines[j][::-1] #lines 2,4,6 are inverted
fixMatrix.append(newMatrix) #After last update of format of table inverted (bottom-up zig-zag)
return fixMatrix
'''
Print the matrix with the required format
'''
def print_df(fixMatrix):
values = []
for i in range(6):
values.append([*fixMatrix[4][i], *fixMatrix[7][i]]) #lines form section 6 and 7 are side by side
for i in range(6):
values.append([*fixMatrix[5][i], *fixMatrix[6][i]]) #lines form section 4 and 5 are side by side
for i in range(6):
values.append([*fixMatrix[1][i], *fixMatrix[2][i]]) #lines form section 2 and 3 are side by side
for i in range(6):
values.append([*fixMatrix[0][i], *fixMatrix[3][i]]) #lines form section 0 and 1 are side by side
df = pd.DataFrame(values)
return (df)
'''
Normalizing Formula
'''
def normalize(value, min_value, max_value, min_norm, max_norm):
new_value = ((max_norm - min_norm)*((value - min_value)/(max_value - min_value))) + min_norm
return new_value
'''
Split data in three different lists A, B and C
'''
dft = pd.read_csv('D:\me4.TXT', header=None)
id_set = dft[dft.index % 4 == 0].astype('int').values
A = dft[dft.index % 4 == 1].values
B = dft[dft.index % 4 == 2].values
C = dft[dft.index % 4 == 3].values
data = {'A': A[:,0], 'B': B[:,0], 'C': C[:,0]}
#df contains all the data
df = pd.DataFrame(data, columns=['A','B','C'], index = id_set[:,0])
'''
Data generation phase
'''
#next iteration create all plots, change the number of cycles
cycles = int(len(df)/480)
print(cycles)
for i in df:
try:
os.mkdir(i)
except:
pass
min_val = df[i].min()
min_nor = -1
max_val = df[i].max()
max_nor = 1
for cycle in range(1): #iterate thriugh all cycles range(1) by ====> range(int(len(df)/480))
count = '{:04}'.format(cycle)
j = cycle * 480
ordered_data = mkdf(df.iloc[j:j+480][i])
csv = print_df(ordered_data)
#Print .csv files contains matrix of each parameters by name of cycles respectively
csv.to_csv(f'{i}/{i}{count}.csv', header=None, index=None)
if 'C' in i:
min_nor = -40
max_nor = 150
#Applying normalization for C between [-40,+150]
new_value3 = normalize(df['C'].iloc[j:j+480][i].values, min_val, max_val, -40, 150)
n_cbar_kws = {"ticks":[-40,150,-20,0,25,50,75,100,125]}
df3 = print_df(mkdf(new_value3))
else:
#Applying normalizayion for A,B between [-1,+1]
new_value1 = normalize(df['A'].iloc[j:j+480][i].values, min_val, max_val, -1, 1)
new_value2 = normalize(df['B'].iloc[j:j+480][i].values, min_val, max_val, -1, 1)
n_cbar_kws = {"ticks":[-1.0,-0.75,-0.50,-0.25,0.00,0.25,0.50,0.75,1.0]}
df1 = print_df(mkdf(new_value1))
df2 = print_df(mkdf(new_value2))
#Plotting parameters by using HeatMap
plt.figure()
sns.heatmap(df, vmin=min_nor, vmax=max_nor, cmap ='coolwarm', cbar_kws=n_cbar_kws)
plt.title(i, fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
#Print .PNG images contains HeatMap plots of each parameters by name of cycles respectively
plt.savefig(f'{i}/{i}{count}.png')
#plotting all columns ['A','B','C'] in-one-window side by side
fig, axes = plt.subplots(nrows=1, ncols=3 , figsize=(20,10))
plt.subplot(131)
sns.heatmap(df1, vmin=-1, vmax=1, cmap ="coolwarm", linewidths=.75 , linecolor='black', cbar=True , cbar_kws={"ticks":[-1.0,-0.75,-0.5,-0.25,0.00,0.25,0.5,0.75,1.0]})
fig.axes[-1].set_ylabel('[MPa]', size=20) #cbar_kws={'label': 'Celsius'}
plt.title('A', fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
plt.subplot(132)
sns.heatmap(df2, vmin=-1, vmax=1, cmap ="coolwarm", cbar=True , cbar_kws={"ticks":[-1.0,-0.75,-0.5,-0.25,0.00,0.25,0.5,0.75,1.0]})
fig.axes[-1].set_ylabel('[Mpa]', size=20) #cbar_kws={'label': 'Celsius'}
#sns.despine(left=True)
plt.title('B', fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
plt.subplot(133)
sns.heatmap(df3, vmin=-40, vmax=150, cmap ="coolwarm" , cbar=True , cbar_kws={"ticks":[-40,150,-20,0,25,50,75,100,125]})
fig.axes[-1].set_ylabel('[°C]', size=20) #cbar_kws={'label': 'Celsius'}
#sns.despine(left=True)
plt.title('C', fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
plt.suptitle(f'Analysis of data in cycle Nr.: {count}', color='yellow', backgroundcolor='black', fontsize=48, fontweight='bold')
plt.subplots_adjust(top=0.7, bottom=0.3, left=0.05, right=0.95, hspace=0.2, wspace=0.2)
#plt.subplot_tool()
plt.savefig(f'{i}/{i}{i}{count}.png')
plt.show()
到目前为止,我无法获得正确的输出,因为在每个周期中,它都会以不同的间隔打印 3 次 plot,例如。它在左侧打印 'A'
然后再次在 'B'
和 'C'
的名称下打印 'A'
在中间和右侧 in-one-window。它再次打印 'B'
3 次而不是一次并将其放在中间,最后它打印 'C'
3 次而不是一次并放在右侧它放在中间和左侧!
Target 是捕获 one-window 中所有 3 列 A、B & C 的子图45=]主for循环中的每个循环(每480个值乘以480个值)!
第一个循环:0000 -----> A、B、C 的子图 ----> 将其存储为 0000.png
第 2 个循环:0001 -----> A、B、C 的子图 ----> 将其存储为 0001.png ...
问题是在for循环中使用df,它传递A或B或C的值 3 次 虽然它应该传递它值分别属于每个列 一次 我提供了一张不成功输出的图片 here 这样你就可以准确地看到问题所在显然是
我想要的输出如下:
我还提供了 3 个周期的数据集示例文本文件:dataset
所以在查看了您的代码和您的要求之后,我想我知道问题出在哪里了。
您的 for
循环顺序错误。您希望每个周期都有一个新图形,包含每个 'A'、'B' 和 'C' 作为子图。
这意味着你的 outer 循环应该遍历循环,然后你的 inner 循环遍历 i
,而你的缩进并且循环的顺序使您尝试通过 i
(i='A'
, cycle=1
) 在您的第一个循环中绘制所有 'A','B','C'
子图,而不是在您的第一个循环之后绘制第一个循环,所有 i
(i='A','B','C'
, cycle=1
).
这也是您遇到未定义 df3 的问题(如您对 this answer 的评论中所述)的原因。 df3 的定义在 if 块中检查是否 'C' in i
,在你的第一次循环中,这个条件不满足,因此 df3 没有定义,但你仍在尝试绘制它!
你也遇到了和你另一个问题一样的问题NaN/inf值。
重新排列 for
循环和缩进并清理 NaN/inf 值得到以下代码:
#...
#df contains all the data
df = pd.DataFrame(data, columns=['A','B','C'], index = id_set[:,0])
df = df.replace(np.inf, np.nan)
df = df.fillna(0)
'''
Data generation phase
'''
#next iteration create all plots, change the number of cycles
cycles = int(len(df)/480)
print(cycles)
for cycle in range(cycles): #iterate thriugh all cycles range(1) by ====> range(int(len(df)/480))
count = '{:04}'.format(cycle)
j = cycle * 480
for i in df:
try:
os.mkdir(i)
except:
pass
min_val = df[i].min()
min_nor = -1
max_val = df[i].max()
max_nor = 1
ordered_data = mkdf(df.iloc[j:j+480][i])
csv = print_df(ordered_data)
#Print .csv files contains matrix of each parameters by name of cycles respectively
csv.to_csv(f'{i}/{i}{count}.csv', header=None, index=None)
if 'C' in i:
min_nor = -40
max_nor = 150
#Applying normalization for C between [-40,+150]
new_value3 = normalize(df['C'].iloc[j:j+480], min_val, max_val, -40, 150)
n_cbar_kws = {"ticks":[-40,150,-20,0,25,50,75,100,125]}
df3 = print_df(mkdf(new_value3))
else:
#Applying normalizayion for A,B between [-1,+1]
new_value1 = normalize(df['A'].iloc[j:j+480], min_val, max_val, -1, 1)
new_value2 = normalize(df['B'].iloc[j:j+480], min_val, max_val, -1, 1)
n_cbar_kws = {"ticks":[-1.0,-0.75,-0.50,-0.25,0.00,0.25,0.50,0.75,1.0]}
df1 = print_df(mkdf(new_value1))
df2 = print_df(mkdf(new_value2))
# #Plotting parameters by using HeatMap
# plt.figure()
# sns.heatmap(df, vmin=min_nor, vmax=max_nor, cmap ='coolwarm', cbar_kws=n_cbar_kws)
# plt.title(i, fontsize=12, color='black', loc='left', style='italic')
# plt.axis('off')
# #Print .PNG images contains HeatMap plots of each parameters by name of cycles respectively
# plt.savefig(f'{i}/{i}{count}.png')
#plotting all columns ['A','B','C'] in-one-window side by side
fig, axes = plt.subplots(nrows=1, ncols=3 , figsize=(20,10))
plt.subplot(131)
sns.heatmap(df1, vmin=-1, vmax=1, cmap ="coolwarm", linewidths=.75 , linecolor='black', cbar=True , cbar_kws={"ticks":[-1.0,-0.75,-0.5,-0.25,0.00,0.25,0.5,0.75,1.0]})
fig.axes[-1].set_ylabel('[MPa]', size=20) #cbar_kws={'label': 'Celsius'}
plt.title('A', fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
plt.subplot(132)
sns.heatmap(df2, vmin=-1, vmax=1, cmap ="coolwarm", cbar=True , cbar_kws={"ticks":[-1.0,-0.75,-0.5,-0.25,0.00,0.25,0.5,0.75,1.0]})
fig.axes[-1].set_ylabel('[Mpa]', size=20) #cbar_kws={'label': 'Celsius'}
#sns.despine(left=True)
plt.title('B', fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
plt.subplot(133)
sns.heatmap(df3, vmin=-40, vmax=150, cmap ="coolwarm" , cbar=True , cbar_kws={"ticks":[-40,150,-20,0,25,50,75,100,125]})
fig.axes[-1].set_ylabel('[°C]', size=20) #cbar_kws={'label': 'Celsius'}
#sns.despine(left=True)
plt.title('C', fontsize=12, color='black', loc='left', style='italic')
plt.axis('off')
plt.suptitle(f'Analysis of data in cycle Nr.: {count}', color='yellow', backgroundcolor='black', fontsize=48, fontweight='bold')
plt.subplots_adjust(top=0.7, bottom=0.3, left=0.05, right=0.95, hspace=0.2, wspace=0.2)
#plt.subplot_tool()
plt.savefig(f'{i}/{i}{i}{count}.png')
plt.show()
这会为您提供以下三张图像,作为三个单独的图形以及您提供的数据:
Figure 1, Figure 2, Figure 3
总的来说,你的代码比较乱。我明白了,如果你是编程新手,只是想分析你的数据,你可以做任何有用的事情,不管它是否漂亮。
但是,我认为混乱的代码意味着您无法正确查看脚本的底层逻辑,这就是您遇到此问题的原因。
如果您再次遇到类似的问题,我会建议您写出一些包含所有循环的 'pseudo code' 并尝试思考您在每个循环中要完成的任务。