我是Python的初学者。
在我的实习项目中,我试图用csv中包含的数据来绘制博客情节。
我需要为上面显示的4(4)个变量(AAG、DENS、SRG e RCG)中的每一个绘制博客图。由于每个变量在001到100的范围内呈现值,因此每个变量将有100个方格图,需要在一个图形中绘制,如图像所示。
这是我需要绘制的图形,但是对于每个变量,将有100个bloxplots,因为每个变量都有100个值列:

X轴是“年份”,从2025年到2030年不等,所以我需要一个图,如图2中所示的每年,y轴是每个变量的值的集合。
使用Pandas-melt函数和seaborn库,我只能绘制列的框图。但这不是我想要的
import pandas as pd
import seaborn as sns
df = pd.read_csv("2DBM_50x50_Central_Aug21_Sim.cliped.csv")
mdf= df.melt(id_vars=['Year'], value_vars='AAG[001]')
print(mdf)
ax=sns.boxplot(x='Year', y='value',width = 0.2, data=mdf)上述守则的结果:

我有什么办法解决这个问题?
发布于 2022-01-18 16:40:50
下面的代码给出五个子图,其中每个子图只包含一个变量的数据。然后每年生成一个盒子图。若要更改每个变量使用的列范围,请更改var_range = range(1, 101)中的上限,并查看异常值将showfliers更改为True。
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
df = pd.read_csv("2DBM_50x50_Central_Aug21_Sim.cliped.csv")
variables = ["AAG", "DENS", "SRG", "RCG", "Thick"]
period = range(2025, 2031)
var_range = range(1, 101)
fig, axes = plt.subplots(2, 3)
flattened_axes = fig.axes
flattened_axes[-1].set_visible(False)
for i, var in enumerate(variables):
var_columns = [f"TB_acc_{var}[{j:05}]" for j in var_range]
data = df.melt(id_vars=["Period"], value_vars=var_columns, value_name=var)
ax = flattened_axes[i]
sns.boxplot(x="Period", y=var, width=0.2, data=data, ax=ax, showfliers=False)
plt.tight_layout()
plt.show()产出:

https://stackoverflow.com/questions/70748749
复制相似问题