2016-05-27 5 views
2

Ich versuche, eine Likertskala graphische Darstellung ähnlich einer plotten hier: http://www.r-bloggers.com/plotting-likert-scales/Indizes in ylim von likert Grundstück

Verwenden Sie den Anweisungen auf den Link oben, ich war in der Lage, es zu zeichnen. Ich möchte jedoch bestimmten Text (d. H. Indizes) auf der y-Achse anzeigen.

Ich muss sie wie a_[1x] b_[2x] c_[3x] plotten, wo ich 3 verschiedene Zeichen (a, b und c) habe, die jeweils die Indizes 1x, 2x und 3x anzeigen.

Zuerst habe ich versucht, dies:

ylim= c("a_1x","b_2x","c_3x") 

Dies funktioniert gut, aber die Indizes in der y-Achse nicht angezeigt werden. Ich brauche eigentlich sie zu zeichnen wie a_[1x] b_[2x] c_[3x]

Ich habe auch schon versucht, diese:

ylim= c(expression('a'[1x]),expression('b'[2x]),expression('c'[3x])) 

Aber dies erzeugt die folgenden Fehler, wenn ich versuche, es zu zeichnen.

Error in diff(range(as.numeric(limits))) : 
    (list) object cannot be coerced to type 'double' 

Dies ist der Code, der den Likert-Plot generiert.

likert(sgbar.likert, 
     ylim = yLabels, ## Here yLabels need to contain expression somehow? 
     xlab="Percentage", 
     main="Example Diverging Stacked Bar Chart for Likert Scale", 
     BrewerPaletteName="Blues", 
     sub="Likert Scale") 

Edit:

Hier ist der vollständige Code, wenn euch die Ausgabe und den Test reproduzieren wollen:

set.seed(1234) 
library(e1071) 
probs <- cbind(c(.4,.2/3,.2/3,.2/3,.4),c(.1/4,.1/4,.9,.1/4,.1/4),c(.2,.2,.2,.2,.2)) 
my.n <- 100 
my.len <- ncol(probs)*my.n 
raw <- matrix(NA,nrow=my.len,ncol=2) 
raw <- NULL 
for(i in 1:ncol(probs)){ 
raw <- rbind(raw, cbind(i,rdiscrete(my.n,probs=probs[,i],values=1:5))) 
} 

r <- data.frame(cbind(
as.numeric(row.names(tapply(raw[,2], raw[,1], mean))), 
tapply(raw[,2], raw[,1], mean), 
tapply(raw[,2], raw[,1], mean) + sqrt(tapply(raw[,2], raw[,1], var)/tapply(raw[,2], raw[,1], length)) * qnorm(1-.05/2,0,1), 
tapply(raw[,2], raw[,1], mean) - sqrt(tapply(raw[,2], raw[,1], var)/tapply(raw[,2], raw[,1], length)) * qnorm(1-.05/2,0,1) 
)) 
names(r) <- c("group","mean","ll","ul") 

gbar <- tapply(raw[,2], list(raw[,2], raw[,1]), length) 

sgbar <- data.frame(cbind(c(1:max(unique(raw[,1]))),t(gbar))) 

sgbar.likert<- sgbar[,2:6] 


require(grid) 
require(lattice) 
require(latticeExtra) 
require(HH) 
sgbar.likert<- sgbar[,2:6] 

yLabels = c("a_1x","b_2x","c_3x") # this works fine but it does not show expressions. 
#yLabels = c(expression(a[1*x]),expression(b[2*x]),expression(c[3*x])) # this causes the error above 

likert(sgbar.likert, 
     ylim = yLabels, ## Here yLabels need to contain expression somehow? 
     xlab="Percentage", 
     main="Example Diverging Stacked Bar Chart for Likert Scale", 
     BrewerPaletteName="Blues", 
     sub="Likert Scale") 

Die Handlung wie folgt aussieht:

enter image description here

Antwort

1

Dies ist, wie ggplot tut es in der Regel:

library(ggplot2) 
qplot(S.ID, data = df) + scale_x_discrete(labels = c(expression(a[1*x]),expression(b[2*x]),expression(c[3*x]))) 

enter image description here

EDIT: Sorry, dass ich nicht vor einem genaueren Blick habe, aber da das likert Grundstück lattice statt ggplot2 verwendet, die Die Änderung der Tick-Labels unterscheidet sich von dem, was ich oben angegeben habe.

Aber wieder ist ylim nicht die richtige Möglichkeit, das Etikett zu ändern. Es kann tatsächlich Zeichenvektor annehmen, fand ich heraus, aber es kann den Ausdruck nicht auswerten.

Sie sollten also scales verwenden, was das allgemeine Argument ist, um zu bestimmen, wie die Achse gezeichnet wird (einschließlich Grenzwert, Ticks, Beschriftungen) und die entsprechende Komponente für die y-Achse festzulegen.

yLabels = c(expression(a[1*x]),expression(b[2*x]),expression(c[3*x])) 
likert(sgbar.likert, 
     scales = list(y = list(labels = yLabels)), 
     xlab="Percentage", 
     main="Example Diverging Stacked Bar Chart for Likert Scale", 
     BrewerPaletteName="Blues", 
     sub="Likert Scale") 

enter image description here

Seite Anmerkung: Danke für die Frage zu bearbeiten. Es gab mir eine klarere Vorstellung von dem wirklichen Problem und es war einfacher, die Lösung zu finden. Wie immer ist das Bereitstellen eines reproduzierbaren Beispiels der beste Weg, um eine Frage zu stellen und eine Antwort zu erhalten.

+0

Vielen Dank für Ihre Antwort, aber ich bin mir nicht sicher über Ihren Vorschlag. Soll ich "+ scale_y_discrete (labels = c (Ausdruck (a [1 * x]), Ausdruck (b [2 * x]), Ausdruck (c [3 * x])))" nach likert oder etwas anderem hinzufügen? Wenn ich versuche "ylim = c (Ausdruck (a [1 * x]), Ausdruck (b [2 * x]), Ausdruck (c [3 * x]))", Es hat nicht funktioniert, der gleiche Fehler wurde erzeugt nochmal: Fehler im diff (Bereich (as.numeric (limits))): (list) -Objekt kann nicht gezwungen werden, 'double' einzugeben. Außerdem, wenn ich "ylim = c (" a_1x "," b_2x "," c_3x ") verwende", funktioniert es gut, aber es zeigt die Ausdrücke nicht. –

+0

Vielen Dank! Ihre Lösung hat gut funktioniert! –

+0

Ich schätze für Ihre Hilfe. Ich habe mich gefragt, ob es eine Möglichkeit gibt, den Prozentsatz in der Handlung anzuzeigen? Genau wie dieser: https://strengejacke.files.wordpress.com/2013/07/sjplotlikert2.png –