强制 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::comma
是scales::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 做了啥?