【发布时间】: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、填充、颜色、构面。因此,请检查列的名称。 -
很好,现在可以了 :)