【问题标题】:Plotting mutliple plots: Different max and min for continuous color scale绘制多个图:连续色标的最大值和最小值不同
【发布时间】:2019-06-15 17:24:39
【问题描述】:

在我的真实数据中,我有一个 PCA 图,我想以 50 种不同的方式着色,基于我所有点对 50 个不同标志的得分。不同标志之间的分数差异很大,所以我希望每个图都有自己的连续色标的最大值和最小值。

如果我使用例如彩虹色渐变,这会起作用,但由于我想寻找“高”和“低”,我想要一个蓝-灰-红级。当我使用scale_color_gradient2 进行此操作时,最大值和最小值是根据所有数据设置的,而不是根据 Hallmark 设置的。请参阅下面的示例代码:

set.seed(1)
df <- data.frame(matrix(rnorm(20), nrow=4)) %>% 
  cbind(.,data.frame(matrix(rnorm(20)*5, nrow=4)) ) %>% 
  add_column(HALLMARK= c("HALLMARK1","HALLMARK2","HALLMARK3","HALLMARK4"), .before = 1) %>% 
  gather(key=Patient, value= Value , -HALLMARK) %>% 
  cbind(., data.frame(Value2=matrix(rnorm(20), nrow=20)))

这可行,但颜色错误:

test.plots <- df %>% 
  group_by(HALLMARK) %>%
  do(
    plots=  ggplot(data=., mapping=aes(x=Value, y=Value2))+
  geom_point(.,mapping=aes(color=Value))+
  geom_text(.,mapping=aes(label=Patient, color=Value))+
  scale_colour_gradientn(colors = rainbow(3))+
  theme_bw()+
  theme(panel.grid = element_blank())+
    facet_wrap(~HALLMARK)
  )

test.plots$plots

这不符合我的要求,但颜色是正确的:

 test.plots <- df %>% 
  group_by(HALLMARK) %>%
  do(
    plots=  ggplot(data=., mapping=aes(x=Value, y=Value2))+
  geom_point(.,mapping=aes(color=Value))+
  geom_text(.,mapping=aes(label=Patient, color=Value))+
  scale_color_gradient2(midpoint=median(.$Value), mid="grey", low= "red", high="blue" )+
  theme_bw()+
  theme(panel.grid = element_blank())+
    facet_wrap(~HALLMARK)
  )

test.plots$plots

有人可以帮助我吗? 在此先感谢:)

【问题讨论】:

  • 您的代码确实不是直截了当的,例如为什么刻面......但这是另一个问题。试试scale_colour_gradientn(colors = c("grey","red","blue" ))?那就试试ggplot(df, aes(x=Value, y=Value2,label=Patient, color=Value))+ geom_point()+ geom_text()+ scale_colour_gradientn(colors = c("grey","red","blue" ))+ facet_wrap(~HALLMARK)
  • 谢谢,您的解决方案适用于我的测试数据,但不知何故不适用于我的真实数据。对于您的第一个建议,我只收到一条警告消息说Discrete value supplied to continuous scale,第二个给出mapping must be created by aes()。 (刻面只是一个快速修复解决方案,让标题告诉我情节显示的是哪个标志 :))
  • 这个Discrete value supplied to continuous scale 是您的data.frame 中的一个因素与数字问题。检查str()。您必须在aes() 中指定所有映射,包括 x、y、填充、颜色、构面。因此,请检查列的名称。
  • 很好,现在可以了 :)

标签: r ggplot2 colors


【解决方案1】:

@Jimbou 给出的功能解决方案:

test.plots <- df %>% 
  group_by(HALLMARK) %>%
  do(
    plots=  ggplot(data=., mapping=aes(x=Value, y=Value2))+
  geom_point(.,mapping=aes(color=Value))+
  geom_text(.,mapping=aes(label=Patient, color=Value))+
  scale_colour_gradientn(colors = c("grey","red","blue" ))+
  theme_bw()+
  theme(panel.grid = element_blank())+
    facet_wrap(~HALLMARK)
  )

test.plots$plots

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 2020-05-10
    • 2015-07-19
    • 1970-01-01
    相关资源
    最近更新 更多