我有一个非常基本的 ggplot:
library(ggplot)
ggplot(mpg, aes(x=displ, y=manufacturer)) +
geom_point() +
geom_rect(aes(xmin=1.8, xmax=3.0, ymin='audi', ymax='audi', fill='red'))
Run Code Online (Sandbox Code Playgroud)
我想为 y 轴上的 audi 行添加一个从 x 轴值 1.8 到 3.0 的条。有没有办法在 ggplot 中实现这一点?其他人可以在这个问题上提供的任何帮助将不胜感激!
基于 @Greg 的答案,我相信在aes中的调用中重新创建因子级别更安全geom_rect。这是因为是因子级别而不是字符串被强制转换为整数。
ggplot(mpg, aes(x=displ, y=manufacturer)) +
geom_point() +
geom_rect(aes(ymin = which(levels(as.factor(manufacturer))=="audi") -0.5,
ymax = which(levels(as.factor(manufacturer))=="audi") +0.5,
xmin=1.8,
xmax=3,
fill="red"))
Run Code Online (Sandbox Code Playgroud)
即使因子水平已从默认值更改,这仍然有效:
my.mpg <- mpg
my.mpg$manufacturer <-as.factor(my.mpg$manufacturer)
my.mpg$manufacturer <-factor(my.mpg$manufacturer,
levels = rev(levels(my.mpg$manufacturer)))
ggplot(my.mpg, aes(x=displ, y=manufacturer)) +
geom_point() +
geom_rect(aes(ymin = which(levels(as.factor(manufacturer))=="audi") -0.5,
ymax = which(levels(as.factor(manufacturer))=="audi") +0.5,
xmin=1.8,
xmax=3,
fill="red"))
Run Code Online (Sandbox Code Playgroud)
相反,该which(unique(...))方法失败:
man_list <- unique(my.mpg$manufacturer)
ggplot(my.mpg, aes(x=displ, y=manufacturer)) +
geom_point() +
# geom_rect(aes(xmin=1.8, xmax=3.0, ymin= "audi", ymax=lead("audi"), fill='red'))
geom_rect(aes(ymin = which(man_list=="audi")-0.5,
ymax = which(man_list=="audi")+0.5,
xmin=1.8,
xmax=3,
fill="red"))
Run Code Online (Sandbox Code Playgroud)
可以办到。分类值被转换为整数以进行绘图,因此您可以将它们指定为整数(audi是第一个类别,所以整数是1),或者,正如我在下面所做的那样,列出类别名称并按名称指定。
library(ggplot)
data("mpg")
man_list <- unique(mpg$manufacturer)
ggplot(mpg, aes(x=displ, y=manufacturer)) +
geom_point() +
# geom_rect(aes(xmin=1.8, xmax=3.0, ymin= "audi", ymax=lead("audi"), fill='red'))
geom_rect(aes(ymin = which(man_list=="audi")-0.5,
ymax = which(man_list=="audi")+0.5,
xmin=1.8,
xmax=3,
fill="red"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
384 次 |
| 最近记录: |