R ggplot2 - 简单绘图 - 无法指定对数轴限制

Posted

技术标签:

【中文标题】R ggplot2 - 简单绘图 - 无法指定对数轴限制【英文标题】:R ggplot2 - Simple plot- cannot specify log axis limits 【发布时间】:2012-09-09 20:37:31 【问题描述】:

我正在尝试在 ggplot2 中的 R 中创建一个简单的密度图。这是我的代码,效果很好。

d <-  ggplot(result, aes(x=result$baseMeanA)) 
d + geom_density(colour="darkgreen", size=2, fill="darkgreen") + 
scale_x_log10() + scale_y_continuous(limits = c(0, 0.45))

问题是我无法将 x 轴调整为负数。

scale_x_log10(limits= c(1, 10000))

效果很好,但是

scale_x_log10(limits= c(-1, 10000))

根本不工作!它给了我这个错误:

if (zero_range(range)) 中的错误:需要 TRUE/FALSE 的缺失值

请帮忙!

【问题讨论】:

只是猜测,但也许您希望原始比例的限制从 0.1 变为 10000(即 log10(x) 从 -1 变为 5)?大概您不希望 log10(x) 从 -1 变为 10000,因为上限将是 10^10000(一个 非常 大的值,因为大约有 10^80 个原子在可观察的宇宙中en.wikipedia.org/wiki/Observable_universe ...)如果我是对的,那么你想要scale_x_log10(limits=c(0.1,1e5)) 是的,我想我现在明白了。我不能在对数刻度中使用负数。谢谢。我现在知道我需要做什么了,我需要在结果中添加一个像 1 或 0.1 这样的伪数,这样它在视觉上看起来是正确的,否则我会以某种方式丢失所有非常小的数字。 【参考方案1】:

e^y 不能为负数。指数常数 e 是正数,而 y 只是一个指数。根据数学定义:

log(x) = y x = e^y

这正是为什么如果 x 为负数,R 无法计算 log(x) 的原因。它只是违反数学定义。

我希望这有助于理解为什么这个情节给你带来了麻烦。

【讨论】:

【参考方案2】:

如果限制的范围应部分低于零,您可以对变量进行 log10 转换并指定连续刻度的限制:

ggplot(result, aes(x=log10(baseMeanA))) +
   geom_density(colour="darkgreen", size=2, fill="darkgreen") + 
   scale_x_continuous(limits = c(-1, 10000) + 
   scale_y_continuous(limits = c(0, 0.45)) +

【讨论】:

【参考方案3】:

您尝试做的事情没有多大意义,不是吗?负数的对数不是我们可以在 R 中表示的东西

R> log(-1)
[1] NaN
Warning message:
In log(-1) : NaNs produced

那么R应该把轴画到哪里呢?

【讨论】:

是的,你可能是对的。我不知道。我想我现在知道要解决我的问题,我需要在结果中添加一个伪数,以便我可以直观地查看它。

以上是关于R ggplot2 - 简单绘图 - 无法指定对数轴限制的主要内容,如果未能解决你的问题,请参考以下文章

用 ggplot2 注释 R 中的矩形以获得对数刻度的图形

R语言ggplot2可视化指定保存到pdf的图像的具体尺寸保证缩放的一致性:使得绘图元素(文本点大小等)在设计上都具有相同的绝对大小设置全局数据点大小主题格式设置图像保存的具体尺寸

【R】ggplot2绘图技巧

R可视化使用ggplot2将坐标轴设置为对数坐标轴(Log Scale)

R语言ggplot2可视化处理y轴坐标数值极大的情况:对数坐标(log10)

r R pca绘图ggplot2