fill.contour in R:如何使相同的密度是相同的颜色

时间:2014-05-20 20:11:03

标签: r kernel-density

我需要在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是蓝色。我在这两个图中使用相同的色标。 为了使这两个图表具有可比性,我想在这两个图中使用相同密度的相同颜色。

请问我能告诉我如何更改设置以使其正确?

1 个答案:

答案 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
)

哪个产生这两个图

sample output