这是我第一次在 RStudio 中使用 R。我想知道是否可以创建一个李克特风格的图表,以不同的李克特量表绘制两个调查问题。就我而言,变量确实具有相同数量的级别,但它们转化为不同的尺度。
我使用 Likert 包创建了一个数据样本和一个基本版本的 Likert 图:
library(likert)
set.seed(1)
n <- 150
df1 <- data.frame(
country=factor(sample(1:2, n, replace=T), labels=c("US","Canada")),
treatment=factor(sample(1:2, n, replace=T), labels=c("Base","Treatment")),
item1=factor(sample(1:5,n, replace=T), labels=c("Strongly Disagree","Disagree","Neutral","Agree","Strongly Agree")),
item2=factor(sample(1:5,n, replace=T), labels=c("Very Unlikely","Unlikely","Neutral","Likely","Very Likely"))
)
names(df1) <- c("Country", "Treatment",
"1. An Agreement Question",
"2. A Frequency Question")
## plot differentiating between treatments:
df1_likert <- likert(items=df1[,3:4], grouping=df1[,2])
plot(df1_likert)
当然,两个问题的颜色和图例是相同的(使用 item2 的比例)。我想使用不同的颜色并显示两个图例来正确显示每个问题的李克特量表。我还没有选择 Likert 套餐,并且很乐意使用其他更合适的东西。
我还有关于方面的第二个问题,如果更合适的话,很高兴打开一个新线程。 在上面的例子中,我仅通过分组来区分两种治疗方法。我希望有一种方法不仅可以区分不同的治疗方法,还可以区分不同的国家。 理想情况下,我想要两张相邻的图表,左一张代表美国,右一张代表加拿大,每个图表都区分治疗方法,如上图所示。
谢谢!
我尝试使用
plot_likert()
函数生成四个不同的李克特尺度图(美国和加拿大各一个的一致性图和频率图),然后使用 plot_layout()
将它们组合成一个布局,从而实现您的预期图来自 patchwork
包。
该函数可用于从
df1
数据框中选择国家/地区和问题类型,并控制结果图的图例位置。由于有四个图,但只需要两组图例(一致性和频率),因此使用 none
删除了两个图中的图例。 一致性图和频率图的调色板选自 https://colorbrewer2.org/#type=diverging&scheme=PRGn&n=5。
图例中文本的大小在函数内部控制,或者如果您愿意,您可以在函数中添加文本大小的参数。
这是详细信息和结果。
library(patchwork)
plot_likert <- function(country, type, legend_pos) {
agree_cols <- c("#a6611a", "#018571", "grey80")
freq_cols <- c("#7b3294", "#008837", "grey90")
if (type == "agreement") {
plot(likert(df1[df1$Country == country, "1. An Agreement Question", drop = FALSE]),
low.color = agree_cols[1],
high.color = agree_cols[2],
neutral.color = agree_cols[3]
) +
labs(title = country) +
theme(legend.position = legend_pos, legend.title = element_text(size = 7))
} else if (type == "frequency") {
plot(likert(df1[df1$Country == country, "2. A Frequency Question", drop = FALSE]),
low.color = freq_cols[1],
high.color = freq_cols[2],
neutral.color = freq_cols[3]
) +
labs(title = country) +
theme(legend.position = legend_pos, legend.title = element_text(size = 7))
}
}
US_agree <- plot_likert("US", "agreement", "none")
US_freq <- plot_likert("US", "frequency", "bottom")
Canada_agree <- plot_likert("Canada", "agreement", "bottom")
Canada_freq <- plot_likert("Canada", "frequency", "none")
US_agree + Canada_agree + US_freq + Canada_freq +
plot_layout(guides = "collect") & theme(legend.position = "bottom")
结果:
参考资料: