【问题标题】:How can I scale histogram between 0 and 1 in ggplot2?如何在 ggplot2 中在 0 和 1 之间缩放直方图?
【发布时间】:2015-10-18 04:56:13
【问题描述】:
ggplot() + 
  geom_histogram(data = df1, aes(x=meanf,fill = "g", color="g"), alpha = 0.6,binwidth = 0.02)+
  geom_histogram(data = df2, aes(x=meanf,fill = "b", color="b"), alpha = 0.4,binwidth = 0.02)+
  scale_colour_manual(name="N1", values=c("g" = "green", "b"="blue"), labels=c("b"="1", "g"="2")) +
  scale_fill_manual(name="N2", values=c("g" = "green", "b"="blue"), labels=c("b"="1", "g"="2"))+
  theme_bw()+
  ggsave('temp.jpg')

我得到带有直方图计数的绘图,但我想在 0 和 1 之间缩放它。从这个问题 Normalizing y-axis in histograms in R ggplot to proportion ,我了解如何为一个数据帧执行此操作,但如果我使用两个数据帧怎么办,就像我的问题一样?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:
    geom_histogram(data = df1, aes(y = ..ncount..,x=meanf,fill = "g", color="g"))
    

    应该这样做。

    如果您希望两个直方图都被同一个除数归一化:

    首先得到原始直方图的y范围。 Refer here

    ggobj <- ggplot() + 
      geom_histogram(data = df1, aes(x=meanf,fill = "g", color="g"), alpha = 0.6,binwidth = 0.02)+
      geom_histogram(data = df2, aes(x=meanf,fill = "b", color="b"), alpha = 0.4,binwidth = 0.02)
    
    y_max <- ggplot_build(ggobj)$panel$ranges[[1]]$y.range[2] 
    

    然后重新创建您的直方图并使用您获得的 y_range 对其进行缩放。

    p <- ggplot() + 
          geom_histogram(data = df1, aes(y_max=y_max, y=..count../y_max,x=meanf,fill = "g", color="g"), alpha = 0.6,binwidth = 0.02)+
          geom_histogram(data = df2, aes(y_max=y_max, y=..count../y_max,x=meanf,fill = "b", color="b"), alpha = 0.4,binwidth = 0.02)
    

    【讨论】:

    • 当我除以 y_range 时,即使 y_range 存在,我也会收到此错误: eval 中的错误(expr,envir,enclos):找不到对象 'y_range'
    • 好吧,你不能使用带有..count..这样特殊ggplot变量的环境变量,所以你需要在aes中重新定义它。我修复了代码,它现在应该可以工作了。
    【解决方案2】:

    首先缩放数据!只需创建一个 y 轴在 0 和某个数字之间缩放的临时数据集 - 将所有内容除以该特定数字(如果您希望最高为 1.00,请将除数设置为最高数字)。

    【讨论】:

    • 不需要临时数据集,你可以在情节美学中提供一个方程。
    • @maximusdooku 抱歉,我没有看到使用两个数据集的限制 - ..count.. / max(..count..) 似乎只适用于一个,这是有道理的。
    猜你喜欢
    • 2020-08-01
    • 2022-11-22
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    相关资源
    最近更新 更多