使用for循环筛选DataFrame数据绘图时,如何实现多组数据叠加而非生成多张图?
问题解决:Matplotlib多组数据同图绘制失败
哈哈,这个问题我刚入门Matplotlib的时候也踩过一模一样的坑!你现在的问题根源特别简单——plt.show()放错位置啦~
你当前的代码里,每次循环绘制完一组数据就调用plt.show(),这会让Matplotlib每次都把当前的绘图内容单独弹出成一张新图。要把所有数据叠在同一张图里,只需要把plt.show()移到for循环外面,等所有组的数据都绘制完成后再一次性显示图表就行。
另外,我还帮你优化了代码,加上了图例、坐标轴标签和标题,这样图表的可读性会强很多:
import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv('Kd.csv') watertype = ['Evian','Volvic','Buxton'] # 循环绘制所有数据 for type in watertype: sdf = df[(df['Water']==type)] Na = sdf.iloc[:,13] Kd = sdf.iloc[:,2] # 加上label参数,方便后续显示图例区分不同水源 plt.plot(Na, Kd, 'o', label=type) # 所有数据绘制完成后再统一显示图表 plt.xlabel('Na') # 设置x轴标签 plt.ylabel('Kd') # 设置y轴标签 plt.title('Kd vs Na for Different Water Types') # 添加图表标题 plt.legend() # 显示图例,明确每组点对应的水源 plt.show()
关键修改点说明:
- 将
plt.show()移出for循环:确保所有散点都绘制到同一个画布上后再显示最终图表 - 添加
label=type参数:让每个散点系列关联对应的水源名称,配合plt.legend()可以清晰区分各组数据 - 补充坐标轴标签和标题:让图表信息更完整,不用猜测每个轴代表的含义
这样修改后,你就能得到一张包含三组数据的叠加散点图啦!
内容的提问来源于stack exchange,提问作者Alasdair Knight
相关产品推荐
相关产品推荐

