我想在ggplot2中制作一个图表,其中x轴为log10刻度,标签为常规而非科学记数法,最小小数位数。这意味着我想将0.1显示为0.1而不是0.10和100显示为100而不是100.00。
我试过
df = data.frame(x = c(1:10 %o% 10^(-3:2)), y = rnorm(60))
ggplot(df, aes(x=x, y=y))+
geom_point()+scale_x_log10(labels=comma)
不幸的是,这显示了许多小数。
@BenBolker之前回答了类似的question,他的代码适用于没有小数的数字,但如果有小于1的数字,它似乎给出与labels =逗号相同的结果。
plain <- function(x,...) {
format(x, ..., scientific = FALSE, trim = TRUE)
}
ggplot(df, aes(x=x, y=y))+
geom_point()+scale_x_log10(labels=plain)
答案 0 :(得分:4)
在drop0trailing = TRUE
中添加plain
。
plain <- function(x,...) {
format(x, ..., scientific = FALSE, drop0trailing = TRUE)
}
要查看漂亮打印的其他选项,请参阅?format
。
答案 1 :(得分:1)
只是想补充一点,而不是创建单独的 plain
函数,我们还可以使用 scales
包,该包为 ggplot2
标度提供了一套很好的工具,并使对数轴标签格式化一阵微风。这是演示对数轴标签的一些格式选项的可重现代码:
library(ggplot2)
library(scales)
library(patchwork)
df <- data.frame(x = c(1:10 %o% 10^(-3:3)), y = rnorm(70))
base <- ggplot(df, aes(x, y)) +
geom_point()
p1 <- base + scale_x_log10(labels = label_number(drop0trailing = TRUE))
p2 <- base + scale_x_log10(labels = label_comma(drop0trailing = TRUE))
p3 <- base +
scale_x_log10(
labels = label_dollar(drop0trailing = TRUE),
# prevents axis label from going off the chart
expand = expansion(mult = c(0.05, .06))
)
p4 <- base + scale_x_log10(labels = trans_format("log10", label_math()))
(p1 + p2 + p3 + p4) + plot_annotation(tag_levels = "1", tag_prefix = "p")
由 reprex package (v2.0.0) 于 2021 年 5 月 16 日创建