Python中如何将多个DataFrame绘制到同一张折线图(解决循环绘图异常)
解决多DataFrame同图折线绘制问题
先提个你代码里的细节:定义的变量是K1,但plot时写的是k1(大小写不一致),这会直接报错。不过你说循环里能显示L1和K1,估计实际代码里变量名是统一的,核心问题是循环时没正确遍历所有要绘制的DataFrame。
给你两种实用的解决方法:
方法1:用列表统一管理,循环绘制
把固定数据和所有用户输入的DataFrame放进一个列表,不管用户输入多少个,都能一次性遍历绘制:
import pandas as pd import matplotlib.pyplot as plt # 固定数据 L1 = pd.DataFrame([20,19,18,17,16,15]) # 用户输入的数据 K1 = pd.DataFrame([15,14,13,11,18,21]) k2 = pd.DataFrame([10,15,16,21,22,25]) # 把所有要绘制的DataFrame统一放进列表 all_dfs = [L1, K1, k2] fig, ax = plt.subplots() # 循环遍历每个DataFrame,绘制到同一个坐标轴上 for idx, df in enumerate(all_dfs): # 给每条线加标签,方便图例区分 ax.plot(df[0], label=f'数据{idx+1}') # 显示图例 ax.legend() # 保存图片(注意先定义Path,比如Path = './') plt.savefig(Path + "abc.png") plt.show()
方法2:合并DataFrame后直接绘制(更简洁)
用pandas的concat把多个同长度的DataFrame按列合并,然后直接调用plot方法,pandas会自动把每列画成一条折线:
import pandas as pd import matplotlib.pyplot as plt L1 = pd.DataFrame([20,19,18,17,16,15]) K1 = pd.DataFrame([15,14,13,11,18,21]) k2 = pd.DataFrame([10,15,16,21,22,25]) # 合并DataFrame,自定义列名方便区分每条线 combined_df = pd.concat([L1, K1, k2], axis=1) combined_df.columns = ['固定数据', '用户输入1', '用户输入2'] # 直接绘制,自动生成图例 combined_df.plot() plt.savefig(Path + "abc.png") plt.show()
这两种方法都能确保所有DataFrame的数据都被绘制出来,不会出现循环遗漏的情况。
内容的提问来源于stack exchange,提问作者Abhay Dodiya
相关产品推荐
相关产品推荐

