的ylim我試圖繪製類似於一個在這裏李克特量表情節:http://www.r-bloggers.com/plotting-likert-scales/下標李克特情節
使用說明在上面的鏈接,我能夠繪製。但是,我想在y軸上顯示某些文本(即下標)。
我需要將它們繪製爲a_[1x] b_[2x] c_[3x]
,其中我有3個不同的字符(a,b和c)分別顯示下標1x,2x和3x。
首先,我已經試過這樣:
ylim= c("a_1x","b_2x","c_3x")
這工作得很好,但在y軸標不會出現。我真的需要繪製他們像a_[1x] b_[2x] c_[3x]
我也試過這樣:
ylim= c(expression('a'[1x]),expression('b'[2x]),expression('c'[3x]))
但是,當我嘗試繪製它這將產生以下錯誤。
Error in diff(range(as.numeric(limits))) :
(list) object cannot be coerced to type 'double'
這是生成likert圖的代碼。
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")
編輯:
下面是完整的代碼,如果你們要重現該問題,並測試:
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")
情節是這樣的:
感謝您的回覆,但我不確定您的建議。我應該在likert還是別的之後加上「+ scale_y_discrete(labels = c(expression(a [1 * x]),expression(b [2 * x]),expression(c [3 * x])))」當我嘗試「ylim = c(表達式(a [1 * x]),表達式(b [2 * x]),表達式(c [3 * x]))」時,它不起作用,產生相同的錯誤再次:差異錯誤(範圍(as.numeric(限制))): (列表)對象不能被強制鍵入'雙'。另外,如果我使用「ylim = c(」a_1x「,」b_2x「,」c_3x「)」,它可以正常工作,但不會顯示錶達式。 –
非常感謝!你的解決方案運作良好 –
我很感謝您的幫助。我想知道是否有方法顯示百分比的情節?就像這樣:https://strengejacke.files.wordpress.com/2013/07/sjplotlikert2.png –