8

我有一个数据框:

>picard
count    reads
 1    20681318
 2     3206677
 3      674351
 4      319173
 5      139411
 6      117706

如何在 ggplot(条形图)上绘制 log10(计数)与 log10(读取)?

我试过了:

ggplot(picard) + geom_bar(aes(x=log10(count),y=log10(reads)))

但它不接受 y=log10(reads)。如何绘制我的 y 值?

4

3 回答 3

13

你可以做这样的事情,但是用 log10 比例绘制不连续的 x 轴对我来说没有意义:

ggplot(picard) +
    geom_bar(aes(x=count,y=reads),stat="identity") +
    scale_y_log10() +
    scale_x_log10()

在此处输入图像描述

如果您只想要一个具有 log10 比例的 y 轴,只需执行以下操作:

ggplot(picard) +
    geom_bar(aes(x=count,y=reads),stat="identity") +
    scale_y_log10()

在此处输入图像描述

于 2013-10-15T20:04:46.003 回答
3

使用stat="identity"

ggplot(picard) + geom_bar(aes(x=log10(count),y=log10(reads)), stat="identity")

实际上,您的方法会收到警告:

将变量映射到 y 并使用 stat="bin"。使用 stat="bin",它将尝试将 y 值设置为每组中的案例数。这可能会导致意外行为,并且不会在未来版本的 ggplot2 中被允许。如果您希望 y 表示案例计数,请使用 stat="bin" 并且不要将变量映射到 y。如果您希望 y 表示数据中的值,请使用 stat="identity"。有关示例,请参见 ?geom_bar。(已弃用;最后在 0.9.2 版中使用)

于 2013-10-15T20:04:03.647 回答
1

有一种直接的方法可以做到这一点,即使用 geom_col() 函数。只需对您的代码进行微小的调整:

ggplot(picard) + geom_col(aes(x=log10(count), y=log10(reads)))

它将给出与将stat参数设置为identitywith相同的输出geom_bar()。问题是,geom_bar()用作countstat 的默认值,因此它不会为 y 轴采用任何变量。它将简单地使用计数,即 x 轴的每个值的出现次数,因为它是 y 轴。我希望这回答了你的问题。

于 2018-01-14T13:44:28.163 回答