【问题标题】:Using two scale colour gradients ggplot2使用两个比例颜色渐变ggplot2
【发布时间】:2013-08-21 00:44:01
【问题描述】:

如果有的话,我认为必须有一个非常简单的解决方案。我有两个基本上看起来像这样的大型数据框:

> data1[1,]
      chromosome start    end      test ref position log2      p.value 
13600 Y          10199251 10200750 533  616 10200000 0.2181711 0.00175895   
...

> data2[1,]
      chromosome start    end      test ref position log2       p.value 
4080  Y          10197501 10202500 403  367 10200000 0.04113596 0.3149926   
...

我正在使用此代码将两个数据框绘制到同一个图表中:

p <- ggplot() + geom_point(data=subset(data1, p.value >= glim[1]),
map=aes(x=position, y=log2, colour=p.value))
+ geom_point(data=subset(data2, p.value >= glim[1]), map=aes(x=position,
y=log2, colour=p.value))

当我绘制单个数据框时,我对“p.value”列中的值使用了红白色渐变。使用这一行:

p <- p + scale_colour_gradient(limits=glim, trans='log10', low="red", 
high="white") 

中心问题是:现在有两个数据框,我如何为 data1 设置一个颜色渐变,为 data2 设置另一个颜色渐变?我在上一篇文章中读到不可能使用两种不同的色标(ej。“low=”用于第一个,“high=”用于第二个),但在这种情况下是完全相同的色标(如果我没有混淆术语)。语法显然不正确,但我想做这样的事情:

p <- p + scale_colour_gradient(limits=glim, trans='log10', low="red", 
high="white") 

p <- p + scale_colour_gradient(limits=glim, trans='log10', low="blue", 
high="white") 

【问题讨论】:

  • Relevant post 使用scale_colour_identity() 为每个点定义自己的颜色。

标签: r ggplot2


【解决方案1】:

首先,请注意 ggplot 不鼓励这样做的原因是因为这些图往往难以解释。

您可以通过一些欺骗手段获得两种颜色渐变比例。在 geom_point 中,某些形状(21 到 25)可以同时具有填充和颜色。您可以利用它来创建一个具有“填充”比例的图层和另一个具有“颜色”比例的图层。

# dummy up data
dat1<-data.frame(log2=rnorm(50), p.value= runif(50))
dat2<-data.frame(log2=rnorm(50), p.value= runif(50))

# geom_point with two scales
p <- ggplot() +
       geom_point(data=dat1, aes(x=p.value, y=log2, color=p.value), shape=21, size=3) +
       scale_color_gradient(low="red", high="gray50") +
       geom_point(data= dat2, aes(x=p.value, y=log2, shape=shp, fill=p.value), shape=21, size=2) +
       scale_fill_gradient(low="gray90", high="blue")
p

【讨论】:

  • 啊哈,我遇到了同样的问题,除了我没有将 scale_colour_gradient 应用于两组点,而是应用于一组点,并且我想要另一个 scale_colour_gradient 用于叠加的 geom_path ... ..两者都有不同的分布,但我仍然希望在同一张图表中看到它们。有什么提示吗?我应该补充一点,我的渐变是使用 scale_colour_gradientn 高度定制的
  • @ThomasBrowne 如果您可以将其作为一个新问题提出,并提供一个可重复的小示例,这里有许多 ggplot 专家用户会跳进来回答。
  • 抱歉打扰了,拉姆!你介意帮我回答这个问题吗:stackoverflow.com/a/25588144/2872891?在我的真实代码库中集成这种方法时,我还有另一个问题。当我将其记录为问题时,我可以向您寻求帮助吗?谢谢!
  • 一种更通用的方法是在调用 ggplot2.见stackoverflow.com/a/5738083/3980197
  • 这里的shp 是什么?在shape = shp
【解决方案2】:

我知道这是很久以后的事了,但是看看https://github.com/eliocamp/ggnewscale

您可以使用函数new_colour_scale() 启动一个新的色标,适用于它之后的所有内容。

【讨论】:

    猜你喜欢
    • 2016-03-13
    • 2012-07-29
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    相关资源
    最近更新 更多