Как отредактировать положение меток значений в plot.likert? - PullRequest
0 голосов
/ 21 октября 2019

У меня есть информационный фрейм с оценками scores <- data.frame(var1=c(1,3,5,6,1,4,10,2,5,3,7), var2=c(10,9,1,4,3,3,4,7,8,10,10))

, который я преобразую в фактор с тремя уровнями:

library(likert)
library(dplyr)

scores_factor <- scores %>% sapply(., cut, c(0, 6, 8, 10), include.lowest = TRUE, labels = c("Negative", "Okay", "Positive")) %>% data.frame

, а затем преобразую в элемент likert и вычерчивая его, используяlikert.plot из пакета "likert":

likert_scores <- likert(scores_factor)
p <- plot(likert_scores, low.color="#ED5949", neutral.color="#F3CA71", high.color="#7CB166")
p <- p+ theme(text = element_text(color = "#333333")
              ,plot.title = element_text(size = '16', face = 'bold'))
p <- p+ theme(plot.title=element_text(size=16, face="bold", color="black"))
p<-  p+ theme(plot.subtitle=element_text(size=11, face="italic", color="black"))
p <- p+ labs(title= "Hello world!")
p <- p+ theme_hc()
p<-  p+ theme(axis.text.x=element_blank())
p <- p+ theme(legend.position="right")
plot(p)

Теперь проблема в том, что likert.plot отображает метки значений ребер не внутри баров. Я хочу найти способ печатать этикетки внутри баров, не прибегая к созданию сложенного барплота с нуля с помощью ggplot2? Это возможно? Если нет, то что может быть альтернативой?

Заранее спасибо. enter image description here

1 Ответ

0 голосов
/ 23 октября 2019

После дня, когда я пытался решить эту проблему самостоятельно, нашел обходной путь, который я опубликую ниже на случай, если другие захотят извлечь из этого пользу.

Для истории предмет likert хранит пропорции уровней фактора в позиции:

likert_scores[["results"]][["Negative"]][1], likert_scores[["results"]][["Okay"]][1], likert_scores[["results"]][["Positive"]][1]
(для столбца 1 в случаеу вас есть трехуровневые факторы, как в вопросе выше)

Поэтому мы добавляем следующие строки кода для печати процентных меток для обоих столбцов от var1 и var2 до geom_text:

p <- p+ geom_text(label=paste0(c(round(likert_scores[["results"]][["Negative"]][1]), round(likert_scores[["results"]][["Okay"]][1]), 
                                 round(likert_scores[["results"]][["Positive"]][1]),round(likert_scores[["results"]][["Negative"]][2]), round(likert_scores[["results"]][["Okay"]][2]), 
                                 round(likert_scores[["results"]][["Positive"]][2])), "%"), position = position_stack(vjust= .5))

но нам также необходимо изменить параметры, чтобы likert.plot() не печатал оригинальные этикетки, чтобы не перекрывать новые этикетки:

p <- plot(likert_scores, low.color="#ED5949", neutral.color="#F3CA71", high.color="#7CB166", 
centered= FALSE, plot.percents=FALSE, plot.percent.low=FALSE, 
plot.percent.high=FALSE, plot.percent.neutral = FALSE)

И новые этикетки на месте!

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...