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 轴:设置间隔、对数刻度和指数而不是科学的主要内容,如果未能解决你的问题,请参考以下文章