我想用两个截然不同的行来表示一个对象的值,这些对象的名称相同,但其他方面有所不同。 它只能有一行文字。
library(tidyverse)
library(data.table)
#gen some example code
c <- c('a', 'a', 'b', 'b')
d <- c('firstfirst', 'firstfirst', 'lowerupper', 'lowerlower')
e <- c(0.2, 0.3, 0.4, 0.5)
f <- c('w', 'v','w', 'v')
df <- cbind(c,d,e,f)
df<- as.data.frame(df)
df$e <- as.numeric(df$e)
orderd <- c( 'firstfirst', 'firstfirst', 'lowerupper', 'lowerlower' )
df<- within(df, d <- factor(d, levels=orderd))
ggplot(df, aes(x = d, y = e, color = f)) +
geom_pointrange(aes(min = e - 1.95 * sqrt(e), max = e + 1.95 * sqrt(e)), shape = 15) +
theme_bw() +
facet_wrap(c ~ ., nrow = 5, strip.position = "left") +
coord_flip() +
scale_colour_viridis_d(begin = 0.75 , end = 0) +
geom_text(aes(label = f), colour = "black", size = 2.5, hjust=1.05, vjust=1.2)
在图形中,我希望两个面板上只有一条线说“ firstfirst”,但我想有两条线,以防f = v,另一条代表f = w。
我目前的解决方法是将其中一个标记为“ firstfirst”(即,具有一个额外的空格)。但是,这只会产生两行,请参见此处的示例:
怎么可能只拥有一次文本却同时拥有两行?
如果可以轻松重现此类多张图,则奖励积分!
答案 0 :(得分:1)
最简单的方法是使用position_dodge。以您的示例代码为例,您只需将position_dodge命令添加到geom_pointrange
geom_pointrange(aes(min = e - 1.95 * sqrt(e), max = e + 1.95 * sqrt(e)), shape = 15, position = position_dodge(width=1))