2014-11-14 2 views
2

У меня есть более общий вопрос относительно принципа плотности 2d. Я использую ggplot и функцию density2d для визуализации движений животных. Моя идея заключалась в вычислении тепловых карт, показывающих, где животное большую часть времени и/или идентифицирует области, представляющие особый интерес. Тем не менее функция плотности 2d иногда генерирует довольно необъяснимые графики.Расчет оценки плотности в плотности 2d?

Вот что я имею в виду:

set.seed(4) 
x<-runif(50,1,599) 
y<-runif(50,1,599) 
df<-data.table(x,y) 

ggplot(df,aes(x=x,y=y)) 
+stat_density2d(aes(x=x,y=y,fill=..level..,alpha=..level..),bins=50,geom="polygon") 
+coord_equal(xlim=c(0,600),ylim=c(0,600)) 
+expand_limits(x=c(0,600),y=c(0,600)) 
+geom_path() 

, который выглядит следующим образом: enter image description here

Есть районы с оценкой плотности, но без данных (около й: 50, у: 300).

Теперь сравните с этим:

set.seed(13) 
x<-runif(50,1,599) 
y<-runif(50,1,599) 
df<-data.table(x,y) 

ggplot(df,aes(x=x,y=y)) 
+stat_density2d(aes(x=x,y=y,fill=..level..,alpha=..level..),bins=50,geom="polygon") 
+coord_equal(xlim=c(0,600),ylim=c(0,600)) 
+expand_limits(x=c(0,600),y=c(0,600)) 
+geom_path() 

, который выглядит следующим образом: enter image description here

Здесь есть регионы "wihtout" оценка плотности, но с фактическими данными (около й: 100, Y: 550).

Кто-то задал соответствующий вопрос:
Create heatmap with distribution of attribute values in R (not density heatmap)
но нет удовлетворительных ответов можно найти.

Так что мой вопрос будет (i) Почему? и (ii) Как избежать/настроить, если это возможно?

ответ

0

Это может быть полезно. Я не знаком с stat_density2d. После просмотра кода и документов ggplot (http://docs.ggplot2.org/0.9.2.1/stat_density2d.html) я подумал, что ..level.. может и не быть. Тогда я попробовал ..density.. Кто-то сможет объяснить, почему вам нужна плотность, пока я думаю, что это тот график, который вы хотели.

ggplot(data = df, aes(x = x, y = y)) + 
stat_density2d(geom="tile", aes(fill = ..density..), contour = FALSE) + 
geom_path() + 
coord_equal(xlim=c(0,600),ylim=c(0,600)) + 
expand_limits(x=c(0,600),y=c(0,600)) 

enter image description here

+0

Благодарим Вас за ответ jazzurro (и благодаря Hong Ooi для загрузки на fiugures, я думаю)! Некоторое время назад (я уже потратил на это некоторое время) я уже пробовал «..плотность», но это оказалось разочаровывающим, поскольку весь сюжет окрашен оценкой. Однако, вдохновленный вашим ответом, я добавил «scale_fill_gradientn (colors = c (« transparent »,« darkblue »,« cyan »), na.value =« transparent »), что приводит к чему-то, с чем я могу жить пока;) –

+0

@QA Рад слышать, что это вам помогло. Сейчас я проверю вашу идею. :) – jazzurro

Смежные вопросы