Das Ziel ist, so etwas wie zu bauen http://rentheatmap.com/sanfrancisco.htmlGeographische Heatmap einer benutzerdefinierten Eigenschaft in R mit ggmap
Ich habe Karte mit ggmap und in der Lage Punkte oben drauf plotten.
library('ggmap')
map <- get_map(location=c(lon=20.46667, lat=44.81667), zoom=12, maptype='roadmap', color='bw')
positions <- data.frame(lon=rnorm(100, mean=20.46667, sd=0.05), lat=rnorm(100, mean=44.81667, sd=0.05), price=rnorm(10, mean=1000, sd=300))
ggmap(map) + geom_point(data=positions, mapping=aes(lon, lat)) + stat_density2d(data=positions, mapping=aes(x=lon, y=lat, fill=..level..), geom="polygon", alpha=0.3)
Dies ist ein schönes Bild auf Dichte basiert. Weiß jemand, wie man etwas macht, das gleich aussieht, aber die Position $ property verwendet, um Konturen und Skalierungen zu erstellen?
Ich schaute gründlich durch stackoverflow.com und fand keine Lösung.
EDIT 1
positions$price_cuts <- cut(positions$price, breaks=5)
ggmap(map) + stat_density2d(data=positions, mapping=aes(x=lon, y=lat, fill=price_cuts), alpha=0.3, geom="polygon")
Ergebnisse in fünf unabhängigen stat_density Stellplätze:
EDIT 2 (von hrbrmstr)
positions <- data.frame(lon=rnorm(10000, mean=20.46667, sd=0.05), lat=rnorm(10000, mean=44.81667, sd=0.05), price=rnorm(10, mean=1000, sd=300))
positions$price <- ((20.46667 - positions$lon)^2 + (44.81667 - positions$lat)^2)^0.5 * 10000
positions <- data.frame(lon=rnorm(10000, mean=20.46667, sd=0.05), lat=rnorm(10000, mean=44.81667, sd=0.05))
positions$price <- ((20.46667 - positions$lon)^2 + (44.81667 - positions$lat)^2)^0.5 * 10000
positions <- subset(positions, price < 1000)
positions$price_cuts <- cut(positions$price, breaks=5)
ggmap(map) + geom_hex(data=positions, aes(fill=price_cuts), alpha=0.3)
Ergebnisse in:
Es schafft ein anständiges Bild auf echten Daten. Dies ist das bisher beste Ergebnis. Weitere Vorschläge sind willkommen.
EDIT 3: Hier Testdaten und Ergebnisse eines Verfahrens oben:
https://raw.githubusercontent.com/artem-fedosov/share/master/kernel_smoothing_ggplot.csv
test<-read.csv('test.csv')
ggplot(data=test, aes(lon, lat, fill=price_cuts)) + stat_bin2d(, alpha=0.7) + geom_point() + scale_fill_brewer(palette="Blues")
Ich glaube, dass es einige Verfahren, die andere verwendet als Dichte Kernel, um richtige Polygone zu berechnen. Es scheint, dass das Feature in ggplot out of the box sein sollte, aber ich kann es nicht finden.
EDIT 4: Ich schätze Sie Zeit und Mühe, um die richtige Lösung für diese scheinbar nicht zu komplizierte Frage zu finden. Ich habe beide Antworten als gute Annäherung an das Ziel gewählt.
Ich habe ein Problem aufgedeckt: Die Daten mit Kreisen sind zu künstlich und die Ansätze funktionieren auf Lesendaten nicht so gut.
Paul Ansatz gab mir die Handlung:
Es scheint, dass es Muster der Daten erfasst, die kühl ist.
jazzurro des approage hat mir dieses Grundstück:
es auch die Muster bekam. Beide Plots scheinen jedoch nicht so schön zu sein wie das standardmäßige plot stat_density2d. Ich werde noch ein paar Tage warten, um zu sehen, ob eine andere Lösung auftauchen wird.Wenn nicht, werde ich das Bounty an Jazzurro vergeben, da dies das Ergebnis sein wird, das ich verwenden werde.
Es gibt eine offene Python + google_maps Version des erforderlichen Codes. Vielleicht wird jemand hier Inspiration finden: https://github.com/jeffkaufman/apartment_prices
Haben Sie versucht, etwas wie 'Positionen $ Preisabschneidungen <- Schnitt (Positionen $ Preis, Brüche = 5)' und dann 'price_cuts' statt von '..level..' für die Füllung? – hrbrmstr
Ich habe es versucht. Es erzeugt 5 unabhängige Ebenen mit Gradientenskalen :( –
'geom_hex (Daten = Positionen, aes (fill = price_cuts), Alpha = 0.3)' könnte Ihnen näher bringen, was Sie suchen (mit einigen Farboptimierungen) – hrbrmstr