【问题标题】:GGplot Barplot does not accept Y value?GGplot Barplot 不接受 Y 值?
【发布时间】:2013-10-23 18:27:17
【问题描述】:

我有一个数据框:

>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 值?

【问题讨论】:

    标签: r ggplot2 bar-chart


    【解决方案1】:

    使用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 版本中使用)

    【讨论】:

      【解决方案2】:

      你可以做这样的事情,但是用 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()
      

      【讨论】:

      • 有没有办法增加条的宽度?
      • @user2703967 是的,使用geom_bar()width 参数。
      • 由于数据的关系,图表非常交错。我可以使用 geom_density() 来绘制这些值吗?我可能需要设置自己的密度,但我不知道该怎么做。
      • @user2703967,在人们开始花时间帮助您之前,请仔细考虑您真正希望实现的目标。密度图与条形图完全不同。
      • 问题是,由于数据如此多样,条形图非常交错。这就是为什么我想绘制一个密度图,以便它给我一条平滑的线,但基本上形状与条形图相同。
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2022-12-16
        • 2014-09-24
        • 1970-01-01
        • 1970-01-01
        • 2018-11-14
        • 1970-01-01
        • 1970-01-01
        • 2017-11-22
        • 1970-01-01
        相关资源
        最近更新 更多