You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不合并数据集的情况下为ggplot分组设色并添加图例?

问题

我拥有3个数据集,其中一个包含两个不同变量,数据示例如下:

order_dates            Value
1     2022-08-14 12:15:10       1
2     2022-08-14 12:15:11       5
3     2022-08-14 12:15:13       2
4     2022-08-14 12:20:10       3

        order_dates            Value
1     2022-08-14 12:15:10       4
2     2022-08-14 12:15:11       1
3     2022-08-14 12:15:13       8
4     2022-08-14 12:20:10       1


        order_dates            Value     Type
1     2022-08-14 12:15:10       5         1
2     2022-08-14 12:15:11       13        1
3     2022-08-14 12:15:13       9         1
4     2022-08-14 12:20:10       7         1
5     2022-08-14 12:15:10       6         2
6     2022-08-14 12:15:11       0         2
7     2022-08-14 12:15:13       9         2
8     2022-08-14 12:20:10       4         2

我希望在图表中绘制4条线:前两个数据集各1条,最后一个数据集按Type分组绘制2条,所有线条使用不同颜色且带有图例,请问能否在不合并数据集的前提下实现该需求?

解决方案

完全可以,不需要合并数据集就能实现。下面分别用两种常用绘图工具举例:

Python(Matplotlib)

假设三个数据集分别命名为df1、df2、df3,通过叠加图层的方式逐个绘制线条,同时自定义颜色和图例:

import matplotlib.pyplot as plt
import pandas as pd

# 转换时间格式,确保x轴为时间序列
df1['order_dates'] = pd.to_datetime(df1['order_dates'])
df2['order_dates'] = pd.to_datetime(df2['order_dates'])
df3['order_dates'] = pd.to_datetime(df3['order_dates'])

# 创建绘图对象
fig, ax = plt.subplots(figsize=(10,6))

# 绘制前两个数据集的线条
ax.plot(df1['order_dates'], df1['Value'], color='blue', label='数据集1')
ax.plot(df2['order_dates'], df2['Value'], color='green', label='数据集2')

# 按Type分组绘制第三个数据集的两条线
for type_val, group in df3.groupby('Type'):
    ax.plot(group['order_dates'], group['Value'], label=f'数据集3-Type{type_val}')

# 添加图例和轴标签
ax.legend()
ax.set_xlabel('订单时间')
ax.set_ylabel('数值')
ax.set_title('多数据集折线图')

# 旋转x轴标签避免重叠
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

R(ggplot2)

同样假设三个数据集为df1、df2、df3,利用ggplot的图层叠加特性实现需求:

library(ggplot2)
library(lubridate)

# 转换时间格式
df1$order_dates <- ymd_hms(df1$order_dates)
df2$order_dates <- ymd_hms(df2$order_dates)
df3$order_dates <- ymd_hms(df3$order_dates)

# 叠加图层绘制所有线条
p <- ggplot() +
  geom_line(data = df1, aes(x = order_dates, y = Value, color = "数据集1")) +
  geom_line(data = df2, aes(x = order_dates, y = Value, color = "数据集2")) +
  geom_line(data = df3, aes(x = order_dates, y = Value, color = paste0("数据集3-Type", Type))) +
  # 自定义颜色
  scale_color_manual(values = c("数据集1" = "blue", "数据集2" = "green", 
                                "数据集3-Type1" = "red", "数据集3-Type2" = "orange")) +
  labs(x = "订单时间", y = "数值", title = "多数据集折线图", color = "图例") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

print(p)

两种方案都是通过叠加独立图层完成绘图,无需合并原始数据集,同时能自定义每条线的颜色和图例名称,完全满足需求。

内容的提问来源于stack exchange,提问作者EV_Mustang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:48:11