如何自动绘制DataFrame中多分组NAME的AMOUNT1折线图
自动绘制多分组折线图(适配新增NAME)
以下是基于Python的两种实现方案,均能自动识别所有NAME分组,后续新增NAME无需修改代码:
方案一:Pandas + Matplotlib 手动循环实现
import pandas as pd import matplotlib.pyplot as plt # 构造数据集(实际场景可替换为 pd.read_csv("你的数据文件路径")) data = { 'period_date_str': ['2022-09-30', '2022-09-30', '2022-09-30', '2022-10-30', '2022-10-30', '2022-10-30', '2022-11-30', '2022-11-30', '2022-11-30'], 'NAME': ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'], 'AMOUNT1': [10, 15, 20, 9, 12, 14, 8, 9, 4] } df = pd.DataFrame(data) # 将日期列转为时间类型,保证x轴按时间顺序排列 df['period_date_str'] = pd.to_datetime(df['period_date_str']) # 获取所有唯一NAME(自动适配新增项) unique_names = df['NAME'].unique() plt.figure(figsize=(10, 6)) # 遍历每个NAME绘制折线 for name in unique_names: subset = df[df['NAME'] == name] plt.plot(subset['period_date_str'], subset['AMOUNT1'], marker='o', label=name) # 配置图表样式 plt.xlabel('日期') plt.ylabel('AMOUNT1') plt.title('各NAME的AMOUNT1趋势') plt.legend(title='NAME') plt.grid(True) plt.xticks(rotation=45) plt.tight_layout() plt.show()
方案二:Seaborn 一键分组实现(更简洁)
Seaborn会自动根据hue参数分组绘图,无需手动循环:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 构造数据集(实际场景可替换为 pd.read_csv("你的数据文件路径")) data = { 'period_date_str': ['2022-09-30', '2022-09-30', '2022-09-30', '2022-10-30', '2022-10-30', '2022-10-30', '2022-11-30', '2022-11-30', '2022-11-30'], 'NAME': ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'], 'AMOUNT1': [10, 15, 20, 9, 12, 14, 8, 9, 4] } df = pd.DataFrame(data) # 将日期列转为时间类型 df['period_date_str'] = pd.to_datetime(df['period_date_str']) plt.figure(figsize=(10, 6)) # 自动按NAME分组绘制折线 sns.lineplot(data=df, x='period_date_str', y='AMOUNT1', hue='NAME', marker='o') # 配置图表样式 plt.xlabel('日期') plt.ylabel('AMOUNT1') plt.title('各NAME的AMOUNT1趋势') plt.xticks(rotation=45) plt.grid(True) plt.tight_layout() plt.show()
关键特性说明
- 两种方案均通过
df['NAME'].unique()(方案一)或Seaborn的hue参数(方案二)自动识别所有分组,新增NAME后无需修改代码 - 转换日期列为时间类型,确保x轴按时间顺序正确排列,避免字符串排序导致的混乱
内容的提问来源于stack exchange,提问作者rdcurt
相关产品推荐
相关产品推荐

