作为 R 新手,我使用 ggplot2 和coord_flip(). 值得注意的是,我使用以下命令默认将 x 变量的值插入到条形图的左侧(如果标签不适合则插入到右侧):
geom_text(aes(x=TYPE, y=COUNT, ymax=COUNT, label=COUNT,
hjust=ifelse(COUNT>1000, 1.5, -0.3)),
size=3.5, position = position_dodge(width=0.8))
Run Code Online (Sandbox Code Playgroud)
问题是,根据数据集,x 值可能会有很大差异(例如 dataset_1 x 值可以在 1 到 200 之间;dataset_2 x 值可以在 10,000 到 100,000 之间;...),这会导致标签与我正在使用的语句错位的最短条ifelse(参见下图 A 中的棕色条)。COUNT>1000在这种情况下,我不能只对所有数据集使用恒定条件。
图一:
hjust=ifelse(COUNT>1000,...我可以手动修改每个数据集的语句值。但我想知道如果标签不适合轴和条形顶部之间,是否可以自动将标签移出条形,而不修改ifelse每个数据集的条件值,如下图 B 所示。
图B:
编辑解决方法(并不完美,但更好):如果值小于最大值的 5%,则将标签放置在条形右侧
MAXI <- max(data[,2])
geom_text(aes(x=TYPE, y=COUNT, ymax=COUNT, label=COUNT,
hjust=ifelse((COUNT/MAXI)<0.05, -0.3, 1.3)))
Run Code Online (Sandbox Code Playgroud)
在条形外部和内部放置一些标签可能会扭曲条形长度的大小的视觉编码。另一种选择是将值放在条形的中间,但设置geom_text为跳过相对于最大条形较小的值。或者,如果您想要包含所有添加的条形值的文本,可以将它们放在条形下方,以便保持条形长度的清晰视觉模式。两个选项的示例如下:
# Fake data
dat = data.frame(x = LETTERS[1:5], y=c(432, 1349, 10819, 5489, 12123))
ggplot(dat, aes(x, y, fill=x)) +
geom_bar(stat="identity") +
geom_text(aes(label=ifelse(y < 0.05*max(dat$y), "", format(y, big.mark=",")), y=0.5*y),
colour="white") +
coord_flip(xlim=c(0.4,5.6), ylim=c(0, 1.03*max(dat$y)), expand=FALSE) +
guides(fill=FALSE)
ggplot(dat, aes(x, y, fill=x)) +
geom_hline(yintercept=0, lwd=0.3, colour="grey40") +
geom_bar(stat="identity") +
geom_text(aes(label=format(y, big.mark=","), y=-0.01*max(dat$y)),
size=3.5, hjust=1) +
coord_flip(ylim = c(-0.04*max(dat$y), max(dat$y))) +
guides(fill=FALSE)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2484 次 |
| 最近记录: |