使用hjust替换geom_text位置

前端之家收集整理的这篇文章主要介绍了使用hjust替换geom_text位置前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在绘制堆积条形图并使用geom_text插入每个堆栈的值.我面临的困难是一些堆栈非常小/很窄,因此两个堆栈的文本相互重叠,因此不太可读.我想以一种方式调整文本定位,例如每个堆栈的文本位置在hjust == 1和hjust == -1之间交替,这样就不会有任何重叠(或任何其他会导致可读的方法)文本).

这是我正在做的事情的一个例子(下面提供了mydf的输入):

library(ggplot2)

ggplot(mydf,aes(x=variable,y = value,fill = Category)) + 
  geom_bar(stat="identity") +
  geom_text(aes(label = value,y = pos-(value/2)),size = 3)

到目前为止我尝试的是:

使用position = position_dodge(width = 0.5)和position = position_jitter(h = 0.5,w = 0.5),但没有一个导致我试图做的事情.

我的第一个想法是定义hjust = c(1,-1)希望它将被回收并且文本将在hjust == 1和hjust == -1之间交替,但它会导致错误消息:

Error: Incompatible lengths for set aesthetics: size,hjust

我也试过定义size = c(3,3,3),hjust = c(1,-1,1,1)但这导致相同的错误消息.

我会很感激如何以正确的方式实现这一点(我也对其他建议持开放态度).

我无法弄清楚为什么dput不起作用(对我来说也没有),所以这里是可读格式的数据:

Category variable value   pos maxpos
1        AX       WW  47.8  47.8  184.1
2        AY       WW   5.6  53.4  184.1
3        AZ       WW  15.8  69.2  184.1
4        BX       WW  31.4 100.6  184.1
5        BY       WW  11.7 112.3  184.1
6        BZ       WW  10.7 123.0  184.1
7        CX       WW   2.2 125.2  184.1
8        CY       WW  21.4 146.6  184.1
9        CZ       WW  37.5 184.1  184.1
10       AX       SM  39.8  39.8  148.6
11       AY       SM   2.9  42.7  148.6
12       AZ       SM  13.2  55.9  148.6
13       BX       SM  22.7  78.6  148.6
14       BY       SM   7.3  85.9  148.6
15       BZ       SM   8.9  94.8  148.6
16       CX       SM   1.6  96.4  148.6
17       CY       SM  17.3 113.7  148.6
18       CZ       SM  34.9 148.6  148.6
19       AX     AsIs 156.9 156.9  519.0
20       AY     AsIs  13.1 170.0  519.0
21       AZ     AsIs  70.5 240.5  519.0
22       BX     AsIs  72.6 313.1  519.0
23       BY     AsIs  30.7 343.8  519.0
24       BZ     AsIs  35.6 379.4  519.0
25       CX     AsIs   5.2 384.6  519.0
26       CY     AsIs  44.8 429.4  519.0
27       CZ     AsIs  89.6 519.0  519.0

解决方法

通过创建一个hjust变量,您可以获得所需的结果.代码
mydf$hj <- rep(c(1,-1),length.out=27)

ggplot(mydf,y=value,fill=Category)) + 
  geom_bar(stat="identity") +
  geom_text(aes(label=value,y=pos-(value/2),hjust=hj),size=4)

这使:

@konvas提出的稍微替代解决方案:

ggplot(mydf,hjust=rep(c(1,length.out=length(value))),size=4)

猜你在找的HTML相关文章