【问题标题】:How to rename figure legend in ggplot? aes gives length error如何在ggplot中重命名图形图例? aes 给出长度错误
【发布时间】:2019-09-04 17:22:41
【问题描述】:

我是使用 R 的新手,但遇到了问题。

我使用geom_point 制作了一个散点图。

我已设法重命名构面网格标签,但我不知道如何重命名图形图例。我尝试将geom_point(aes(colour = Diet)) 行重命名为geom_point(aes(colour = diet_names)),但出现以下错误:

Error: Aesthetics must be either length 1 or the same as the data (23): colour.

如果我删除除以下值之一之外的所有值(例如,只保留 fish_or = "Fish"),则不会发生错误,但显然我不希望表格上只有一个颜色值。

    diet_names <- c(
      fish_or = "Fish" ,
      fruit_pu = "Fruit" ,
      insects_nectar_bl = "Insects & Nectar" ,
      insects_re = "Insects" ,
      seeds_gr = "Seeds")

我想将图例编辑成更清晰的内容,因为它是我正在制作的海报的数据。谢谢:)

完整代码:

library(ggplot2)
library(dplyr)
Birdbeaks <- read.csv("Birdbeaks.csv", stringsAsFactors = FALSE)

diet_names <- c(
fish_or = "Fish" ,
fruit_pu = "Fruit" ,
insects_nectar_bl = "Insects & Nectar" ,
insects_re = "Insects" ,
seeds_gr = "Seeds") 

ggplot(Birdbeaks, aes(bill_lengthavg, bill_depthavg)) +
geom_point(aes(colour = diet)) +
labs(x = "Bill Length(cm)", y = "Bill Depth(cm)", colour = "Diet")+ 
guides(col = guide_legend(override.aes = list(shape = 15, size = 5))) +
theme_update()+
facet_grid(~diet, scales="fixed", labeller = as_labeller(diet_names))

【问题讨论】:

  • aes 中的任何内容通常应该是所使用数据中列的裸名。在数据中创建一个变量来引入这些饮食值
  • 您还可以使用labels 参数将标签更改为您的色标
  • 我通常只编辑 csv 本身以简化我的工作,但由于它是作业的一部分,我想尽可能多地使用 R。有没有办法可以使用 R 本身添加变量?
  • 有很多方法可以将列添加到数据框中,任何有关 R 入门的教程都应该向您展示如何使用。由于我们没有您的数据样本,因此我们无法具体提供帮助——目前尚不清楚您是要在数据框中添加向量作为列,还是需要进行合并/连接, 或改变因子水平

标签: r ggplot2 rename facet-grid


【解决方案1】:

希望对你有用

library(magrittr)
library(dplyr)
library(ggplot2)

    Birdbeaks %>%
      mutate(diet = case_when(
        diet == "fish_or" ~ "Fish",
        diet == "fruit_pu" ~ "Fruit",
        diet == "insects_nectar_bl" ~ "Insects & Nectar",
        diet == "insects_re" ~ "Insects",
        diet == "seeds_gr" ~ "Seeds"
      )) %>%
      ggplot(aes(bill_lengthavg, bill_depthavg)) +
        geom_point(aes(colour = diet)) +
        labs(x = "Bill Length(cm)", y = "Bill Depth(cm)", colour = "Diet") +
        guides(col = guide_legend(override.aes = list(shape = 15, size = 5))) +
        theme_update() +
        facet_grid(~diet, scales = "fixed")

【讨论】:

  • 谢谢,效果很好!我以前用过一点点变异函数,还是直接替换函数吗?
  • 没错。在这种情况下,因为要创建的新列与现有列diet 同名,所以它将diet 的值替换为case_when 生成的值。顺便说一句,欢迎来到 SO!
  • 谢谢,我想我明白了。在这种情况下,管道功能是否有效地加载了“Birdbeaks”文件,然后在它仍然打开时对其进行变异,并且在它仍然变异时创建一个图形?我一直试图围绕 %>% 进行思考,但它不需要我创建 &lt;- 对象名称并在独立命令中实现它们,从而有效地节省了我的时间吗?很抱歉提出了额外的问题,但我认为这对我前进有很大帮助!感谢您的欢迎和超快速的响应!
  • 管道运算符将前一个代码块的结果作为函数的第一个参数放在它后面。例如,代替 data % function_a() %>% function_b() %>% function_c()。此外,除非分配了结果,否则它不会修改存储的数据对象。更多信息在这里:magrittr.tidyverse.org。我很高兴能帮上忙。
  • 再次感谢 :)
猜你喜欢
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
  • 2015-10-16
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
  • 2019-06-21
相关资源
最近更新 更多