简体   繁体   English

为负值和正值定义颜色渐变 scale_fill_gradientn()

[英]define color gradient for negative and positive values scale_fill_gradientn()

R version 3.1.1 (2014-07-10) Platform: i386-w64-mingw32/i386 (32-bit) R version 3.1.1 (2014-07-10) Platform: i386-w64-mingw32/i386 (32-bit)

I am working on a heatmap with ggplot2() values from -1 to +1.我正在使用ggplot2()值从 -1 到 +1 的热图。 I want to achieve that negative values have a bluish gradiend from darkblue(-1) to lightblue(-0.00000001) and the positive values a redish one from lightred(0.00000001) to darkred(1).我想实现负值具有从深蓝色(-1)到浅蓝色(-0.00000001)的蓝色渐变,正值具有从浅红色(0.00000001)到深红色(1)的红色渐变。 Small values should not fade into white, as zeros should have white color and there shall be a visible contrast between 0 and a small value.小值不应淡入白色,因为零应为白色,并且 0 和小值之间应有明显的对比度。 NA values should be grey. NA 值应为灰色。

I tried scale_fill_gradient2() and scale_fill_gradientn() also with rescale() .我也用scale_fill_gradient2()尝试了scale_fill_gradient2()scale_fill_gradientn() rescale()

A similar topic has been discussed, but I coud not solve the problem in my case:已经讨论了一个类似的主题,但我无法解决我的问题:

Is it possible to define the "mid" range in scale_fill_gradient2()? 是否可以在 scale_fill_gradient2() 中定义“中间”范围?

ggplot2 positive and negative values different color gradient ggplot2正负值不同颜色渐变

Data (positive and negative):数据(正负):

data.clean <- structure(list(`1` = c(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1
), `2` = c(-0.742791272678673, -0.637008381689233, -0.678722760290557, 
-0.374604178402531, -0.752540076766764, -0.741425721633379, -0.790950497422989, 
-0.822779886175826, -0.696227459496285, -0.698453447846652), 
`3` = c(-0.525688574069743, -0.43137330754352, -0.363377723970944, 
-0.210140400587573, -0.532475351847671, -0.587485278919413, 
-0.683607015861601, -0.630387125338536, -0.494214515339252, 
-0.566343042071197), `4` = c(-0.311771191820642, -0.320141843971631, 
-0.20021186440678, -0.0798166672550588, -0.369634479817365, 
-0.452880524911674, -0.526639098645571, -0.401771184676448, 
-0.278097123757212, -0.367096091610655), `5` = c(-0.247251829329413, 
-0.22468085106383, -0.115738498789346, 0, -0.305938135019192, 
-0.355658903549883, -0.356666267130129, -0.25741406255345, 
-0.0161801962913287, -0.0980209111277072), `6` = c(-0.0459977502311025, 
-0.150870406189555, -0.0659806295399516, 0, -0.200647249190939, 
-0.248640853702502, -0.269487394622238, -0.145798738610008, 
0.889467675181961, -0.0158700522778193), `7` = c(0.122867924528302, 
-0.107079303675048, -0.0558414043583535, 0, -0.143962770627932, 
-0.198013555411349, -0.185704582684086, 0.387784090909091, 
0.639289282146425, 0.410557184750733), `8` = c(0.985358490566038, 
-0.0924822695035461, -0.0304933414043584, 0, -0.088620456084895, 
-0.139027086788281, -0.0479443845139638, 0.715909090909091, 
0.856286570572285, 0.98533724340176), `9` = c(1, -0.0658736299161831, 
-0.0118038740920097, 0, -0.0431499460625674, -0.0776912538755498, 
0.475849731663685, 1, 1, 1), `10` = c(0.692830188679245, 
-0.031063829787234, -0.00579600484261501, 0, -0.0319485211108602, 
-0.0461460811882616, 0.60169946332737, 0.772727272727273, 
0.44955044955045, 0.765591397849462), `11` = c(0.489056603773585, 
-0.00773694390715667, -0.0045475181598063, 0, -0.0309324904041544, 
-0.0235537289398419, 1, 0.574090909090909, 0.0749250749250749, 
0.668621700879765), `12` = c(0.649056603773585, 0.170212765957447, 
0, 0, -0.0238328190461855, -0.0173047804455981, 0.692307692307692, 
0.353977272727273, 0.0784929356357928, 0.617790811339198), 
`13` = c(0.78188679245283, 0.723404255319149, 0, 0, -0.00752615338300595, 
0.559210526315789, 0.471124031007752, 0.298295454545455, 
0.096118167546739, 0.551319648093842), `14` = c(0.679245283018868, 
0.791489361702128, 0, 0, -0.00150523067660119, 0.785526315789474, 
0.453488372093023, 0.130681818181818, 0.121735407449693, 
0.183773216031281), `15` = c(0.414943396226415, 1, 0, 0, 
-0.000376307669150297, 0.793421052631579, 0.433810375670841, 
0, 0, 0.183773216031281), `16` = c(0.250415094339623, 0, 
0, 0, 1, 1, 0.509838998211091, 0, 0, 0.899315738025415), 
`17` = c(0, 0, 0, 0, 0, 0.720789473684211, 0.447227191413238, 
0, 0, 0), `18` = c(0, 0, 0, 0, 0, 0.868421052631579, 0.374955277280859, 
0, 0, 0), `19` = c(0, 0, 0, 0, 0, 0, 0.584376863446631, 0, 
0, 0), `20` = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), Type = structure(1:10, .Label = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", 
"13", "14", "15", "16", "17", "18", "19", "20", "21", "22", 
"23", "24", "25", "26", "27", "28", "29", "30", "31", "32", 
"33", "34", "35", "36", "37", "38", "39", "40", "41", "42", 
"43", "44", "45", "46", "47", "48", "49", "50", "51", "52", 
"53"), class = "factor")), .Names = c("1", "2", "3", "4", 
"5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", 
"16", "17", "18", "19", "20", "Type"), row.names = c(NA, 10L), class = "data.frame")

