【发布时间】:2014-08-28 21:22:10
【问题描述】:
我正在绘制一个堆积条形图并使用geom_text 插入每个堆栈的值。我面临的困难是一些堆栈非常小/窄,因此两个堆栈的文本相互重叠,因此不是很可读。我想调整文本位置,例如每个堆栈的文本位置在hjust == 1 和hjust == -1 之间交替,这样就不会有重叠(或任何其他会导致可读文本的方法)。
这是我目前正在做的一个例子(下面提供了mydf 的dput):
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,3,3,3,3,3,3), hjust = c(1,-1,1,-1,1,-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
【问题讨论】:
-
由于某种原因我无法加载您的
dput -
@DavidArenburg,我不知道出了什么问题,希望你不介意使用其他格式。
-
请参阅stackoverflow.com/a/50060510/2270475 以获得另一个简洁的解决方案。