2016-05-05 13 views
1

ich zur Zeit auf einem sehr einfachen data.frame arbeiten, mit drei Spalten:3-Variablen Heatmap ggplot2 Plotten

x enthält x-Koordinaten eines Satzes von Punkten,

y enthält y-Koordinaten des Satz von Punkten und

weight enthält einen Wert für jeden Punkt;

Jetzt in ggplot2 arbeiten Ich scheinen in der Lage, Kontur Ebenen für diese Daten zu plotten, aber ich kann nicht einen Weg finden, um das Diagramm nach der Variablen weight zu füllen. Hier ist der Code, den ich verwendet habe:

ggplot(df, aes(x,y, fill=weight)) + 
    geom_density_2d() + 
    coord_fixed(ratio = 1) 

Sie können sehen, dass es überhaupt keine Füllung gibt, leider. Ich habe jetzt seit drei Tagen versucht, und ich fange an, deprimiert zu werden.

Angabe fill=weight und/oder color = weight in der allgemeinen ggplot Aufruf, führte zu nichts. Ich habe versucht, verschiedene Geome (Kachel, Raster, Polygon ...) zu verwenden, immer noch nichts. Versucht, die aes direkt in die Geom-Layer anzugeben, hat auch nicht funktioniert. Versucht, das Objekt als PPP zu konvertieren, aber ggplot kann nicht mit ihnen umgehen, und auch die Verwendung von Base-R-Plotten hat nicht funktioniert. Ich habe ehrlich gesagt keine Ahnung von was falsch ist! Ich Anbringen der ersten 10 Punkte Daten, die auf einem unregelmäßigen Gitter beabstandet ist:

x = c(-0.13397460,-0.31698730,-0.13397460,0.13397460,-0.28867513,-0.13397460,-0.31698730,-0.13397460,-0.28867513,-0.26794919) 

y = c(-0.5000000,-0.6830127,-0.5000000,-0.2320508,-0.6547005,-0.5000000,-0.6830127,-0.5000000,-0.6547005,0.0000000) 

weight = c(4.799250e-01,5.500250e-01,4.799250e-01,-2.130287e+12,5.798250e-01,4.799250e-01,5.500250e-01,4.799250e-01,5.798250e-01,6.618956e-01) 

Jede beraten? Der gewünschte Ausgang würde etwas in diese Richtung sein:

click

Vielen Dank im Voraus.

+1

Es klingt wie Sie eine Dichteplot missbräuchlich. Dichte-Plots sollen die zugrundeliegenden Wahrscheinlichkeitsdichtefunktionen schätzen (eine Funktion, die sich über den Probenraum in 1 integriert). Vielleicht klingt es so, als ob Sie eine Art Interpolation wünschen, um Funktionswerte über eine Oberfläche zu verteilen. In diesem Fall müssten Sie jedoch eine Form der statistischen Modellierung für die Interpolation wählen. – MrFlick

+0

Haben Sie versucht, die Funktion 'filled.contour' zu betrachten? Sie müssten zuerst Ihre Daten mit etwas wie 'library (akima)' 'int.ds <- interp (df $ x, df $ y, df $ gewicht, duplikat =" strip ")' interpolieren. Dann könntest du etwas in der Art von 'fill.contour (int.ds)' tun –

Antwort

1

Von Ihrer Beschreibung geom_density klingt nicht richtig.

Sie könnten geom_raster versuchen:

ggplot(df, aes(x,y, fill = weight)) + 
    geom_raster() + 
    coord_fixed(ratio = 1) + 
    scale_fill_gradientn(colours = rev(rainbow(7)) # colourmap 
1

Hier ist eine zweitbeste fill=..level.. verwenden. There is a good explanation on ..level.. here.

# load libraries 
    library(ggplot2) 
    library(RColorBrewer) 
    library(ggthemes) 

# build your data.frame 
df <- data.frame(x=x, y=y, weight=weight) 

# build color Palette 
    myPalette <- colorRampPalette(rev(brewer.pal(11, "Spectral")), space="Lab") 


# Plot 
    ggplot(df, aes(x,y, fill=..level..)) + 
     stat_density_2d(bins=11, geom = "polygon") + 
     scale_fill_gradientn(colours = myPalette(11)) + 
     theme_minimal() + 
     coord_fixed(ratio = 1) 

enter image description here

+0

Dies verwendet keine Gewichte. – Axeman

+0

Hallo @Axeman, du hast Recht. Meine Antwort verwendet nicht "fill = weights", deshalb habe ich gesagt, dass es "zweitbeste" ist. Soweit mir bekannt ist, ist es nicht möglich, einen Datenvektor in 'stat_density_2d' auf' fill' zu übergeben. Ein bisschen Erklärung in der [Link] (http://stackoverflow.com/questions/32206623/what-does-level-mean-in-gplplotstat-density2d/32207207?noredirect = 1 # comment57518193_32207207) Ich habe mit meiner Antwort gepostet. –