重复格点图上的类别(R中的likert函数)

时间:2014-02-19 10:12:38

标签: r lattice

我是新手R用户,我正在尝试使用HH包中的likert函数创建一个情节。我的问题似乎来自重复类别标签。更容易显示问题:

    library(HH)

    responses <- data.frame( Subtable= c(rep('Var1',5),rep('Var2',4),rep('Var3',3)),
    Question=c('very low','low','average','high','very high', '<12', '12-14', '15+',
    'missing', '<25','25+','missing'), Res1=as.numeric(c(0.05, 0.19, 0.38, 0.24, .07,
    0.09, 0.73, 0.17, 0.02, 0.78, 0.20,  0.02)), Res2=as.numeric(c(0.19, 0.04, 0.39,
    0.22, 0.06, 0.09, 0.50, 0.16, 0.02, 0.75, 0.46, 0.20)))

    likert(Question ~ . | Subtable, responses,
    scales=list(y=list(relation="free")), layout=c(1,3),
    positive.order=TRUE, 
    between=list(y=0),
    strip=FALSE, strip.left=strip.custom(bg="gray97"),
    par.strip.text=list(cex=.6, lines=3),
    main="Description of Sample",rightAxis=FALSE,
    ylab=NULL,  xlab='Percent')

不幸的是,它会产生一些并不存在的奇怪空间,如下图所示:

enter image description here

这似乎来自重复的“失踪”类别。我的实际数据有几个重复(例如,'不','其他'),每当它们被包括在内时我得到这些额外的空格。如果我运行相同的代码但删除重复的类别,那么它运行正常。在这种情况下,这意味着将上面代码中的“响应”更改为responses[! responses$Question %in% 'missing',]

有人能告诉我如何使用所有类别创建图表,而不会获得“额外”空格吗?感谢您的帮助和耐心。

-Z

R 3.0.2
HH 3.0-3
lattice 0.20-24
latticeExtra 0.6-26

1 个答案:

答案 0 :(得分:0)

以下是使用ggplot2创建图形

的解决方案
library(ggplot2)

responses <- 
  data.frame(Subtable = c(rep('Var1',5), rep('Var2',4), rep('Var3',3)),
             Question = c('very low','low','average','high','very high', 
                          '<12', '12-14', '15+', 'missing', '<25','25+',
                          'missing'), 
             Res1     = as.numeric(c(0.05, 0.19, 0.38, 0.24, .07, 0.09, 0.73, 
                                     0.17, 0.02, 0.78, 0.20,  0.02)), 
             Res2     = as.numeric(c(0.19, 0.04, 0.39, 0.22, 0.06, 0.09, 0.50,
                                     0.16, 0.02, 0.75, 0.46, 0.20)),
             stringsAsFactors = FALSE)

responses$Subtable <- factor(responses$Subtable, levels = paste0("Var", 1:3))

responses$Question <- 
  factor(responses$Question, 
         levels = c("missing", "25+","<25", "<12", "12-14", "15+",
                    "very low", "low", "average", "high", "very high"))

ggplot(responses) + 
  theme_bw() + 
  aes(x = 0, y = Question) + 
  geom_errorbarh(aes(xmax = 0, xmin = Res1, color = "red")) + 
  geom_errorbarh(aes(xmin = 0, xmax = -Res2,  color = "blue")) + 
  facet_wrap( ~ Subtable, ncol = 1, scale = "free_y") + 
  scale_color_manual(name = "", 
                     values = c("red", "blue"), 
                     labels = c("Res1", "Res2")) + 
  scale_x_continuous(breaks = c(-0.5, 0, 0.5), 
                     labels = c("0.5", "0", "0.5")) + 
  ylab("") + xlab("Percent") + 
  theme(legend.position = "bottom")

enter image description here