r - R ggplot 标签在非常小的值上被截断
问题描述
我有一个通过循环生成的图表,因此解决方案必须是动态的,而不是一次性的。
基本上一切都很好,直到有一个极端的数据集。在这种情况下,geom_col 的前两个柱是 ~16k 和 ~6k,而第三个柱只有 2。因为它刚好高于 0,所以数字“2”被截断。作为动态生成的图表,我不能使用位置将其移动到条形上方,否则较高的数字会被截断。
ggplot(gndr_cnt_tbl, aes(Var1, Freq, fill=Var1)) +
geom_col() +
geom_text(aes(label=Freq), position=position_stack(0.5), size = 5) + theme(legend.position = "none", axis.text=element_text(size=15), axis.title=element_text(size=12))+ggtitle("Gender Breakdown")+
theme(plot.title = element_text(size=15))+xlab("Gender")+ scale_y_continuous(expand = c(0, 0), limits = c(0, NA))
任何帮助都会很棒:)
解决方案
这里有两种方法。
- 如果标签太低,请移动标签的 y 值。在这里,
pmax(1000, Freq)
将文本放置在 Freq 或 1000 的较大值处,为文本位置设置下限。
代码:
ggplot(gndr_cnt_tbl, aes(Var1, Freq, fill=Var1)) +
geom_col() +
geom_text(aes(label=Freq, y = pmax(1000, Freq)), # HERE
position=position_stack(0.5), size = 5) +
theme(legend.position = "none", axis.text=element_text(size=15),
axis.title=element_text(size=12))+ggtitle("Gender Breakdown")+
theme(plot.title = element_text(size=15))+xlab("Gender")+
scale_y_continuous(expand = c(0, 0), limits = c(0, NA))
- 添加
+ coord_cartesian(clip = "off")
以便绘图区域之外的文本和绘图元素不会被剪掉。如果要防止值与轴标签重叠,还可以使用vjust = 0
.
我使用的样本数据:
gndr_cnt_tbl = data.frame(
Var1 = c("Female", "Male", "Other"),
Freq = c(10000, 5000, 5)
)
推荐阅读
- linux - bash 脚本不作为 cron 执行,而是手动执行
- kotlin - 解决需要布尔值但找到布尔值的条件?
- python - 从给定的 url 中提取文章列表的 url 和标题
- html - 无法将 null 转换为“float”,因为它是不可为空的值类型
- r - 根据行数为列分配时间序列间隔
- c# - 带有 FluentValidation 的 ASP.NET Core OData $expand 不起作用
- kubernetes - Kubernetes runAsUser 安全上下文设置是否覆盖容器映像中的用户设置?
- python - kivy python:App.root中的无效实例
- javascript - Javascript Date.now() 函数
- android - Android中的字符串资源是否可以使用“复合标识符”?