【问题标题】:Ggplot() graph issues when creating stripped graphs创建剥离图时的 Ggplot() 图形问题
【发布时间】:2020-10-30 19:00:24
【问题描述】:

我正在根据我模拟的数据创建下面的图表。数据由两组 A 和 B 组成,每组具有从不同分布中提取的不同值。当我使用下面的代码创建条形图时,每个模拟图的色标范围都会发生变化。例如,顶部图像的深红色映射为 90,而底部图像为 120。在所有图表的创建过程中,我需要将颜色映射到相同的值。

    ## GGPLOT: Ensemble Stripplts ##
            for(i in 1:max(unique(saveDT$iter))){
              
              #grab the data for this dataset
              gg<-saveDT[which(saveDT$iter==i),]
              gg$group<-factor(gg$group)
              
              # set the limits of the palette so that zero is in the middle of the range.

               # png(paste0("aggIndividGroupV1","-",sa,".png"), width = 400, height = 300)
               # par(mar=c(1, 1, 1, 1))
              print(ggplot(gg, aes(x=i, y=1,fill=value)) + facet_grid(. ~ group)+
                    theme(strip.background = element_rect(color="white", fill="white"))+
                    geom_vline(aes(xintercept = value, lwd=5, color=value))+
                    scale_colour_gradientn(colours=rev(brewer.pal(9,"RdBu"))))
           }

Q1:如何修复色阶?

Q2:如何更改中点值以表示特定的固定中点?

Q3:为什么 ggplot() 使 RdBu brewer 调色板看起来与在 plot() 函数中使用 RdBu 时明显不同? (参见最后一张图片进行比较)。 Plot() 似乎使它们看起来更饱和,渐变更少。我尝试使用代码 scale_fill_divergentx() 但此类型和其他类型不适用于我的 ggplot() 函数。

【问题讨论】:

    标签: r ggplot2 plot


    【解决方案1】:

    您可以在scale_colour_gradientn 中使用limits 设置色标范围。这也固定了中点。这里我将限制设置为 40 到 120,即中点为 80。

    library(ggplot2)
    #> Warning: replacing previous import 'vctrs::data_frame' by 'tibble::data_frame'
    #> when loading 'dplyr'
    library(RColorBrewer)
    
    set.seed(4)
    gg <- data.frame(value = runif(20, min = 40, max = 120),
                     group = rep(c("A", "B"), each = 10))
    
    print(ggplot(gg, aes(y=1, fill=value)) + facet_grid(. ~ group)+
            theme(strip.background = element_rect(color="white", fill="white"))+
            geom_vline(aes(xintercept = value, color=value), size = 5)+
            scale_colour_gradientn(colours = rev(brewer.pal(9,"RdBu")),
                                   limits = c(40, 120)))
    

    gg <- data.frame(value = runif(20, min = 60, max = 80),
                     group = rep(c("A", "B"), each = 10))
    
    print(ggplot(gg, aes(y=1,fill=value)) + facet_grid(. ~ group)+
            theme(strip.background = element_rect(color="white", fill="white"))+
            geom_vline(aes(xintercept = value, color=value), size = 5)+
            scale_colour_gradientn(colours = rev(brewer.pal(9,"RdBu")),
                                   limits = c(40, 120)))
    

    reprex package (v0.3.0) 于 2020 年 10 月 30 日创建

    感谢 @Rui Barradas 的改进!

    【讨论】:

    • 赞成但 1) 不需要x=i; 2) 从aes() 中删除lwd=5 并将其放在其外面; 3)并调用lwd(基本图形)ggplot名称,size
    • @RuiBarradas 感谢您的建议,您完全正确;我太懒了,只是复制了OP的代码
    • 谢谢!所以,我不需要告诉它 ggplot() 中的迭代,因为那是冗余信息?如果是这样,那现在对我来说很有意义。有没有办法去除条带之间的所有空白空间,使它们彼此相邻?这些图表将在没有 x 轴上的值的情况下显示。
    • 我基本上希望它们看起来类似于#showyourstripes 变暖条纹图。
    • 我认为最简单的方法是为 x 轴引入一个额外的变量(例如,在这种情况下只有 1 到 10)用于排序;但是我还没有弄清楚如何最小化间距,以便线条直接相邻
    猜你喜欢
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    • 2022-09-30
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    相关资源
    最近更新 更多