我试图绘制一个类似于这里的http://www.r-bloggers.com/plotting-likert-scales/的likert比例尺图
使用上述链接的说明,我能够绘制它。但是,我希望在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")这个情节如下所示:

发布于 2016-05-27 07:30:45
ggplot通常是这样做的:
library(ggplot2)
qplot(S.ID, data = df) + scale_x_discrete(labels = c(expression(a[1*x]),expression(b[2*x]),expression(c[3*x])))

编辑:很抱歉,我之前没有仔细看过,但是由于likert绘图使用lattice而不是ggplot2,所以滴答标签的修改方法与我上面给您的不同。
但是,ylim并不是修改标签的正确方法。我发现它实际上可以接受字符向量,但它不能计算表达式。
因此,您应该使用scales,这是确定轴如何绘制(包括限制、刻度、标签)的一般参数,并为y轴设置适当的组件。
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")

边注:谢谢你编辑这个问题。它使我对真正的问题有了更清晰的认识,更容易找到解决办法。和往常一样,提供可重复的例子是问问题和得到答案的最好方法。
https://stackoverflow.com/questions/37475578
复制相似问题