Python中在同一图表绘制多条曲线并添加图例的实现方法
同一图表绘制多组同键字典数据的带标签曲线
问题背景
已有代码可将单个字典绘制成散点图:
df = pd.Series(data1, name='y').rename_axis('x').reset_index() df.plot(kind='scatter', x='x', y='y')
现有多组键相同、值不同的字典数据,需在同一图表中绘制对应曲线并添加标签:
data1 = {'2022-01-30': 50, '2022-01-31': 152, '2022-02-01': 41 } data2 = {'2022-01-30': 124, '2022-01-31': 142, '2022-02-01': 745 } data3 = {'2022-01-30': 4, '2022-01-31': 1, '2022-02-01': 7 }
解决方案
根据需求选择折线图(带数据点)或散点图的实现方式:
方式1:绘制折线图(推荐,适合展示趋势)
将多组字典合并为DataFrame,直接调用plot方法即可自动生成带标签的多条曲线:
import pandas as pd import matplotlib.pyplot as plt # 定义多组数据 data1 = {'2022-01-30': 50, '2022-01-31': 152, '2022-02-01': 41 } data2 = {'2022-01-30': 124, '2022-01-31': 142, '2022-02-01': 745 } data3 = {'2022-01-30': 4, '2022-01-31': 1, '2022-02-01': 7 } # 合并为DataFrame,日期为索引,每组数据对应一列 df = pd.DataFrame({ '数据集1': data1, '数据集2': data2, '数据集3': data3 }) # 绘制折线图,marker='o'显示数据点 df.plot(kind='line', marker='o', figsize=(10, 6)) # 补充图表信息 plt.title('多组日期数据趋势对比') plt.xlabel('日期') plt.ylabel('数值') plt.legend() # 显示标签图例 plt.show()
方式2:绘制散点图
由于df.plot(kind='scatter')仅支持一组x/y,需循环遍历每组数据绘制:
import pandas as pd import matplotlib.pyplot as plt data1 = {'2022-01-30': 50, '2022-01-31': 152, '2022-02-01': 41 } data2 = {'2022-01-30': 124, '2022-01-31': 142, '2022-02-01': 745 } data3 = {'2022-01-30': 4, '2022-01-31': 1, '2022-02-01': 7 } df = pd.DataFrame({ '数据集1': data1, '数据集2': data2, '数据集3': data3 }) # 创建画布 plt.figure(figsize=(10, 6)) # 循环绘制每组散点并指定标签 for column_name in df.columns: plt.scatter(df.index, df[column_name], label=column_name) # 补充图表信息 plt.title('多组日期数据散点对比') plt.xlabel('日期') plt.ylabel('数值') plt.legend() plt.show()
内容的提问来源于stack exchange,提问作者William Page
相关产品推荐
相关产品推荐

