ggplot2 轴:设置间隔、对数刻度和指数而不是科学

Posted

技术标签:

【中文标题】ggplot2 轴:设置间隔、对数刻度和指数而不是科学【英文标题】:ggplot2 axis: set intervals, logarithmic scale, and exponents instead of scientific 【发布时间】:2017-10-22 10:16:00 【问题描述】:

首先,我对编程和 R 完全陌生(一周),所以提前道歉。

如何使用 ggplot2 以下列方式格式化 y 轴?:

    我想要的间隔数。 (例如,10 个,视觉上等距的间隔) 对数刻度 指数而不是科学(我想要 10¹,10²,10³ 而不是 1e+01,1e+02,1e+03)

我可以找到其中一些个别问题的答案,但它们不能协同工作。

这是我的图表。我不知道这是否有帮助。

ggplot(dfm,aes(应变,值))+ geom_bar(aes(fill=variable),stat="identity",position="dodge")

底线是: 目前y轴为:1e+02,1e+05,1e+08 我希望它是:10¹,10²,10³,10⁴,10⁵,10⁶,10⁷,10⁸,10⁹,10¹⁰

【问题讨论】:

如果您使用内置数据框,或者提供代码来创建最小可重现的数据框会更有帮助 我真的不知道怎么做。我正在尝试用谷歌搜索它, 看看here - library(ggplot2);library(scales);df <- data.frame(x=1:100,y=10^(1:100));ggplot(df, aes(x,y)) + geom_point() + scale_y_log10(breaks = trans_breaks("log10", function(x) 10^x, n = 10), labels = trans_format("log10", math_format(10^.x))) 例如应该让你接近。另请阅读帮助?scales::trans_breaks 等,了解如何调整所有这些。 【参考方案1】:

这里有一些指导(我正在使用tidyr::population 数据集)

1。

library(ggplot2)
library(scales)
library(tidyr)
ggplot(population, aes(country, population)) + 
  geom_bar(aes(fill=year),stat="identity",position="dodge") +
  scale_y_continuous(breaks = pretty_breaks(n = 10))

2。

library(ggplot2)
library(scales)
library(tidyr)
ggplot(population, aes(country, population)) + 
  geom_bar(aes(fill=year),stat="identity",position="dodge") +
  scale_y_log10()

把它们放在一起:

library(ggplot2)
library(scales)
library(tidyr)
ggplot(population, aes(country, population)) + 
  geom_bar(aes(fill=year),stat="identity",position="dodge") +
  scale_y_log10(labels= trans_format(log10, math_format(10^.x)), 
                breaks =trans_breaks(log10, function(x) 10^x, 10))

【讨论】:

完美!太感谢了!背景:我最初询问对数刻度,重新阅读答案(在编辑后),假设我第一次看错了,并删除了我的评论。

以上是关于ggplot2 轴:设置间隔、对数刻度和指数而不是科学的主要内容,如果未能解决你的问题,请参考以下文章

【r<-ggplot2】修改x和y轴刻度

使用 d3 对数刻度而不是线性刻度

echarts Y轴刻度保留小数设置,以及设置刻度间隔

在对数轴刻度中设置指数符号 - Matlab

echarts如何获取y轴刻度的最大值

R语言ggplot2绘图设置X轴刻度,字体大小及绘图区大小