对于未使用正确的“行话”表示歉意,我不知道这叫什么:
我有一个表,该表由数据组成,这些数据表示参与者对问题的数字回答。数据表看起来像下面的示例(为清楚起见,明显缩短了):
participant q1 q2 q3 q4 .... q10
1 2 1 3 5 .... 2
2 3 2 4 1 .... 4
3 1 2 4 2 .... 3
.
.
50 2 3 5 2 .... 5
所以我想做的是在ggplot中创建一个箱形图,将问题编号沿x轴放置,并在一侧加分。我知道如何仅用一个问题来制作箱形图,但是我该如何对所有十个问题做一个框图?
如果我这样做:
susQBoxPlot <-ggplot(susQuestions, aes(x = participant, y = q1, group = 1))
+ geom_boxplot()
susQBoxPlot
然后我得到了:
但是我从这里去哪里?我以为我可以将额外的列添加到aes的“ y =“部分,如下所示:
susQBoxPlot <-ggplot(susQuestions, aes(x = participant, y = q1, q2, group = 1))
+ geom_boxplot()
但是它给了我相同的输出。
接下来我尝试了这个:
susQBoxPlot <-ggplot(susQuestions, aes(x = participant, y = c(q1, q2), group = 1))
+ geom_boxplot()
susQBoxPlot
但是我得到以下错误:
Error: Aesthetics must be either length 1 or the same as the data (50): y
这意味着什么!
我尝试查看ggplot文档,但看不到任何看起来像我想做的事情。
是的,我知道r具有一个内置的boxplot()函数,但我不想使用它,因为我希望我的箱形图和条形图具有相同的样式,而且我不喜欢r中的barplot()函数的工作方式!
答案 0 :(得分:0)
您将想要做
ggplot(tidyr::gather(susQuestions, q, val, -participant), aes(q, val, group=q)) + geom_boxplot()
答案 1 :(得分:0)
好的,我已经开始工作了。感谢Robin Gertenbach对他建议我执行以下操作的建议:
ggplot(tidyr::gather(susQuestions, q, val, -participant), aes(q, val, group=q)) + geom_boxplot()
这创建了一个箱形图,可以给我我想要的东西,但是x轴值不正确(即,它们变为q1, q10, q2, q3, q4....
)。我找到了对此here的解决方案,并使用了Tjebo's解决方案。
最后,我的代码如下:
# Re-organise susQuestions data frame into long format:
questionData <- tidyr::gather(susQuestions, q, val, -participant)
# Create a vector of question levels
questionLevels <- c("q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8", "q9", "q10")
# Create box plot
susQBoxPlot <-ggplot(questionData, aes(x = factor(q, questionLevels), val, group=q)) + # Define data for plot
stat_boxplot(geom ='errorbar', width=0.25) + # Add error bars
geom_boxplot(fill = "red", colour = "black") + # Set fill colour to blue
scale_y_continuous(name = "SUS Score", breaks = seq(1, 5, 1), limits=c(1, 5)) + # Set scale for y axis
scale_x_discrete(name = "Question") + # Set x axis name
ggtitle("Boxplot of SUS Question Responses") + # Set plot title
theme_bw() + # Set black and white theme
theme(plot.title = element_text(hjust = 0.5), # Centre plot title
panel.grid.major = element_blank(), # Turn off major gridlines
panel.grid.minor = element_blank()) # Turn off minor gridlines
susQBoxPlot # Display plot
结果: