Matplotlib中使用字典列表绘制多图仅显示一个的问题排查
问题原因及解决方法
两个核心问题:
列表定义错误
你写的list_of_dict其实是仅包含1个字典的列表,而这个字典里重复使用了data和baby_name键——Python字典的键是唯一的,后面的键值对会直接覆盖前面的,最终这个字典只剩最后一组{"data": girls, "baby_name": "Frances"},循环自然只执行一次,只画出这一条曲线。绘图函数未复用坐标轴
你的plot_data函数每次调用都会新建一个坐标轴对象ax,就算列表正常,每次绘图也会在新的画布上生成,无法实现叠加效果。
修正方案
第一步:修正列表结构
把多个独立的字典放进列表,每个字典对应一组绘图参数:
list_of_dict = [ {"data": boys, "baby_name": "David"}, {"data": girls, "baby_name": "Susan"}, {"data": boys, "baby_name": "Colin"}, {"data": girls, "baby_name": "Frances"} ]
第二步:修改绘图函数支持坐标轴复用
让函数可以接收一个已有的坐标轴对象,指定在该轴上绘图:
def plot_data(dataset, baby_name, ax=None): # 如果没有传入ax,就新建一个;否则复用传入的ax ax = dataset.T.sort_index().loc[:, baby_name].plot(legend=baby_name, ax=ax) return ax
第三步:循环叠加绘图
初始化一个空的ax,每次循环都把当前的ax传给函数,实现曲线叠加:
ax = None for item in list_of_dict: ax = plot_data(item['data'], item['baby_name'], ax=ax)
这样就能得到你想要的多条曲线叠加的图表了。
内容的提问来源于stack exchange,提问作者elksie5000
相关产品推荐
相关产品推荐

