强制 R 停止绘制缩写轴标签 - 例如ggplot2 中的 1e+00

Posted

技术标签:

【中文标题】强制 R 停止绘制缩写轴标签 - 例如ggplot2 中的 1e+00【英文标题】:Force R to stop plotting abbreviated axis labels - e.g. 1e+00 in ggplot2 【发布时间】:2013-01-11 21:45:52 【问题描述】:

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

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

我想你正在寻找这个:

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)

【讨论】:

这行得通。谢谢你。出于兴趣,ggplot2 中带有 scales 包的轴还有哪些其他“标签”选项? 请访问this ggplot2.org page,这对我遇到类似问题很有帮助。 该链接已过时。现在你想看看ggplot2-book.org/scale-position.html#label-functions - scales::commascales::label_comma 等的简写。 嗯;只是尝试一下,我收到了一个新错误:Error: Breaks and labels are different lengths【参考方案2】:

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

options(scipen=10000)

在绘制之前?

【讨论】:

这通过设置更高的惩罚来决定使用科学记数法。此答案中有更多解释:***.com/a/18600721/1080804【参考方案3】:

只是对@Arun 所做的更新,因为我今天尝试了它,但它没有工作,因为它已实现

+ scale_x_continuous(labels = scales::comma)

【讨论】:

@Arun 的答案应该可以正常工作,也许您忽略了包含require(scales)?这将导入包含 comma 比例的包。正如您所发现的,您还可以在引用包时指定包,而不是事先要求它。 我同意@cincodenada。这个答案没有添加任何新内容。我不会投反对票,因为这不是一个错误的答案。和上面一样。【参考方案4】:

作为更通用的解决方案,您可以使用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)

【讨论】:

format_format 当前正在从包比例中重试。你应该使用 label_number() 或 label_date() 代替。【参考方案5】:

有一个不需要 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))

【讨论】:

【参考方案6】:

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

p + scale_x_continuous(labels = function(x) sprintf("%g", x))

【讨论】:

从美学的角度来看,这要好得多!【参考方案7】:

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

即将scipen() 设置为您认为合适的数字。

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

【讨论】:

与此答案相同***.com/a/14564026/7941188

以上是关于强制 R 停止绘制缩写轴标签 - 例如ggplot2 中的 1e+00的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化强制所有的X数值都显示在X轴标签上:x-axis labels with all x-axis values

R语言ggplot2可视化在轴标签中添加上标(Superscript)和下标(subscript)实战

使用 ggplot 绘制绘图时,hjust 和 vjust 做了啥?

R语言ggplot2可视化强制设置x轴y轴坐标的起始点为0或者其他实战

带有所有x轴值的ggplot x轴标签

R语言ggplot2可视化多行文本轴标签轴标签带下标轴标签数学公式实战