我正在尝试使用matplpotlib在三列中绘制三个数据框。 我正在将DF的每一列绘制为该图各列中的子图。但是情节似乎相互重叠。不知道出了什么问题。请帮助我找到问题。谢谢。
我添加了以下代码,以实现上述目的。我没有在子图中定义行数和列数,因为我想基于DF中的列数进行创建。然后,我使用add_subplot函数将每个循环添加到for循环中。但是子图在输出中重叠。我根据其他帖子的建议尝试了fig.tightlayout,但得到了UserWarning:tight_layout未应用:子图规范中的行数必须是彼此的倍数
fig = plt.figure()
#looping through each DF in a dict
for df_count, df_name in enumerate(df_dict):
df = df_dict[df_name]
#looping through column in the DF
for col_count, col in enumerate(df_dict[df_name]):
if col != "VAR":
print (col, col_count )
ax = fig.add_subplot(col_count, df_count + 1, 1)
ax.plot(df[col], df["CATEGORY"])
fig.tight_layout()
plt.savefig('foo.png')
答案 0 :(得分:0)
基于@ImportanceOfBeingErnest提供的注释,我如下修改了我的代码,并得到了预期的绘图。这样,我可以自定义/添加子图到个性化位置。对于希望通过循环遍历数据并将图绘制在所需位置的子图来寻找子图的人,这个答案可能会有所帮助。
fig = plt.figure(figsize=(10,10))
subplot_count_a = 0
#looping through each DF in a dict
for df_count, df_name in enumerate(df_dict):
subplot_count_a += 1
subplot_count = subplot_count_a
df = df_dict[df_name]
#looping through column in the DF
print(df_name)
for col in df:
if col != "VAR" and col != "CATEGORY":
print (f"({col}, {len(df.columns) - 2}, {len(df_dict)} , {subplot_count})")
ax = fig.add_subplot(len(df.columns) -2 , len(df_dict) , subplot_count)
ax = sns.scatterplot(x=col, y="CATEGORY", hue="CATEGORY", data=df, legend=False)
ax.set_ylabel('')
ax.set_xlabel('')
subplot_count += 3
fig.tight_layout()
plt.savefig('foo.png')