具有2美学的ggline

Posted

技术标签:

【中文标题】具有2美学的ggline【英文标题】:ggline with 2 aesthetics 【发布时间】:2021-01-15 01:53:48 【问题描述】:

我想使用 ggpubr 包的 ggline 与 2 美学。等效项在 geom_line 中完全有效,但在 ggline 中无效。假设我有这个数据集

data <- data.frame(x = seq(0,1,length.out = 100)) %>% 
  mutate(a = x^2, b = x^3, c = (x+1)^-1, d = (x + 1)^-2) %>% 
  pivot_longer(cols = c(a,b,c,d), names_to = 'var',values_to = 'val') %>% 
  mutate(type = ifelse(var %in% c('a','b'), 'poly','inv'), 
         order = ifelse(var %in% c('a','c'), 'low','high'))

现在我可以使用 geom_line 来获取所有的情节。

data %>% ggplot() + geom_line(aes(x = x, y = val, linetype = type, color = order)

不使用同样的东西 ggline

data %>% ggline(x = "x", y = "val", linetype = "type", color = "order")

产生这个错误

Error: Aesthetics must be either length 1 or the same as the data (400): group
In addition: Warning message:
In if (is_parsable_aes(x))  :
  the condition has length > 1 and only the first element will be used

【问题讨论】:

【参考方案1】:

在我看来,ggpubr 不欣赏linetypecolor 的两种不同美学。它将使用单变量解决方案运行。

library(tidyverse)
library(ggpubr)

data <- data.frame(x = seq(0,1,length.out = 100)) %>% 
  mutate(a = x^2, b = x^3, c = (x+1)^-1, d = (x + 1)^-2) %>% 
  pivot_longer(cols = c(a,b,c,d), names_to = 'var',values_to = 'val') %>% 
  mutate(type = ifelse(var %in% c('a','b'), 'poly','inv'), 
         order = ifelse(var %in% c('a','c'), 'low','high'))

data


data %>% ggplot() + geom_line(aes(x = x, y = val, linetype = type, color = order))

data <- data %>% mutate(new = paste(type,order))

data %>% ggline(x = "x", y = "val",color = "new",linetype = "new")

【讨论】:

以上是关于具有2美学的ggline的主要内容,如果未能解决你的问题,请参考以下文章

美学,哲学,思维,三者之间是啥关系

街道的美学读后感

华为OD机试题对称美学用 Java 解 | 含解题说明

错误 CoordTern 需要以下缺失的美学 (tlr->xy):z 在 Shiny 中使用 ggtern 时

15片顶级鼠垫免费送 iQunix Pad 科技美学 | 大家测(第二期)

中国美学史中重要问题的初步探索