我需要在R中使用filled.contour
绘制二维密度图。
我有两个数据集并将它们绘制在两个fill.contour
中。我这里没有10个声誉,我无法在这里发布我的数据。我在这里发布我的代码,并希望它可以帮助找出问题。
library(MASS)
density <- kde2d(multi_ligand[,21], multi_ligand[,7])
filled.contour(density,
color.palette=colorRampPalette(c('white','blue','yellow','red','darkred')),
xlab=colnames(single_ligand[21]),
ylab=colnames(single_ligand[7])
)
density1 <- kde2d(single_ligand[,21], single_ligand[,7])
filled.contour(density1,
color.palette=colorRampPalette(c('white','blue','yellow','red','darkred')),
xlab=colnames(single_ligand[21]),
ylab=colnames(single_ligand[7])
)
问题是我发现在这两个图中,相同密度的颜色不一样。例如,在第一个图中,密度0.06是黄色,然而,在第二个图中,密度0.06是蓝色。我在这两个图中使用相同的色标。 为了使这两个图表具有可比性,我想在这两个图中使用相同密度的相同颜色。
请问我能告诉我如何更改设置以使其正确?
答案 0 :(得分:4)
默认情况下,filled.contour
会调整颜色块,以均匀覆盖每个数据集的z
范围,或者在这种情况下density
。如果您希望在两个图上使用完全相同的级别,则需要自己指定它们。下面是一些代码,它们将指定涵盖两个数据集范围的级别。
#sample data
set.seed(15)
ax<-rnorm(50) #like multi_ligand[,21]
ay<-rnorm(50) #like multi_ligand[,7]
bx<-rnorm(75,2, .5) #like single_ligand[,21]
by<-rnorm(75,2, .5) #like single_ligand[,7]
#calculate both densities
density <- kde2d(ax, ay)
density1 <- kde2d(bx, by)
#make levels that cover both ranges of z values
lvls <- pretty(range(density$z, density1$z),20)
#draw both plots using the same levels
filled.contour(density,
color.palette=colorRampPalette(c('white','blue','yellow','red','darkred')),
levels=lvls
)
filled.contour(density1,
color.palette=colorRampPalette(c('white','blue','yellow','red','darkred')),
levels=lvls
)
哪个产生这两个图