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