gpt4 book ai didi

r - 如何打破ggplot2中连续变量的背景颜色?

转载 作者:行者123 更新时间:2023-12-05 04:12:30 25 4
gpt4 key购买 nike

我想用一个变量(RPKM)使背景着色,因为大多数值在1到40之间,最大值是800,最终图片几乎是蓝色的,无法区分近似值如2 和 3。在 pheatmap 中,我可以通过使用为 1 到 40 分配更多颜色的中断来解决这个问题,并使用相同的颜色使值大于 100。我曾尝试用 scale_fill_gradientnscale_color_brewer 做同样的事情,但没有成功,有人可以帮助我吗?

\1.我的数据是这样的:

head(data3, n=14)
Gene_H Index RPKM Usage Species Dif_index
1 BORCS5 1 NA 0.9300 H 1
2 BORCS5 1 4.663070 0.4200 R 1
3 BORCS5 2 NA 1.0000 H NA
4 BORCS5 2 4.663070 1.0000 R NA
5 BORCS5 3 NA 1.0000 H NA
6 BORCS5 3 4.663070 0.8700 R NA
7 BORCS5 4 NA 1.0000 H NA
8 BORCS5 4 4.663070 1.0000 R NA
9 ALKBH3 1 0.000000 1.0000 H 1
10 ALKBH3 1 5.330331 0.1400 R 1
11 ALKBH3 2 0.000000 1.0000 H NA
12 ALKBH3 2 5.330331 1.0000 R NA
13 ALKBH3 3 0.000000 1.0000 H NA
14 ALKBH3 3 5.330331 1.0000 R NA

\2。我的代码是:

ggplot(data3)+geom_point(aes(x=Index, y=Usage))+ylim(0,1)+
geom_point(aes(x=Dif_index, y=Usage), color="red")+facet_wrap(Gene_H~Species, ncol=2)+
theme(strip.text.x = element_blank(), axis.text.y=element_blank(), panel.grid.major=element_blank(),
panel.grid.minor=element_blank(), panel.margin=unit(0.1, "lines"))+
geom_rect(aes(fill=RPKM), xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf)

\3.然后我得到: enter image description here

\4.我曾尝试使用 cutscale_fill_brewer,但它输出了我未能解决的错误

geom_rect(aes(fill=cut(RPKM, c(seq(0,40,by=0.5),seq(41,800,by=20)))), xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf)+
scale_fill_brewer(type="seq", palette="YlGn")

Warning messages:
1: In RColorBrewer::brewer.pal(n, pal) :
n too large, allowed maximum for palette YlGn is 9
Returning the palette you asked for with that many colors

2: Removed 5 rows containing missing values (geom_point).
3: Removed 122 rows containing missing values (geom_point).
4: In RColorBrewer::brewer.pal(n, pal) :
n too large, allowed maximum for palette YlGn is 9
Returning the palette you asked for with that many colors

\5.使用 scale_color_discrete,它会将颜色分为不同的种类,如下所示,但我希望颜色改变渐变。

geom_rect(aes(fill=cut(RPKM, c(seq(0,40,by=0.5),seq(41,800,by=20)))), xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf)+
scale_color_discrete()

enter image description here

最佳答案

scale_fill_brewer 用于离散比例,对于基于相同调色板的连续比例,您可以使用 scale_fill_distiller。这是一个示例(使用 color 而不是 fill - 切换回 fill 用于您的用例)与您的 0 到 50 比例相同数据。

x = seq(0, 50, by = 2)
dd = data.frame(x = x, y = x)

gridExtra::grid.arrange(g + scale_color_distiller(palette = "RdYlGn"),
g + scale_color_distiller(palette = "PiYG"),
g + scale_color_distiller(palette = "YlGn"))

enter image description here

您可以使用 RColorBrewer::display.brewer.all() 查看所有 RColorBrewer 调色板选项。

由于您的数据似乎集中在 0 附近,另一种选择是对比例进行对数或平方根变换。平方根会更自然,因为您的数据包含 0,但这将有助于分散较低的颜色并压缩较高的颜色。只需将 trans = "sqrt" 添加到任何 scale_fill 函数。对于更极端的转换(可能需要,因为你的数据上升到 800)你可以 log(RMKP + 1),它是用 trans = "log1p" 实现的。

这是与上面相同的图,但在比例尺中添加了 trans = "sqrt":

enter image description here

关于r - 如何打破ggplot2中连续变量的背景颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40290425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com