我正在尝试使用R中的ggplot为我的情节添加一个图例到目前为止一切正常。我的情况很特别,因为我试图处理三个变量,但不是为了绘制3D图,而是绘制面向v1与v2和v1与v3的2D图。
我以正确的方式得到我的情节,但我没有得到传说。
这是我的代码:
colfuncWarmest <- colorRampPalette(c("orange","red"))
colfuncColdest <- colorRampPalette(c("green","blue"))
plot <- ggplot(data=temperatures_Celsius, aes(x=temperatures_Celsius$Year))
params <- labs(title=paste("Year vs. (Warmest minimum temperature\n",
"and Coldest minimum temperature)"),
x="Year",
y="Coldest min temp / Warmest min temp")
theme <- theme(plot.title = element_text(hjust = 0.5)) #Centering title
wmtl<-geom_line(data=temperatures_Celsius,
aes(y=temperatures_Celsius$Warmest.Minimum.Temperature..C.,
color="red"
),
colour=colfuncWarmest(length(temperatures_Celsius$Year))
)
wmtt<-stat_smooth(data=temperatures_Celsius,
aes(y=temperatures_Celsius$Warmest.Minimum.Temperature..C.),
color="green",
method = "loess")
cmtl<- geom_line(data=temperatures_Celsius,
aes(y=temperatures_Celsius$Coldest.Minimum.Temperature..C.,
color="blue"
),
colour=colfuncColdest(length(temperatures_Celsius$Year))
)
cmtt<-stat_smooth(data=temperatures_Celsius,
aes(y=temperatures_Celsius$Coldest.Minimum.Temperature..C.),
color="orange",
method = "loess")
plot + theme + params + wmtl + wmtt + cmtl + cmtt
(并非所有代码都被添加,因为我做了很多更改。只是为了得到一个想法)我明白了:
如果我添加
+ scale_color_manual(values=c("red","blue"))
(例如)为了添加图例,我没有得到任何错误,但没有任何不同的事情发生。我得到了相同的情节。
我想要的只有两行。红色的一个表示“最温暖的最小”,另一个蓝色表示“最冷的最小”。我怎样才能以这种方式获得我的传奇?
提前致谢。
答案 0 :(得分:2)
通常我会说将图例应用到ggplot的正确方法是将变量映射到美学(例如填充,颜色,大小,alpha)。通常,这包括将数据转换为长格式(键值对)并将键变量映射到颜色或其他aestetic。
在目前的情况下,这是不可取的,因为接下来没有机会可以实现线上的颜色梯度(colorRampPalette
)。所以我建议采用一种虚假的方式,使用虚拟图层(图中不会看到的图层)来创建图例。
以下是一些数据
temperatures_Celsius = data.frame(year = 1900:2000,
Warmest = rnorm(100, mean = 20, sd = 5),
Coldest = rnorm(100, mean = 10, sd = 5))
你的情节:
colfuncWarmest <- colorRampPalette(c("orange","red"))
colfuncColdest <- colorRampPalette(c("green","blue"))
plot <- ggplot(data=temperatures_Celsius, aes(x=year))
params <- labs(title=paste("Year vs. (Warmest minimum temperature\n",
"and Coldest minimum temperature)"),
x="Year",
y="Coldest min temp / Warmest min temp")
theme <- theme(plot.title = element_text(hjust = 0.5)) #Centering title
wmtl<-geom_line(data=temperatures_Celsius,
aes(y=Warmest),
colour=colfuncWarmest(length(temperatures_Celsius$year)))
wmtt<-stat_smooth(data=temperatures_Celsius,
aes(y=Warmest),
color="green",
method = "loess")
cmtl<- geom_line(data=temperatures_Celsius,
aes(y=Coldest),
colour=colfuncColdest(length(temperatures_Celsius$year)))
cmtt<-stat_smooth(data=temperatures_Celsius,
aes(y=Coldest),
color="orange",
method = "loess")
plot1 <- plot + theme + params + wmtl + wmtt + cmtl + cmtt
现在添加一个虚拟层:
plot1+
geom_line(data = data.frame(year = c(1900, 1900),
group = factor(c("Coldest", "Warmest"), levels = c("Warmest", "Coldest")),
value = c(10, 20)), aes(x=year, y = value, color = group), size = 2)+
scale_color_manual(values=c("red","blue"))