2017-06-20 5 views
0

Ich möchte die Verteilung mehrerer Variablen (hier X1 und X2) mit einem einzigen Wert (hier bm) vergleichen. Das Problem ist, dass diese Variablen zu viele (etwa ein Dutzend) sind, um einen einzelnen Boxplot zu verwenden. enter image description hereVergleichen Boxplots mit einem einzigen Wert

Zusätzlich sind die Ebenen zu unterschiedlich, um ein Diagramm zu verwenden. Ich brauche Facetten zu nutzen, um die Dinge besser organisiert: enter image description here

jedoch mit diesem Grundstück meine Benchmark Kategorie (bm), die in X1 und X2 ein einzelner Wert ist, erscheint nicht in X1 und scheint mehrere Werte in X2 haben . Ich möchte, dass es nur diese grüne Linie ist, die es in der ersten Handlung ist. Irgendwelche Ideen, warum es sich ändert? Gibt es eine gute Problemumgehung? Ich habe versucht, die Optionen facet_wrap/facet_grid, aber nichts lieferte das richtige Ergebnis.

Ich habe auch versucht, ein Bar-Plot mit bm und drei leere Kategorien mit dem Boxplot zu kombinieren. Aber erstens sah es furchtbar aus und zweitens wurde es in der Facettierung ähnlich vermasselt. Grundsätzlich würde jede Arbeit helfen.

Unter dem Code, um das Minimalbeispiel erstellen angezeigt hier:

# Creating some sample data & loading libraries 
library(ggplot2) 
library(RColorBrewer) 
set.seed(10111) 
x=matrix(rnorm(40),20,2) 
y=rep(c(-1,1),c(10,10)) 
x[y==1,]=x[y==1,]+1 
x[,2]=x[,2]+20 
df=data.frame(x,y) 

# creating a benchmark point 
benchmark=data.frame(y=rep("bm",2),key=c("X1","X2"),value=c(-0.216936,20.526312)) 
# melting the data frame, rbinding it with the benchmark 
test_dat=rbind(tidyr::gather(df,key,value,-y),benchmark) 

# Creating a plot 
p_box <- ggplot(data = test_dat, aes(x=key, y=value,color=as.factor(test_dat$y))) + 
    geom_boxplot() + scale_color_manual(name="Cluster",values=brewer.pal(8,"Set1")) 

# The first line delivers the first plot, the second line the second plot 
p_box 
p_box + facet_wrap(~key,scales = "free",drop = FALSE) + theme(legend.position = "bottom") 
+0

_ "wird vermasselt" _: bitte sei explizit darüber, was du nicht magst und was du stattdessen willst. Außerdem würde die Lesbarkeit Ihres Codes durch konsistente Abstände wirklich verbessert werden. – Axeman

+0

Danke. Ich habe die Frage bearbeitet. Wird den Code jetzt auch bearbeiten. Obwohl ich nicht sicher bin, was Sie mit konsistentem Abstand meinen. – 5th

Antwort

1

Das Problem nur int die Verwendung von test_dat$y in der Farbe liegt aes. Verwenden Sie nie $ in aes, ggplot wird durcheinander bringen.

Wie auch immer, ich glaube, Sie Plot verbessern würde, wenn Sie eine geom_hline für die Benchmark verwenden, statt in einem einzigen Wert boxplot Hacking:

library(ggplot2) 
library(RColorBrewer) 

ggplot(tidyr::gather(df,key,value,-y)) + 
    geom_boxplot(aes(x=key, y=value, color=as.factor(y))) + 
    geom_hline(data = benchmark, aes(yintercept = value), color = '#4DAF4A', size = 1) + 
    scale_color_manual(name="Cluster",values=brewer.pal(8,"Set1")) + 
    facet_wrap(~key,scales = "free",drop = FALSE) + 
    theme(legend.position = "bottom") 

+0

Kühl. Danke vielmals. Ich kannte nicht einmal "geom_hline". Grundsätzlich hat das Speichern einer Codezeile mich in Schwierigkeiten gebracht. Hinweis für andere Leute, die ähnliche Probleme mit 'facet' haben: Mit' test_dat [, "y"] 'vermasselt auch die Facetten und wahrscheinlich' ggplot' auch wenn ich @GGamba richtig verstehe. – 5th

+0

ggplot verwendet etwas namens ['non standard evaluation'] (http://adv-r.had.co.nz/Computing-on-the-language.html), wo es "automatisch" Argumente als Spaltennamen interpretieren würde eigenständige Objekte (das ist eine Vereinfachung von c). Abweichungen von dieser Norm verursachen Probleme – GGamba

Verwandte Themen