R 当aes(组=…)而非aes(填充/形状=…)时,闪避错误条的位置错误
用R 当aes(组=…)而非aes(填充/形状=…)时,闪避错误条的位置错误,r,ggplot2,errorbar,aesthetics,R,Ggplot2,Errorbar,Aesthetics,用position=“dodge”绘制错误条最近让我很头疼。。。奇怪的是,用美学的形状或填充(不适用于错误条)来避开它们似乎效果不错。但是,避开美学组会将钢筋置于意外位置。我想知道这是否是ggplot2错误 我喜欢在条形图或方框图后面放置自定义错误条。有时我会给情节中的不同元素添加特殊的颜色。出于这个原因,我通常不在ggplot()函数中包含aes(),而是在geom或stats中包含 下面是一个“位置正确”的错误条示例: 库(ggplot2) 图书馆(dplyr) 牙齿生长%>% 突变(剂量=
position=“dodge”
绘制错误条最近让我很头疼。。。奇怪的是,用美学的形状
或填充
(不适用于错误条)来避开它们似乎效果不错。但是,避开美学组
会将钢筋置于意外位置。我想知道这是否是ggplot2错误
我喜欢在条形图或方框图后面放置自定义错误条。有时我会给情节中的不同元素添加特殊的颜色。出于这个原因,我通常不在ggplot()
函数中包含aes()
,而是在geom或stats中包含
下面是一个“位置正确”的错误条示例:
库(ggplot2)
图书馆(dplyr)
牙齿生长%>%
突变(剂量=因子(剂量))%>%
ggplot(aes(剂量,透镜))+
统计箱线图(aes(fill=supp),geom=“errorbar”,position=“dodge”)+
几何箱线图(aes(填充=supp),position=“道奇”,coef=0)
这将产生警告警告:忽略未知美学:填充。使用aes(shape=supp)
打印相同的绘图
我希望使用相同的绘图,但通过与“group”(aes(group=supp)
)交换填充/形状,不会出现警告。这不会产生任何警告,但会产生非常意外的结果:
ToothGrowth%>%
突变(剂量=因子(剂量))%>%
ggplot(aes(剂量,透镜))+
统计箱线图(aes(组=supp),geom=“errorbar”,position=“dodge”)+
几何箱线图(aes(填充=supp),position=“道奇”,coef=0)
有人能解释一下这种行为吗?使用aes(group=…)
和aes(fill=…)
分组是否应该在闪避位置上表现出类似的行为?代码忽略未知美学:fill
stat_boxplot(aes(fill = supp), geom = "errorbar", position = "dodge")
而代码考虑了美学group=supp
,并为OJ和VC分别给出了两个错误条
stat_boxplot(aes(group = supp), geom = "errorbar", position = "dodge")
完整代码
library(ggplot2)
library(dplyr)
ToothGrowth %>%
mutate(dose = factor(dose)) %>%
ggplot(aes(dose, len)) +
stat_boxplot(aes(fill = supp), geom = "errorbar", position = "dodge") +
geom_boxplot(aes(fill = supp), position = "dodge", coef = 0)
Warning: Ignoring unknown aesthetics: fill
ToothGrowth %>%
mutate(dose = factor(dose)) %>%
ggplot(aes(dose, len)) +
stat_boxplot(aes(group = supp), geom = "errorbar", position = "dodge") +
geom_boxplot(aes(fill = supp), position = "dodge", coef = 0)
从?aes\u集团\u订单
(重点添加):
默认情况下,组设置为所有离散对象的交互
绘图中的变量。这通常会正确地划分数据,但是
如果没有,或者在绘图中没有使用离散变量,
您需要通过映射显式定义分组结构
分组到每个组具有不同值的变量
与
误差条组自动设置为剂量(已转换为因子,即离散变量)和supp(已经是牙齿生长数据集中的因子)的相互作用。换句话说,为了计算箱线图汇总统计数据,将剂量c(0.5,1,1.5)
和SUPc(“OJ”、“VJ”)
的每种组合作为一个单独的组处理。因此,显示的错误条与箱线图图层完美匹配,即使填充不是geom\u errorbar
的相关美学
与
错误条的组显式设置为supp和onlysupp。这会覆盖默认行为,因此我们只有两个组(一个用于“OJ”,另一个用于“VJ”),而不是上面的6个组。这会导致错误条层和箱线图层之间不匹配
可以显式设置组映射以模拟默认行为:
p1 <- ToothGrowth %>%
mutate(dose = factor(dose)) %>%
ggplot(aes(dose, len)) +
stat_boxplot(aes(group = interaction(dose, supp)), geom = "errorbar", position = "dodge") +
geom_boxplot(aes(fill = supp), position = "dodge", coef = 0)
p1
layer_data(p1, 1L) # view data associated with error bar layer
layer_data(p1, 2L) # view data associated with boxplot layer
p2 <- ToothGrowth %>%
mutate(dose = factor(dose)) %>%
ggplot(aes(dose, len)) +
stat_boxplot(aes(group = interaction(supp, dose)), geom = "errorbar", position = "dodge")+
geom_boxplot(aes(fill = supp), position = "dodge", coef = 0)
p2
layer_data(p2, 1L) # view data associated with error bar layer
layer_data(p2, 2L) # view data associated with boxplot layer
p1%
突变(剂量=因子(剂量))%>%
ggplot(aes(剂量,透镜))+
统计箱线图(aes(组=相互作用(剂量,支持)),geom=“errorbar”,position=“dodge”)+
几何箱线图(aes(填充=supp),position=“道奇”,coef=0)
p1
图层_数据(p1,1L)#查看与错误条图层相关的数据
图层数据(p1,2L)#查看与箱线图图层相关的数据
p2%
突变(剂量=因子(剂量))%>%
ggplot(aes(剂量,透镜))+
统计箱线图(aes(组=相互作用(支持,剂量)),geom=“errorbar”,position=“dodge”)+
几何箱线图(aes(填充=supp),position=“道奇”,coef=0)
p2
图层_数据(p2,1L)#查看与错误条图层相关的数据
图层数据(p2,2L)#查看与箱线图图层相关的数据
注:interaction(dose,supp)
和interaction(supp,dose)
将生成相同的图形,外观方面,但是如果要比较与每个层相关的基础数据,interaction(dose,supp)
以与默认值相同的顺序生成组,而interaction(supp,dose)
没有。使用组
并获得预期分组和回避图的一种可能性是aes(组=相互作用(支持,剂量))
。然而,我还不清楚aes(group=supp)
和aes(fill=supp)
之间的行为差异
ToothGrowth %>%
mutate(dose = factor(dose)) %>%
ggplot(aes(dose, len)) +
stat_boxplot(aes(group = supp), geom = "errorbar", position = "dodge")
p1 <- ToothGrowth %>%
mutate(dose = factor(dose)) %>%
ggplot(aes(dose, len)) +
stat_boxplot(aes(group = interaction(dose, supp)), geom = "errorbar", position = "dodge") +
geom_boxplot(aes(fill = supp), position = "dodge", coef = 0)
p1
layer_data(p1, 1L) # view data associated with error bar layer
layer_data(p1, 2L) # view data associated with boxplot layer
p2 <- ToothGrowth %>%
mutate(dose = factor(dose)) %>%
ggplot(aes(dose, len)) +
stat_boxplot(aes(group = interaction(supp, dose)), geom = "errorbar", position = "dodge")+
geom_boxplot(aes(fill = supp), position = "dodge", coef = 0)
p2
layer_data(p2, 1L) # view data associated with error bar layer
layer_data(p2, 2L) # view data associated with boxplot layer