2017-11-20 13 views
1

Ich habe eine Frage über die Anwendung von ggplot Farbskala Farbverlauf. Ich habe Datensatz, wo die Antwortvariable eine kontinuierliche Variable ist, die sowohl positive als auch negative Zahlen enthält, und die unabhängige Variable ist eine Anzahl von unabhängigen Standorten. Ich versuche, die Daten so zu plotten, dass ich alle Daten im Hintergrund darstellen und dann einen Farbskalengradienten auf die Antwortdaten anwenden kann, die den negativen Bereich der Daten abdecken. Dies ist, was ich bisher mit einem Beispieldatensatz habe, der die Struktur meines tatsächlichen Datensatzes nachahmt.anwenden ggplot Farbskala Farbverlauf auf einen Teil der Daten

tr_sim <- data.frame(site_id = seq(1,100,1), estimated_impact = 
    rnorm(100,18,200), impact_group = rep(c(1,2),each = 50)) 

    rng_full <- range(tr_sim$estimated_impact) 
    #produce plot showing the full range of impacts across all sites and then 
    over the subsetted sites 

    impact_plot_full <- ggplot(data = tr_sim, aes(x = factor(site_id, levels = 
    site_id[order(estimated_impact)]), y = estimated_impact)) + 
    geom_bar(stat = "identity",width = 1, fill = "grey80") 

    impact_plot_full 

    impact_plot_full + 
    geom_bar(stat = "identity", width = 1, position = "stack", aes(y = 
    estimated_impact[impact_group == 1])) + 
    scale_fill_gradient2(low="firebrick", mid="yellow", high = "green4") + 
    labs(y = "Estimated Impact ($/week)", x = "Total number of sites with estimate 
    is 100", title = "Sites with the greatest impact after coverage loss") + 
    theme(axis.text.x = element_blank()) + 
    scale_y_continuous(breaks = 
    round(seq(rng_full[1],rng_full[2],by=100),digits=0)) 

kann ich alle Daten im Hintergrund in grau plotten und ich bin versucht, den negativen Bereich der Antwortdaten auf diesem zu zeichnen. Ich bekomme den Fehler, dass 'Ästhetik entweder die Länge 1 oder die gleiche wie die Daten (100), y, x' sein muss. Ich weiß, dass dies auftritt, weil die negativen Daten nicht die gleiche Länge wie der gesamte Datensatz haben, aber ich kann keinen Weg finden, dies zu tun. Irgendwelche Vorschläge würden sehr geschätzt werden.

Danke, Curtis

Antwort

0

Sie müssen die Daten der Teilmenge und fill im aes() für geom_bar verwenden.

impact_plot_full + 
geom_bar(data = subset(tr_sim, estimated_impact < 0), 
     stat = "identity", 
     aes(y = estimated_impact, fill = estimated_impact)) + 
scale_fill_gradient2(low = "firebrick", mid = "yellow", high = 
"green4") + 
theme(axis.text.x = element_blank()) + 
xlab("site_id") 

enter image description here

Hoffnung ist das, was Sie suchen.

+0

danke @ M.A., Funktioniert jetzt super. Ich habe versucht, +1 für Ihre Antwort zu geben, aber mein Rep-Score ist zu niedrig – Curtis

Verwandte Themen