【问题标题】:How can I make a density scatterplot with log scale in R?如何在 R 中制作具有对数刻度的密度散点图?
【发布时间】:2020-10-08 02:44:05
【问题描述】:

我想在 R 中使用 log10 比例制作密度散点图。我尝试在 R 中使用 ggplotstat_density2d 绘制它。我使用了以下代码:

ggplot(data=vod_agb_df, aes(vod, agb)) + 
       stat_density2d(aes(fill = ..density..), geom = "tile", contour = FALSE, n = 100) + 
       scale_fill_distiller(palette = 'YlOrRd', direction = 1) +
       scale_x_continuous(breaks=seq(0, 1, 0.25), limits = c(0, 1)) + 
       scale_y_continuous(breaks=seq(0, 300, 50), limits = c(0, 300)) + 
       labs(x='L-VOD', y='AGB(Mg/ha)') +
       theme_bw()

但结果看起来很奇怪。 the density scatterplot with my code

This is the plot I want to plot
The original scatterplot

【问题讨论】:

    标签: r ggplot2 scatter-plot


    【解决方案1】:

    你可以log10-变换密度;这是一个最小且可重复的示例

    library(MASS)
    library(tidyverse)
    
    set.seed(2020)
    mvrnorm(100, mu = c(0, 0), Sigma = matrix(c(1, 0.5, 0.5, 1), 2, 2)) %>%
        as_tibble() %>%
        ggplot(aes(V1, V2)) + 
        stat_density2d(
            aes(fill = log10(..density..)), geom = "tile", contour = FALSE, n = 100) + 
        scale_fill_distiller(palette = 'YlOrRd', direction = 1) + 
        theme_bw()
    


    更新

    我不清楚你的意思是什么““我想在点分布区域制作密度散点图,而不是整个区域。”“如果你是问如何增加渐变色条的高度,可以这样做

    set.seed(2020)
    mvrnorm(100, mu = c(0, 0), Sigma = matrix(c(1, 0.5, 0.5, 1), 2, 2)) %>%
        as_tibble() %>%
        ggplot(aes(V1, V2)) + 
        stat_density2d(
            aes(fill = log10(..density..)), geom = "tile", contour = FALSE, n = 100) + 
        scale_fill_distiller(palette = 'YlOrRd', direction = 1) + 
        theme_bw() + 
        guides(fill = guide_colorbar(barheight = unit(3.5, "in"), title.position = "right"))    
    
    

    【讨论】:

    • 感谢您的回答。但似乎彩色密度图是散点的最小边界矩形。我已经在问题中发布了原始散点图。
    • @changkx 我不知道您所说的“最小边界矩形”是什么意思。渐变色标映射到 log10 转换的密度。我以为这就是你所追求的(你展示的情节也暗示了这一点)?或者您想对 x 和/或 y 轴上的值进行 log10 变换?
    • 是的,log10 转换后的密度是我想要的。但是根据原始散点图(我在答案中更新了它)。我想在点分布区域制作密度散点图,而不是整个区域。
    • @changkx “我想在点分布区域制作密度散点图,而不是整个区域。”对不起,我真的不不明白你的意思。什么是“点分布区域”?您是否在问如何增加渐变色标的高度以匹配绘图的高度?
    • 感谢您的详细而翔实的回复。对不起我的困惑。如“原始散点图”所示,存在近似线性关系。因此,我想将其绘制为密度散点图,就像问题中的 "sample plot" 一样。
    【解决方案2】:

    无论您显示为预期输出的任何图,您都可以使用以下代码

    library(tidyverse)
    
    # Bin size control + color palette
    ggplot(iris, aes(x=Sepal.Length, y=Petal.Length) ) +
      geom_bin2d(bins = 20) +
      scale_fill_distiller(palette = 'YlOrRd', direction = 1) +
      theme_bw() +
      theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())
    

    【讨论】:

    • 我不确定这是否能回答 OP 的问题:(1) OP 想要显示 2d density 图,您正在显示 counts。 (2) OP 想log10-transform 密度;您不会对数据进行日志转换。
    • 是的,莫里茨·埃弗斯。你说的对。如果计数可以用 log10 转换的密度代替,这就是我想要的,就像示例图一样。
    猜你喜欢
    • 2013-09-17
    • 2014-01-08
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 2015-09-12
    • 2016-06-04
    • 2013-01-08
    • 2022-11-14
    相关资源
    最近更新 更多