R中的着色核密度

R中的着色核密度,r,colors,plot,kernel,R,Colors,Plot,Kernel,我是一个非程序员,迫切需要绘制一个两个变量相对的多元核密度函数,以便更好地理解我的数据。在搜索互联网后,我找到了一个代码,我用它插入数据并创建所需的函数。 这是我当前的代码: mydata = read.csv("J:/LKAB Thesis/Plots/Kernel/81241.txt", header = TRUE, sep = "\t") x1 <- mydata[,11] x2 <- mydata[,23] df <- data.frame(x1,x2)

我是一个非程序员,迫切需要绘制一个两个变量相对的多元核密度函数,以便更好地理解我的数据。在搜索互联网后,我找到了一个代码,我用它插入数据并创建所需的函数。 这是我当前的代码:

mydata = read.csv("J:/LKAB Thesis/Plots/Kernel/81241.txt", header = TRUE, sep = "\t") 

x1 <- mydata[,11] 
x2 <- mydata[,23] 
df <- data.frame(x1,x2) 


x <- densCols(x1,x2, colramp=colorRampPalette(c("black", "white"))) 

df$dens <- col2rgb(x)[1,] + 1L 

cols <-  colorRampPalette(c("#000099", "#00FEFF", "#45FE4F", 
                            "#FCFF00", "#FF9400", "#FF3100"))(32) 
df$col <- cols[df$dens] 

plot(x2~x1, data=df[order(df$dens),], pch=20, col=col, cex=1) 

谢谢

这里有两种解决方案。在这两种情况下,如果要显示点而不是更标准的密度轮廓;请参见ggplot2示例,然后通过使点透明来处理过度抽签是很重要的

#Data import and cleaning
d <- read.table(
  "http://pastebin.com/raw.php?i=DcFdZ5Rm", 
  header = TRUE, 
  stringsAsFactors = FALSE
)
d[] <- lapply(d, as.numeric)

# Draw the plot using ggplot.  It's nicer. 
# Here's a scatterplot with density contours.
library(ggplot2)
(p_contours <- ggplot(d, aes(Ti, Zr)) +
  geom_point(alpha = 0.1) +
  geom_density2d()
)

# Here's a heatmap. Explore different binwidth values.
(p_heatmap <- ggplot(d, aes(Ti, Zr)) +
  geom_bin2d(binwidth = c(0.001, 0.001))
)

#If you insist on using base graphics, try something like
library(scales)
col <- densCols(d$Ti, d$Zr, colramp=colorRampPalette(c("grey67", "blue")))    
col <- alpha(col, 0.1) # Make points transparent
plot(d$Ti, d$Zr, col = col, pch = 16)    
为什么情节的密集部分是白色的


因为您选择了黑白渐变,其中白色代表最高密度区域。因为您只为密度中的前32个元素指定了颜色,所以某些点缺少颜色值。

看起来中心没有任何点。或者你想用红色填充该区域?是的,我想用合适的密度颜色填充该区域,在这种情况下,该颜色将为红色。我的意思是,它应该自动这样做,但出于某种原因,最高密度的区域被忽略了。是的,这里有很多点,我在没有其他颜色和Excel的情况下进行了检查。欢迎使用SO。我知道你很担心你的论文,但你需要深呼吸,好好看看你的代码。现在看起来你只是在输入任何东西,看看什么是有效的,而不去想它。首先阅读densCols帮助页面上的示例。为了让我们更容易帮助你,请提供一些数据让我们能够重现这个问题。我很抱歉我如此惊慌失措,但这对我来说是个大问题。我被迫使用一个我一无所知的程序,所以我转向这里寻求帮助。我试着阅读关于内核函数的每一个帮助部分,但我不能理解所有内容,所以我拼凑了一段在互联网上找到的代码。可以在这里上传一个包含一些数据的txt文件吗?有太多的观点,我真的无法将它们复制到评论或原始帖子中。我感谢你的时间和我能得到的所有帮助!提供真实数据的子集dput函数将允许您以表单的形式提供它,以便在此处重用,或者创建一些合成数据,以再现rnorm的问题。这里有更多帮助:我有一个很大的数据集,这是这个图的全部要点,所以我采取了不同的方法。在上面原始帖子的底部有一个更新的部分,我在其中包含了一个命令,可以用来将我的数据直接导入到R中。希望这有帮助!“ggplot”很好,但它没有绘制密度。我想有一个从蓝色到红色的颜色梯度,每种颜色代表一个不同的密度,就像我已经有了一样,但我需要删除白色的空白,并用红色填充它,就像它应该的那样。如果我更改“颜色调色板”,什么也不会发生。空白的存在是因为你只为密度中的前32个元素指定了颜色。查看数据框中的col列—它包含许多缺少的值。这段代码变得越来越复杂,因为您试图做一些非标准的事情,这没有多大意义。若你们想显示密度,那个么像我演示的那个样将等高线添加到你们的散点图中,或者画一张热图。这些都是标准的、好的解决方案,所以我认为重新发明轮子是个坏主意。
#Data import and cleaning
d <- read.table(
  "http://pastebin.com/raw.php?i=DcFdZ5Rm", 
  header = TRUE, 
  stringsAsFactors = FALSE
)
d[] <- lapply(d, as.numeric)

# Draw the plot using ggplot.  It's nicer. 
# Here's a scatterplot with density contours.
library(ggplot2)
(p_contours <- ggplot(d, aes(Ti, Zr)) +
  geom_point(alpha = 0.1) +
  geom_density2d()
)

# Here's a heatmap. Explore different binwidth values.
(p_heatmap <- ggplot(d, aes(Ti, Zr)) +
  geom_bin2d(binwidth = c(0.001, 0.001))
)

#If you insist on using base graphics, try something like
library(scales)
col <- densCols(d$Ti, d$Zr, colramp=colorRampPalette(c("grey67", "blue")))    
col <- alpha(col, 0.1) # Make points transparent
plot(d$Ti, d$Zr, col = col, pch = 16)