首页 > 解决方案 > 按数值变量显示颜色的折线图

问题描述

我的数据集:

data = data.frame(
  product_id = c(123, 123, 123,123, 952, 952,952),
  year = c(1,2,3,4,1,2,3),
  sales = c(1000000, 93485, 1593800, 1720000, 893200, 1027000, 991830)
)

期望:我想生成一个折线图,显示 1-4 年 2 种产品(“123”和“952”)的趋势(产品“952”只有 1-3 年的可用数据)。我的代码:

data %>% 
  ggplot(aes(x=year, y=sales)) +
  geom_line(aes(color = product_id))

然而,用这段代码创建的情节让我感到困惑,并不是我所期望的。代码有问题吗?谢谢!

标签: r

解决方案


如下所示,将带有颜色的因子添加到其中,问题在于您的 product_id 被视为连续比例,因此无法ggplot对其进行很好的分类,同样可以通过在 aes 中使用 group 选项来实现,但线条的颜色不会仍然存在分类尺度(两条线将显示不同的蓝色变化)。您可以选择任何选项,但第一个更好。

# option1
# This version will show two lines with categorical scale 
library(tidyverse)
data %>% 
   ggplot(aes(x=year, y=sales)) +
   geom_line(aes(color = factor(product_id)))


#option2
# This version will show two lines but with continuous scale
data %>% 
ggplot(aes(x=year, y=sales, group=product_id)) +
geom_line(aes(color = product_id))

编辑:

在 OP 请求自定义颜色后,我们可以使用 scale_color_manual,如果您想知道可以采用什么颜色名称,可以colors()在提示符下运行命令以查看颜色支持:

data %>% 
  ggplot(aes(x=year, y=sales)) +
  geom_line(aes(color = factor(product_id))) +
  scale_color_manual(values=c('red', 'green'))

推荐阅读