Data (only positive):数据(仅正面):

data.clean <- structure(list(`1` = c(0.709932715640856, 0.943366065311715, 
0.954871794871795, 1, 0.810404161664666, 1, 0.349208911850178, 
0.502441037735849, 1, 0.948646446923173), `2` = c(0.657238583719391, 
0.919799040876913, 1, 0.826392095299658, 1, 0.899561128526646, 
0.395221181788828, 0.838679245283019, 0.921675990953458, 1), 
`3` = c(0.838710566953452, 1, 0.747511312217195, 0.601856127066211, 
0.706962785114046, 0.737993730407523, 0.688440426218922, 
1, 0.665158909653613, 0.857250281990224), `4` = c(0.881866313699537, 
0.959123087462891, 0.607541478129713, 0.392464678178964, 
0.483393357342937, 0.629968652037618, 1, 0.826297169811321, 
0.46194500654684, 0.719388394535656), `5` = c(0.78590337524818, 
0.9762502854533, 0.522956259426848, 0.192815587773571, 0.365266106442577, 
0.482445141065831, 0.870649015175977, 0.612240566037736, 
0.360195214855374, 0.618310565233739), `6` = c(0.864493712772998, 
0.816396437542818, 0.477828054298643, 0.112845138055222, 
0.256982793117247, 0.420062695924765, 0.71139812721989, 0.575471698113208, 
0.260135698131175, 0.452390650457451), `7` = c(1, 0.833523635533227, 
0.4, 0.0793702096223105, 0.155822328931573, 0.347586206896552, 
0.524701323861802, 0.430672169811321, 0.175979050113082, 
0.326356686301542), `8` = c(0.738335539377895, 0.737611326786938, 
0.352941176470588, 0.0473266229568751, 0.111644657863145, 
0.310971786833856, 0.384780970831988, 0.311320754716981, 
0.0910605880252351, 0.211743326231357), `9` = c(0.521178027796162, 
0.650833523635533, 0.364705882352941, 0.045064179517961, 
0.127450980392157, 0.351097178683386, 0.27788182111721, 0.265330188679245, 
0.0636828948934651, 0.145412959017421), `10` = c(0.412599272005295, 
0.554921214889244, 0.407843137254902, 0.0367069904885031, 
0.0789915966386555, 0.273981191222571, 0.256161877085351, 
0.173349056603774, 0.0484942268777526, 0.161204411580399), 
`11` = c(0.322634017207148, 0.364238410596026, 0.378280542986425, 
0.0267799427463293, 0.0424169667867147, 0.295297805642633, 
0.267807555699064, 0.13561320754717, 0.0535650517795501, 
0.129715503195889), `12` = c(0.251282263401721, 0.231788079470199, 
0.313725490196078, 0.0221627112383415, 0.0256102440976391, 
0.150470219435737, 0.23680981595092, 0.148372641509434, 0.0664992262825854, 
0.0552230855996992), `13` = c(0.173726009265387, 0.147841973053209, 
0.251674208144796, 0, 0, 0.058307210031348, 0.139920353029814, 
0.202830188679245, 0.0614212593738841, 0.0547687680160421
), `14` = c(0.194200860357379, 0.115734185887189, 0.242413273001508, 
0, 0, 0, 0.102034226670972, 0.101415094339623, 0.017259850017855, 
0.062131846096002), `15` = c(0.162213214206927, 0, 0.135746606334842, 
0, 0, 0, 0.0565062964158863, 0.0790683962264151, 0, 0.0274157162551698
), `16` = c(0.0654230090447827, 0, 0.0588235294117647, 0, 
0, 0, 0.0742654181465935, 0.122641509433962, 0, 0), `17` = c(0, 
0, 0.107119155354449, 0, 0, 0, 0, 0.188679245283019, 0, 0
), `18` = c(0, 0, 0.110316742081448, 0, 0, 0, 0, 0.265070754716981, 
0, 0), `19` = c(0, 0, 0.2473604826546, 0, 0, 0, 0, 0.220518867924528, 
0, 0), `20` = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), Type = structure(1:10, .Label = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10"), class = "factor")), .Names = c("1",     "2", "3", "4", 
"5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", 
"16", "17", "18", "19", "20", "Type"), row.names = c(NA, 10L), class = "data.frame")

