r - 为什么 ggplot (geom_line) 中的颜色与显式分配的颜色不同
问题描述
颜色没有如图所示绘制,我认为这是一个错误
library(ggplot2)
x <- seq(1,20,1)
market_yield1 <- c(1.00,1.20,1.35,1.50,1.60,1.70,1.75,1.85,1.90,1.95,
2.00,2.05,2.08,2.11,2.14,2.17,2.19,2.21,2.23,2.25)
market_yield2 <- c(1.00,1.20,1.35,1.50,1.60,1.70,1.75,1.85,1.85,1.80,
1.75,1.70,1.67,1.64,1.60,1.58,1.55,1.52,1.50,1.48)
market_yield3 <- c(1.00,0.98,0.95,0.93,0.91,0.89,0.87,0.84,0.81,0.78,
0.76,0.73,0.70,0.68,0.66,0.64,0.63,0.61,0.60,0.58)
x <- seq(1,20,1)
total <- data.frame(x, market_yield1, market_yield2, market_yield3)
names(total)[2:4] <- c("Szenario_1","Szenario_2","Szenario_3")
f <- ggplot(data = total) +
geom_line(aes(x, Szenario_1, color = "red"), size = 1)+
geom_line(aes(x, Szenario_2, color = "green"), size = 1)+
geom_line(aes(x, Szenario_3, color = "blue"), size = 1)+
labs(x = "Anzahl Jahre n", y = "Zinsen in %",
title ="Die erwarteten Zinskurven",subtitle = "für die 3 Szenarien")+
scale_color_discrete(name = "Verschiede Szenarien",
breaks = c("red","green","blue"),
labels = c("Szenario 1","Szenario 2","Szenario 3"))
plot(f)
我希望 Szenario_1 应该是红色的, Szenario_3 应该是蓝色的
解决方案
这不是一个错误。您的数据是宽格式的,您正在分配颜色值。 aes()
如果您想保持这种方法,请尝试以下方法:
ggplot(data = total) +
geom_line(aes(x, Szenario_1, color = "red"), size = 1)+
geom_line(aes(x, Szenario_2, color = "green"), size = 1)+
geom_line(aes(x, Szenario_3, color = "blue"), size = 1)+
labs(x = "Anzahl Jahre n", y = "Zinsen in %",
title ="Die erwarteten Zinskurven",subtitle = "für die 3 Szenarien")+
# use scale_color_manual to specify the actual colours mapping to the values specified
# within each aes() mapping
scale_color_manual(name = "Verschiede Szenarien",
limits = c("red", "green", "blue"),
values = c("red", "green", "blue"),
labels = c("Szenario 1", "Szenario 2", "Szenario 3"))
但更整洁的方法是将数据转换为长格式,并将每个场景都放在同geom_line
一层:
library(dplyr)
library(tidyr)
total %>%
gather(scenario, value, -x) %>%
ggplot(aes(x, value, color = scenario)) +
geom_line(size = 1) +
labs(x = "Anzahl Jahre n", y = "Zinsen in %",
title ="Die erwarteten Zinskurven",subtitle = "für die 3 Szenarien") +
scale_color_manual(name = "Verschiede Szenarien",
values = c("red", "green", "blue"),
labels = c("Szenario 1", "Szenario 2", "Szenario 3"))
(两段代码返回相同的结果。)
推荐阅读
- ios - Swift - 如何在键盘抬起时滚动 collectionView 的内容
- javascript - 通过在其中搜索值来覆盖/下载 json 文件的任何解决方法?
- visual-studio-code - 如何在 vscode 中禁用文件索引
- javascript - 从 javascript 对象中删除较少的序列计数
- ruby-on-rails - 如何允许单个用户使用“acts_as_votable”gem 在单个帖子上多次投票
- c# - 如何使用 C# 在 Unity 中读取 SVG 文件样式属性
- c# - Unity Transform 特定角度之间的随机旋转
- python - Django Dockerized 与 Celery 和 Postgres
- xslt-1.0 - 撒克逊人抱怨未知功能虽然功能可用
- python - 如何控制 python 脚本的哪些部分以 root 身份运行