140

在 ggplot2 中,如何停止轴标签被缩写 - 例如1e+00, 1e+01一旦绘制沿 x 轴?理想情况下,我想强制 R 显示在这种情况下为1,10.

非常感谢任何帮助。

4

7 回答 7

176

我想你正在寻找这个:

require(ggplot2)
df <- data.frame(x=seq(1, 1e9, length.out=100), y=sample(100))
# displays x-axis in scientific notation
p  <- ggplot(data = df, aes(x=x, y=y)) + geom_line() + geom_point()
p

# displays as you require
require(scales)
p + scale_x_continuous(labels = comma)
于 2013-01-28T14:23:29.820 回答
84

您是否尝试过类似的方法:

options(scipen=10000)

在绘图之前?

于 2013-01-28T14:19:27.480 回答
50

只是对@Arun 所做的更新,因为我今天尝试了它,但它不起作用,因为它被实现为

+ scale_x_continuous(labels = scales::comma)
于 2017-03-16T16:59:14.113 回答
23

作为更通用的解决方案,您可以使用scales::format_format删除科学记数法。这也使您可以控制标签的精确显示方式,而不是scales::comma仅使用数量级的逗号分隔。

例如:

require(ggplot2)
require(scales)
df <- data.frame(x=seq(1, 1e9, length.out=100), y=sample(100))

# Here we define spaces as the big separator
point <- format_format(big.mark = " ", decimal.mark = ",", scientific = FALSE)

# Plot it
p  <- ggplot(data = df, aes(x=x, y=y)) + geom_line() + geom_point()
p + scale_x_continuous(labels = point)
于 2017-11-28T17:34:11.847 回答
13

有一个不需要 scales 库的解决方案。

你可以试试:

# To deactivate scientific notation on y-axis:

    p + scale_y_continuous(labels = function(x) format(x, scientific = FALSE))

# To activate scientific notation on y-axis:

    p + scale_y_continuous(labels = function(x) format(x, scientific = TRUE))

# To deactivate scientific notation on x-axis:

    p + scale_x_continuous(labels = function(x) format(x, scientific = FALSE))

# To activate scientific notation on x-axis:

    p + scale_x_continuous(labels = function(x) format(x, scientific = TRUE))
于 2019-11-16T18:07:15.923 回答
6

扩展原始问题以包含分数,即 1、0.1、0.01、0.001 等,并避免尾随零

p + scale_x_continuous(labels = function(x) sprintf("%g", x))
于 2020-01-19T13:45:44.567 回答
2

将 R 用于科学记数法的惩罚设置得更高的最简单的通用解决方案不是吗?

即设置scipen()为您感到满意的数字。

例如,如果图表上的轴最大值可能为 100 000,则设置scipen(200000)将确保 R(和 ggplot)将对所有低于 200000 的数字使用标准符号,并且不需要向 ggplot 函数添加任何行。

于 2020-03-21T10:04:34.767 回答