The code is using ggplot2 , reshape2 and RColorBrewer .代码使用ggplot2reshape2RColorBrewer The following code worked quite sufficiant, BUT as soon as i have only positive values, the positive values will also be colored bluish下面的代码很有效,但是只要我只有正值,正值也会变成蓝色

data.m  <- melt(data.clean, id = "Type") 

bl <- colorRampPalette(c("navy","royalblue","lightskyblue"))(200)                      
re <- colorRampPalette(c("mistyrose", "red2","darkred"))(200)

ggplot(data.m, aes(x=variable, y=Type, fill=value)) +
  geom_tile(colour = "grey92", size = 0.5) +
  scale_fill_gradientn(colours=c(bl,"white", re), na.value = "grey98")

I tried the rescale function, but i can not handle it.我尝试了重新缩放功能,但我无法处理它。 I do not get any good results.我没有得到任何好的结果。

ggplot(data.m, aes(x=variable, y=Type, fill=value)) +
  geom_tile(colour = "grey92", size = 0.5) +
  scale_fill_gradientn(colours=c(bl,"white", re), na.value = "grey98",
  values = rescale(c(-1,-0.001,0,0.001,1)))

I hope you can help me!我希望你可以帮助我!

Thanks a lot!非常感谢!

You need to specify the limits argument in scale_fill_gradientn :您需要在scale_fill_gradientn指定limits参数:

data.m <- melt(data.clean, id = "Type")
p <- ggplot(data.m, aes(x = variable, y = Type, fill = value) + geom_tile() +
         scale_fill_gradientn(colours=c(bl,"white", re), na.value = "grey98",
         limits = c(-1, 1)) 
p
p %+% transform(data.m, value = abs(value))

Will give the two following graphs:会给出以下两张图:

所有值正值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 用ggplot2的scale_fill_gradientn表示,恒定渐变 - Representation with, scale_fill_gradientn ggplot2, constant gradient 在 scale_fill_gradientn 中使用绝对值而不是相对值 - Use absolute values not relative values in scale_fill_gradientn 使用 scale_fill_gradientn() 将颜色比例转换为概率转换颜色分布 - Transform color scale to probability-transformed color distribution with scale_fill_gradientn() 使用 scale_fill_gradientn 将特定颜色分配给条形 plot 中的确定值 - Assign specific color to definite value in bar plot using scale_fill_gradientn 在热图中为比例设置 scale_fill_gradientn 的限制(从 0 到 1 的值带有蓝色刻度,0 是白色,大于 1 的值带有红色刻度) - Set limits for scale_fill_gradientn for ratios (values from 0 to 1 with blue scale, 0 is white and values over 1 with red scale) in heatmap 如何获得多个具有相同比例的 ggplot2 scale_fill_gradientn? - How to get multiple ggplot2 scale_fill_gradientn with same scale? R:使用带有geom_tile()和scale_fill_gradientn()的颜色划分热图 - R: Dividing heat map using colors with geom_tile() and scale_fill_gradientn() 将 RColorBrewer 与 scale_fill_gradientn() 一起使用,我不断收到相同的错误 - Using the RColorBrewer with scale_fill_gradientn(), I keep getting the same error scale_fill_gradientn() 成功填充 map 但未能在图例中显示所有 colors - The scale_fill_gradientn() successfully fills map but fails showing all colors in the legend 在ggplot中与geom_bin2d结合获得相对计数,并正确使用scale_fill_gradientn - Get relative count in ggplot combined with geom_bin2d, and proper use of scale_fill_gradientn
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM