只设置一个美学以显示在ggplo2图例中

时间:2018-04-12 11:49:53

标签: r ggplot2

我有一个使用线型和颜色美学的数据集。传说既展示了美学,又展示了传奇本身中的一种美学(颜色或线型)。

这也适用于另一个数据集,在这个数据集中,我只希望在geom_line美学中使用ifelse语句执行大于其余四行中的一行,但实际的ifelse语句显示在传说中。

我从mtcars数据集中获取了一个示例,我希望只显示颜色。

library(tidyverse)
mtcars <- as.tibble(mtcars)

mtcars$gear <- as.factor(mtcars$gear)
mtcars$cyl <- as.factor(mtcars$cyl)

mtcars1 <- mtcars %>%
  arrange(gear) %>%
  ggplot(aes(x = qsec, group = 1)) +
  geom_point(aes(y=disp, group = cyl, color = cyl)) +
  geom_line(aes(y=disp, group = cyl, color = cyl, linetype = cyl)) + 
  scale_color_manual(values=c("#000000", "#E69F00", "#56B4E9")) + 
  labs(title = "MTCARS Example", colour="Cylinder",x= "x",y="Disp") 
print(mtcars1)

是否可以操纵图例只展示一种美学?

2 个答案:

答案 0 :(得分:3)

尝试

mtcars1 + guides(color = "none")
mtcars1 + guides(linetype = "none")

答案 1 :(得分:1)

简短回答:使用相同的图例名称:labs(colour = "Cylinder", linetype = "Cylinder)

# Simplified version of the same plot
library(ggplot2)
# 1. All aes specified in main ggplot2 function
# 2. In aes x always goes first, y always goes second,
#    you don't need to write x = ..., y = ...
ggplot(mtcars, aes(qsec, disp, color = cyl, linetype = cyl)) +
    geom_point() +
    geom_line() +
    scale_color_manual(values = c("#000000", "#E69F00", "#56B4E9")) + 
    # For "tidier" code use same order as in aes 
    # (except for main title, or subtitle)
    labs(title = "MTCARS Example", 
         x = "x",
         y = "Disp", 
         color = "Cylinder", 
         linetype = "Cylinder")

如果你想使用组合图例,你必须为aes使用相同的变量(你已经这样做了)。默认情况下,图例名称为cyl。但是,当您更改单个美学的名称时(color = "Cylinder"ggplot2认为您使用了两个不同的变量。因此,您必须为这样的情节重命名两种美学:

enter image description here

PS:我简化了您的ggplot2功能。不要多次重写y=disp, color = cyl,请在主ggplot2函数中设置它们。此外,您不需要group(知道您尝试在那里做什么)。