2014-09-27 4 views
0

필자는 비 프로그래머로서 데이터를 더 잘 이해하기 위해 두 변수가있는 다 변수 커널 밀도 함수를 잘못 작성해야합니다. 인터넷 검색 후 데이터를 삽입하고 원하는 기능을 만드는 데 사용되는 코드를 발견했습니다.
이 내 현재 코드입니다 :R 커널의 채색 R

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) 

그리고이 결과 플롯이다 :

http://imgur.com/azb0CCj

이 내가 필요 정확히이지만, 왜 플롯의 조밀 한 부분은 흰색이다? 고밀도를 나타 내기 위해 부드러운 부드러운 붉은 색으로 채워야합니다. 이 문제를 어떻게 해결합니까 ?? colorRampPalette을 256과 같이 더 높은 값으로 변경하면 구멍이 채워지지만 나머지 음모는 내가보기 싫은 매우 못 생기고 자세하지 않습니다.

도와주세요, 제 논문을 끝내기 위해 필요하지만, 초심자이고 R에 대해 전혀 알지 못한다는 것을 명심하십시오. 불행히도이 플롯을 위해 사용해야합니다!

다음은이 예제에 사용할 수있는 몇 가지 샘플 데이터입니다. 이것들은 두 개의 원소 인 Ti와 Zr의 농도를 측정하여 서로에 대해 음모를 꾸미고 점들의 밀도를보기를 원합니다.

d <- read.table("http://pastebin.com/raw.php?i=DcFdZ5Rm") 

고마워요!

+0

센터에 포인트가없는 것처럼 보입니다. 아니면 빨간색으로 그 지역을 채우기를 원하십니까? – shadowtalker

+0

예이 경우 빨간색으로 표시 될 적절한 농도 색상으로 영역을 채우고 싶습니다. 내 말은, 자동으로 그렇게해야하지만, 어떤 이유로 든 가장 높은 농도 영역이 빠져 있다는 뜻입니다. 그리고 네, 거기에 많은 포인트가 있습니다, 나는 다른 색상없이 Excel에서 확인했습니다. – Foxxy

+1

SO에 오신 것을 환영합니다. 나는 당신이 당신의 논문에 대해 걱정하고 있다는 것을 알고 있지만 심호흡을하고 당신의 코드를 제대로 볼 필요가있다. 지금은 생각하지 않고 작동하는 것을보기 위해 아무것도 입력하지 않은 것처럼 보입니다. 먼저 '? densCols' 도움말 페이지에서 예제를 읽으십시오. 그리고 우리가 당신을 도울 수 있도록 문제를 재현 할 수있는 데이터를 제공해주십시오. –

답변

0

두 가지 해결책이 여기에 있습니다. 두 경우 모두 점을 표시하려면 (표준 밀도 등고선보다는 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 개 요소에 대해서만 색을 지정했기 때문에 일부 점에는 색 값이 누락되어 있습니다.

+0

매우 혼란스러워서 미안해하지만 이것은 중요한 문제였습니다. 나는 내가 모르는 어떤 프로그램을 사용하도록 강요 당했고 그래서 나는 도움을 얻기 위해 여기로 향했다. 커널 기능에 관한 모든 도움말 섹션을 읽으려고했지만 모든 것을 이해할 수 없어서 인터넷에서 찾은 코드를 패치했습니다. 여기에 txt 파일을 업로드 할 수 있습니까? 점수가 너무 많아 의견이나 원본 게시물에 복사 할 수 없습니다. 당신의 시간과 내가 얻을 수있는 모든 도움에 감사드립니다! – Foxxy

+0

실제 데이터의 부분 집합을 제공하십시오 ('dput' 함수는 여기에서 다시 사용할 수 있도록 양식에서 제공 할 것입니다). 또는 문제를 재현하는 합성 데이터를 만들 수 있습니다 (아마도'rnorm'과 함께).기타 도움말 : http://stackoverflow.com/q/5963269/134830 –

+0

나는이 플롯의 요점 인 커다란 데이터 세트를 가지고 있으므로 다른 접근법을 취했습니다. 위의 원본 게시물의 맨 아래에 업데이트 된 섹션이 있습니다. 여기에서 내 데이터를 R로 직접 가져 오는 데 사용할 수있는 명령이 포함되어 있습니다. 도움이 되었으면합니다. – Foxxy