r - 按数值变量显示颜色的折线图
问题描述
我的数据集:
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))
然而,用这段代码创建的情节让我感到困惑,并不是我所期望的。代码有问题吗?谢谢!
解决方案
如下所示,将带有颜色的因子添加到其中,问题在于您的 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'))
推荐阅读
- jasper-reports - 渲染表格时如何识别页尾?
- java - NanoHttpd - 返回压缩响应
- google-cloud-platform - 使用 Google Cloud Composer 时监控 Airflow Web 服务器
- aws-lambda - AWS Lambda 的合同测试
- java - 如何处理对象未能满足 java 8 流中的过滤器
- ios - UITableviewcell 与 UIbutton ,更改 tableview 单元格背景颜色
- javascript - Javascript append - 使用数组中的值附加多个元素
- php - Typo3 8.7.x / Extbase:如何获取页面的 sys_category
- android - 按下主页按钮后,DialogFragment 未恢复
- linux - root 能否可靠地确定每个挂载(“绑定挂载”)标志,例如 FUSE 文件系统?