加入收藏 | 设为首页 | 会员中心 | 我要投稿 武汉站长网 (https://www.027zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

使用hjust替换geom_text位置

发布时间:2020-12-25 03:06:25 所属栏目:资源 来源:网络整理
导读:我正在绘制堆积条形图并使用geom_text插入每个堆栈的值.我面临的困难是一些堆栈非常小/很窄,因此两个堆栈的文本相互重叠,因此不太可读.我想以一种方式调整文本定位,例如每个堆栈的文本位置在hjust == 1和hjust == -1之间交替,这样就不会有任何重叠(或任何

我正在绘制堆积条形图并使用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)

(编辑:武汉站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读