2014-07-19 7 views
5
v <- 2^(7:17) 
min_lon <- 6.164780 
max_lon <- 15.744857 
min_lat <- 47.228296 
max_lat <- 54.426407 
center_lon <- (min_lon + max_lon)/2 
center_lat <- (min_lat + max_lat)/2 

df <- data.frame(id = 1:sum(v)) 
df$T <- rep(paste("T", v, sep="_"), v) 
df$lon <- runif(sum(v),min_lon, max_lon) 
df$lat <- runif(sum(v),min_lat,max_lat) 

पारदर्शिता = .. स्तर के साथ एक हीटमैप बनाना ..हीटमैप पारदर्शिता, रंग और विशिष्टता संतोषजनक नहीं

gg_heatmap <- function(T){ 
    g <- ggmap(get_map(location=c(lat=center_lat, lon=center_lon), zoom=6, maptype="roadmap", source="google")) 
    g <- g + scale_fill_gradientn(colours=rev(rainbow(100, start=0, end=0.75))) 
    g <- g + stat_density2d(data=df[df$T == "T_1024",], aes(x = lon, y = lat,fill = ..level..,transparency=..level..), 
          size=1, bins=100, geom = 'polygon') 
    print(g) 
} 

system.time(gg_heatmap("T_1024")) 

enter image description here

की स्थापना अल्फा द्वारा एक हीटमैप बनाना = .05

gg_heatmap <- function(T){ 
    g <- ggmap(get_map(location=c(lat=center_lat, lon=center_lon), zoom=6, maptype="roadmap", source="google")) 
    g <- g + scale_fill_gradientn(colours=rev(rainbow(100, start=0, end=0.75))) 
    g <- g + stat_density2d(data=df[df$T == "T_1024",], aes(x = lon, y = lat,fill = ..level..), alpha=.05, 
          size=1, bins=100, geom = 'polygon') 
    print(g) 
} 

system.time(gg_heatmap("T_1024")) 

enter image description here

दोनों परिणाम संतोषजनक नहीं हैं। मैं QlikView के साथ किए गए निम्न हीटमैप की तरह कुछ और एक ही डेटा सेट "T_1024" का उपयोग करना पसंद करूंगा।

enter image description here

तीन पहलुओं मैं QV-संस्करण के बारे में पसंद करते हैं के होते हैं:

  1. पारदर्शिता अभी भी मानचित्र के नीचे देखने के लिए अनुमति देता है ...
  2. ... जबकि रंग अभी भी अभिव्यक्तिपूर्ण हैं और पीले
  3. रंग अधिक जानकारी इंडेंट करने की अनुमति देता है

मैंने अल्फा स्तर को स्थिर रूप से और साथ ही सापेक्ष के साथ सेट करने के विभिन्न तरीकों के साथ प्रयोग करके (1) से निपटने की कोशिश की .. मुझे अभी भी अच्छे नतीजे नहीं मिल पाए। पारदर्शिता कभी भी वास्तव में अच्छी नहीं होती है और यदि मैं मानचित्र को रंगों को बहुत पीला देखता हूं।

(3) मैंने सोचा कि मैं उच्च बिन मान सेट करके प्रभावित कर सकता हूं।

कोई भी विचार कैसे हीटमैप प्रतिपादन या इसके बारे में कम से कम पहलुओं का अनुकूलन के लिए?

+0

'पारदर्शिता '' stat_density2d (...) 'के लिए एक वैध तर्क है ?? आप 'अल्फा = .. स्तर..' का उपयोग क्यों नहीं कर रहे हैं? – jlhoward

उत्तर

7

नोट: इस सवाल का जवाब की बुनियादी संरचना के लिए this post को ऋण।

यह एक हीटमैप जिसमें आकृति स्पष्ट रूप से प्रतिष्ठित हैं पैदा करता है, और नीचे नक्शा दिख रहा है। आपके कोड में मुख्य अंतर हैं:

  1. size=... और bins=... तर्क हटा दिए गए। size की आवश्यकता नहीं है (यह यहां कुछ भी नहीं करता है)।
  2. transparency=..levels.. (वह क्या है ??) alpha=..levels.. के साथ बदलें।
  3. scale_alpha_continuous(...) जोड़ें, अल्फा में सीमा सीमा निर्धारित करें और अल्फा मार्गदर्शिका बंद करें।

