我用ggplot绘制片段,我想根据相关的值为片段着色,但比较来自不同来源的值。原始数据框每个实验的值超过10000,但是对于绘图,只有少数是子集(~30-50)。
到目前为止,我使用了colorRampPallete的策略:
col <- colorRampPalette(c("blue", "white", "red"))
然后根据每个实验的每个值生成颜色,从整个范围以红色和蓝色渐变为基础(中位数都是〜0)
dat_original$colvalue1 <- col(10)[as.numeric(cut(dat_original$value1, breaks=10))]
dat_original$colvalue2 <- col(10)[as.numeric(cut(dat_original$value2, breaks=10))]
在子集化之后,我使用指定的颜色为片段着色。但我想比较不同实验的数值,所以当我生成颜色时,由于分布不同(有些范围较宽),颜色无法比较(例如,与其他实验相比,相似的负值在一个颜色中更白)
由于我想比较来自不同实验的片段/值,并且范围可能不同,我想基于有限的分布来分配值,即。正态分布/范围,例如-5,5 mean = 0且sd = 1,因此可以比较颜色强度。更具体地说,如果一个中的值是-1.2而第二个中的值是-2,后者应该更蓝,但如果一个是-1.2而另一个-1.25差异应该几乎不存在。
子集如何显示的虚拟数据框
ident <- c("ABC", "ABC", "ABC", "DEF", "DEF", "GHF", "GHF", "GHF")
a3 <- c(10, 15, 20, 30, 45, 60, 80, 90)
a4 <- c(14, 19, 28, 40, 55, 75, 85, 100)
value1 <- c(-3.7,-1.8,-1.5, 2,0.5, -0.5,-0.9, -1.5)
value2 <- c(-2.2,-3.8,-4, 1.2,1.5, -0.8,-1.9, -0.5)
#
dat <- data.frame(ident, a1, a2, a3, a4, value1, value2)
#Plot, I'm using after assigning the colors to colvalue1 or 2
ggplot(dat) +
geom_segment(aes(x=a3, xend=a4, y=as.numeric(ident), yend=as.numeric(ident)), size=4,
color=dat$colvalue1) +
geom_segment(aes(x=a3, xend=a4, y=as.numeric(ident)+0.2, yend=as.numeric(ident)+0.2),
size=4, , color=dat$colvalue1)
任何帮助都会非常感激。
答案 0 :(得分:0)
您可以将数字矢量映射到颜色并使用scale_color_gradient()
ggplot(dat) +
geom_segment(aes(x=a3, xend=a4, y=as.numeric(ident), yend=as.numeric(ident),color=value1), size=4) +
geom_segment(aes(x=a3, xend=a4, y=as.numeric(ident)+0.2, yend=as.numeric(ident)+0.2,color=value2),size=4) +
scale_color_gradient2(low="blue",high="red")+
theme(panel.background=element_rect(fill="grey"))