我想在geom_bar输出中显示每个栏的实例数。更具体地说,如果一个条形图未显示(因为其值= 0),则也不应绘制实例数。使用geom_text()无法完成工作,至少不能用我的代码行完成。请注意,在这种情况下,堆叠条形图的帖子不适用。
以下是一些数据:
df <- data.frame(classes = rep(c("Class_A","Class_B","Class_C","Class_D"),
each=3),
clusters = rep(1:3),
score_1 = sample(0:4,4, replace = F),
score_2 = sample(0:4,4, replace = F),
score_3 = sample(0:4,4, replace = F),
count = sample(1:200, 12,replace = T))
这是我到目前为止一直在使用的一些代码
ggplot(df, aes(classes, score_1)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.4),
aes(fill = clusters)) +
labs(title = "Median per cluster of Score_1",
x="some text", y=element_blank()) +
theme_bw() + theme(text = element_text(size=10),
axis.text.x = element_text(angle=90, hjust=1)) +
geom_text(aes(label = count))
这是LHS
上的输出,而我想要的结果应该看起来像RHS
。我不在乎文本是在条中还是在条之上。
作为最终结果,在Grant的帮助下,这是最终结果:
ggplot(df, aes(classes, score_1)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.4),
aes(fill = clusters)) +
geom_text(aes(label = count2, group = clusters), position = position_dodge(width = 0.4),
vjust = -.08, hjust = 0.6, size = 3) +
labs(title = "Median per cluster of Score_1",
x="some text", y=element_blank()) +
theme_bw() + theme(text = element_text(size=10),
axis.text.x = element_text(angle=90, hjust=1))
通过添加group = clusters
,可以使用hjust
和vjust
更有效地操纵位置。
答案 0 :(得分:1)
要不显示高度为0的钢筋的计数,可以在score_1
变量为0的情况下新建一个空白列,并将其显示在图形中。
df$count2 = ifelse(df$score_1 != 0, df$count, "")
要使文本更靠近条形,可以使用与position
(在本例中为geom_text()
)中使用的geom_bar()
相同的position_dodge(width = 0.4)
参数。将vjust
设置为2也会使其向下移动一点。
这是我的图形代码:
ggplot(df, aes(classes, score_1)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.4), aes(fill = factor(clusters))) +
geom_text(aes(label = count2), position = position_dodge2(0.4), vjust = 2) +
labs(title = "Median per cluster of Score_1", x="some text", y=element_blank()) +
theme_bw() +
theme(text = element_text(size=10), axis.text.x = element_text(angle=90, hjust=1))
在添加将其更改为fill = factor(clusters)
之前,我还有一点不同的输出。
以下是该图的链接(使用略有不同的数据): Graph that omits labels when y = 0 and positions text with the bars.