library(ggplot2) 
library(ggmap) 
gg_heatmap <- function(){ 
    g <- ggmap(get_map(location=c(lat=center_lat, lon=center_lon), zoom=6, maptype="roadmap", source="google")) 
    g <- g + scale_fill_gradientn(colours=rev(rainbow(100, start=0, end=0.75))) 
    g <- g + stat_density2d(data=df[df$T == "T_1024",], aes(x = lon, y = lat,fill = ..level..,alpha=..level..), 
          geom = 'polygon') 
    g <- g + scale_alpha_continuous(guide="none",range=c(0,.4)) 
    print(g) 
} 
gg_heatmap() 

ध्यान दें कि मैं set.seed(1) से पहले उपयोग किया एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण के लिए df बनाने के लिए। आपको यह जोड़ना होगा कि यदि आप एक ही साजिश चाहते हैं।

EDIT ओपी की टिप्पणी का जवाब।

stat_density2d(...) समोच्चों को परिभाषित करके और उन्हें भरने के लिए भरे बहुभुज ड्राइंग करके काम करता है, इसलिए परिभाषा के अनुसार समोच्च "edgy" होंगे। यदि आप समोच्चों को अस्पष्ट करना चाहते हैं, तो आपको शायद एक टाइलिंग दृष्टिकोण का उपयोग करना होगा। दुर्भाग्य से, इस ggplot के बाहर 2 डी kernal घनत्व अनुमानों की गणना की आवश्यकता है:

gg_heatmap <- function(T){ 
    require(MASS) 
    require(ggplot2) 
    require(ggmap) 
    d <- with(df[df$T==T,], kde2d(lon,lat,h=c(1.5,1.5),n=100)) 
    d.df <- expand.grid(lon=d[[1]],lat=d[[2]]) 
    d.df$z <- as.vector(d$z) 
    g <- ggmap(get_map(location=c(lat=center_lat, lon=center_lon), zoom=6, maptype="roadmap", source="google")) 
    g <- g + scale_fill_gradientn(colours=rev(rainbow(100, start=0, end=0.75))) 
    g <- g + geom_tile(data=d.df, aes(x=lon,y=lat,fill=z),alpha=.8) 
    print(g) 
} 
gg_heatmap("T_1024") 

डेटा दृश्य के दृष्टिकोण से, इस साजिश साफ़ तौर पर पहले एक से हीन है। चाहे वह "सुंदर" है या नहीं, राय का विषय है।

+0

आपकी अंतर्दृष्टि के लिए बहुत बहुत धन्यवाद। फिर भी सभी उचित सम्मान के साथ, महोदय, आपका हीटमैप बहुत बदसूरत दिखता है :) कुछ अच्छा लग रहा है मेरे प्रश्न के लिए केंद्रीय है। कम से कम मैं नक्शा देख सकता हूं - लेकिन मुझे समोच्चों की ताकत पसंद नहीं है। – Raffael

+0

यह निश्चित रूप से * सुंदर * नहीं है जिसे आप "सुंदर" ढूंढने के लिए अपना लक्ष्य बनाते हैं। लक्ष्य एक विज़ुअलाइजेशन बनाना चाहिए जो डेटासेट में सूचना सामग्री को स्पष्ट रूप से व्यक्त करता हो। मेरे संपादन देखें। – jlhoward

+0

अच्छी तरह से - लेकिन दिया गया है कि एक हीटमैप एक वास्तविक मूल्यवान चिकनी फ़ंक्शन (घनत्व) का दृश्यता है, न कि रंगीन रंग सिर्फ सुंदर दिखता है, यह गणितीय रूप से अधिक सटीक भी है। लेकिन स्पष्टीकरण के लिए धन्यवाद कि क्यों बहुभुज-ज्यामिति का उपयोग करना एक और अधिक परिणाम देने के लिए होता है। लेकिन दूसरी और सुंदर दृष्टिकोण डेटा से कम क्यों है परिप्रेक्ष्य में मैं अभी भी सीखने के लिए उत्सुक हूं। – Raffael

संबंधित मुद्दे