我的数据:
Q5 Q6 Q7
1 Not Agree Neutral Not Agree
2 Not Agree Neutral Neutral
3 Not Agree Agree Agree
4 Not Agree Agree Neutral
5 Neutral Not Agree Neutral
6 Not Agree Agree Neutral
7 Not Agree Neutral Neutral
8 Neutral Agree Neutral
9 Agree Neutral Not Agree
10 Neutral Agree Neutral
Run Code Online (Sandbox Code Playgroud)
Q567[1:3] <- lapply(Q567[1:3], factor, levels= c("Agree", "Neutral", "Not Agree"), ordered = TRUE)
likert(Q567) %>%
plot(type = "bar")
Run Code Online (Sandbox Code Playgroud)
我将它们转换为带有级别的因子,为什么我仍然收到错误
Error in likert(Q567) : All items (columns) must …Run Code Online (Sandbox Code Playgroud) 我希望这个例子会很清楚。我想在中间条跨越“0”的地方堆叠条,因为它代表一个中性值。这与李克特量表一起使用。为了重现性,我使用了钻石数据集。
以下示例与我的用例非常接近,并说明了我将“好”或“正”数据按正确顺序排列的困难(因此中性最接近 0)。
这是我的代码:
require(tidyverse)
diamonds_new <- diamonds %>%
mutate(quality = fct_recode(cut, "Very poor" = "Fair", "Poor" = "Good", "Neutral" = "Very Good", "Good" = "Premium", "Excellent" = "Ideal")) %>%
select(color, clarity, quality) %>%
group_by(color, clarity, quality) %>% count()
diamonds_bad <-
diamonds_new %>% filter(quality %in% c("Very poor", "Poor", "Neutral")) %>%
mutate(n = ifelse(quality == "Neutral", -n/2, -n))
diamonds_good <-
diamonds_new %>% filter(quality %in% c("Neutral", "Good", "Excellent")) %>%
mutate(n = ifelse(quality == "Neutral", n/2, n)) # %>%
# arrange(color, clarity, desc(quality)) …Run Code Online (Sandbox Code Playgroud) 我正在使用jbryer 的Likert 包,并希望使用堆积条形图来可视化数据。这些条形图的大小/宽度取决于图中有多少个条形图,即只有一个条形图时,条形图相当宽,而绘制的条形图越多,条形图就越细。
我想自定义设置条形的大小/宽度,以便无论图中绘制了多少个条形,它们都保持不变,即 l29_5 和 l29_2 的图的条形大小相同。


library(ggplot)
library(likert)
data(pisaitems)
items29_5 <- pisaitems[,substr(names(pisaitems), 1,5) == 'ST25Q']
colnames(items29_5) <- c("Magazines", "Comic books", "Fiction",
"Non-fiction books", "Newspapers")
items29_2 <- items29_5 %>%
select("Magazines", "Comic books")
l29_5 <- likert(items29_5)
l29_2 <- likert(items29_2)
plot(l29_5)
plot(l29_2)
Run Code Online (Sandbox Code Playgroud) 我正在使用 R 包 Likert 根据调查问卷制作图表。这些图表基本上只是偏好谱,看起来非常像这个表示(没有原始数据,不能透露):
data("pisaitems")
title <- "How often do you read these materials because you want to?"
items29 <- pisaitems[,substr(names(pisaitems), 1,5) == 'ST25Q']
head(items29); ncol(items29)
names(items29) = c("Magazines", "Comic books", "Fiction", "Non-fiction books", "Newspapers")
l29 <- likert(items29)
str(l29)
l29s <- likert(summary = l29$results)
str(l29s)
scale_height = knitr::opts_chunk$get('fig.height')*0.5
scale_width = knitr::opts_chunk$get('fig.width')*1.25
knitr::opts_chunk$set(fig.height = scale_height, fig.width = scale_width)
theme_update(legend.text = element_text(size = rel(0.7)))
plot(l29s) + ggtitle(title)
Run Code Online (Sandbox Code Playgroud)
所以这是我的问题:
我已经设法让大部分图表设置符合我的喜好,但最后 3 个设置一直让我困惑。
仅供参考:示例是从该站点生成的: https: //rpubs.com/m_dev/likert_summary
假设我有一个如下所示的数据框:
P Q1 Q2 ...
1 1 4 1
2 2 3 4
3 1 1 4
Run Code Online (Sandbox Code Playgroud)
其中的列告诉我哪个人相应地回答了问题 q1、q2、... 中的哪一个。这些问题需要按照 4 分李克特量表进行回答(例如,“批准”意味着 1,“稍微批准”意味着 2,等等)。我如何绘制两个问题结果的堆积条形图(以%为单位)?
它应该看起来有点像这样。
我在网上找到的都是非常复杂的代码,我无法处理或无法理解......不是只有一个简单的函数可以完成我想要的事情吗?
谢谢你!
我正在尝试绘制 Likert 类型的数据,并使用改编自该网站的代码:https://scisley.github.io/articles/ggplot-likert-plot/
重现该示例的代码:
# load packages
library(dplyr)
library(ggplot2)
library(knitr)
library(tidyr)
library(scales)
# Simulation N responses
N <- 50
answers <- c("Strongly Disagree","Somewhat Disagree","Neither Agree nor Disagree",
"Somewhat Agree", "Strongly Agree")
set.seed(12342)
d <- tibble(
id = paste0("Respondent", 1:N),
Q1 = sample(answers, N, replace=TRUE),
Q2 = sample(answers, N, replace=TRUE),
Q3 = sample(answers, N, replace=TRUE),
Q4 = sample(answers, N, replace=TRUE),
Q5 = sample(answers, N, replace=TRUE)
)
# reduce data
d.reduced <- d %>%
select(-id) %>%
gather("Q", "ans") %>%
group_by(Q, ans) …Run Code Online (Sandbox Code Playgroud) 我正在尝试更改用 Likert 包绘制我的 Likert 项目的顺序,但到目前为止我还不是很成功。让我们考虑以下最小代码来重现我的错误。我希望看到以特定的自定义(或至少问题 1 到问题 4,从上到下)顺序进行绘图。我尝试了几件事(基于这里的一些问题和答案),但都失败了。
首先是数据:
question1<- c(1,5,3,4,1,1,1,3,4,5)
question2<- rev(c(1,5,3,4,1,1,1,3,4,5))
question3<- c(1,1,1,2,2,2,3,3,4,5)
question4<- c(5,5,5,4,4,4,3,3,2,1)
testData<-data.frame(question1,question2,question3,question4)
testData <- lapply(testData, factor, levels= c(1:5), ordered = TRUE)
testData <- as.data.frame(testData)
Run Code Online (Sandbox Code Playgroud)
然后绘制尝试#1:
p <- (likert(testData))
plot(p)
Run Code Online (Sandbox Code Playgroud)
给了我以下内容:
绘制第二次尝试(足够接近,但顺序颠倒了,这并没有给我任何随机排序的解决方案):
p <- (likert(testData))
plot(p, ordered=FALSE)
Run Code Online (Sandbox Code Playgroud)
给了我这个:
绘图尝试#3:
p <- (likert(testData))
p$Item <- factor(p$Item, levels = rev(c("question1", "question2", "question3", "question4")))
plot(p)
Run Code Online (Sandbox Code Playgroud)
也不起作用。有人知道如何解决这个问题吗?
提前致谢。