2016-05-12 2 views
0

Ich versuche, eine Art von Farbdichte Plot ähnlich die hier zu bauen:Wärme Farbdichten in R

https://stats.stackexchange.com/questions/26676/generating-visually-appealing-density-heat-maps-in-r

Aber mit verschiedenen Arten von Daten, die in es geht. Meine realen Daten haben eine Reihe von Zeilen, aber zum Beispiel habe ich Code, der in einen Datenrahmen gesetzt wird, der X, Y, Score ist und ich möchte ein Farbdichtediagramm mit diesen statischen X, Y-Buckets haben. Ist das möglich?

X=seq(0,10,by=1) 
Y=seq(50,60,by=1) 
total=expand.grid(X,Y) 
nrow(total) 
total$score=runif(nrow(total), min=0, max=100) 
range(total$score) 
head(total) 

my_palette <- colorRampPalette(c("blue", "yellow", "red"))(n = 100) 
col_breaks = c(seq(0,100,length=100)) 
col=data.frame(as.character(my_palette),col_breaks) 
col$num=row.names(col) 
head(col) 
col$col_breaks=round(col$col_breaks,0) 
names(col)[1]="hex" 

total$round=round(total$score) 
total$color=as.character(col$hex[match(total$round,col$col_breaks)]) 

plot(total$Var1,total$Var2,col=total$color,xlim=c(0,10),ylim=c(50,60)) 

ich nicht in Kisten hexbin oder etwas beschränken versuche, dass bedingten rect mit heraus() mit Farben, aber mit dieser Art von Daten fragen, ob es ein Weg für sie eine Art mehr von a sein rieselfähigen Form von Wärme ähnlich wie diese:

a busy cat

Oder braucht es kontinuierlich Daten zu tun, so etwas zu sein?

Antwort

1

Wenn ich Ihre Frage richtig verstehe, denke ich, dass Sie dies in ggplot tun können.

Grundsätzlich können Sie geom_raster verwenden, um die Kacheln mit einer interpolieren Option auszufüllen, so dass es nicht "blocky" aussieht. Sie können den Farbverlauf dann auf das einstellen, was Sie möchten. Auf der Grundlage der Beispieldaten, die Sie mir gegeben haben, habe ich zum Beispiel die niedrigen, mittleren und hohen Farben auf Blau, Weiß und Rot eingestellt. Es würde einfach sein, den folgenden Code:

library(ggplot2) 

ggplot(total, aes(x=Var1, y=Var2)) + 
    geom_raster(aes(fill=score), interpolate=TRUE) + 
    scale_fill_gradient2(limits=c(0,100), low="blue", mid="white", high="red", midpoint = 50) 

Ausgang:

enter image description here

+0

Das ist genial! Vielen Dank! – BaseballR