函数无法识别 ggplot 图表中的颜色变量

Posted

技术标签:

【中文标题】函数无法识别 ggplot 图表中的颜色变量【英文标题】:function not recognising color variable in ggplot chart 【发布时间】:2022-01-17 20:15:20 【问题描述】:

我有一个与 22 个城市相关的融合数据框,每个城市有 5 个大小带。变量列与日期有关。数据框如下所示:

City size_band variable value
Madrid 1 to 3 April 2020 0.74
Madrid 4 to 6 April 2020 0.71
Madrid 7 to 9 April 2020 0.78
Madrid 10 to 12 April 2020 0.77
Madrid 13 to 15 April 2020 0.72
Madrid 1 to 3 May 2020 0.81
Madrid 4 to 6 May 2020 0.79
... ... ... ...

我正在尝试创建一个函数,该函数使用 geom_point 为每个城市绘制时间序列。我试过下面的代码:

Cities_List<-split(data,
                    f = data$City)

# Function to plot different cities
plot.cities <- function(x) 
  for (i in 1:length(Cities_List)) 
    
    p<- x[[i]] %>%
      ggplot(aes(variable, value)) +
      geom_point(aes(color = size_band, 
                     group = size_band), 
                 size = 3, 
                 shape = size_band)
  

plot.cities(Cities_list)

颜色变量未被识别:

Error in geom_point(aes(color = size_band, group = size_band), size = 3,  : 
  object 'size_band' not found 

【问题讨论】:

【参考方案1】:

颜色和形状等美学必须映射到aes 函数中。此外,函数plot.cities 必须返回一些东西,而不是分配一个内部变量p

library(tidyverse)

data <- tibble::tribble(
  ~City, ~size_band, ~variable, ~value,
  "Madrid", "1 to 3", "April 2020", 0.74,
  "Madrid", "4 to 6", "April 2020", 0.71,
  "Madrid", "7 to 9", "April 2020", 0.78,
  "Madrid", "10 to 12", "April 2020", 0.77,
  "Madrid", "13 to 15", "April 2020", 0.72,
  "Madrid", "1 to 3", "May 2020", 0.81,
  "Madrid", "4 to 6", "May 2020", 0.79
)

Cities_List <- split(data,
  f = data$City
)

# Function to plot different cities
plot.cities <- function(x) 
  for (i in 1:length(Cities_List)) 
    x[[i]] %>%
      ggplot(aes(variable, value)) +
      geom_point(aes(color = size_band, shape = size_band), size = 3)
  

plot.cities(Cities_List)

由reprex package (v2.0.1) 于 2021 年 12 月 14 日创建

【讨论】:

以上是关于函数无法识别 ggplot 图表中的颜色变量的主要内容,如果未能解决你的问题,请参考以下文章

ggplot2无法识别闪亮的反应数据

ggplot:如何根据变量类型在 geom_text 位置上设置不同的对齐方式?

ggplotly 无法从 R 中的 ggplot 识别 geom_rect 填充

“ValueError:无法识别的标记样式'hline'”。 Matplotlib plot() 和 scatter() 函数无法识别一堆标记

Ggplot2 - 我无法插入图表图例[重复]

将文本标签添加到 ggplot2 散点图