在R中的条形图上打印时如何显示比例值范围
我正在R中创建条形图,显示个人的平均分数和他们在不同尺度上的群组分数。但是,我还想显示量表中各个项目的得分范围 例如,如果我在一个由5个项目组成的5分Likert量表上的平均分为3分,我还想看看我的个人项目评分范围是1-5分,这意味着我到处都是,平均分为3分,还是2-4分,这意味着我在3分附近的评分更为一致 起初我只是想做误差条,但我需要它来显示分数的范围,而不是标准误差或置信区间。我使用的是ggplot2,需要理想地坚持使用这个R包,因为我需要它进行一些其他编码在R中的条形图上打印时如何显示比例值范围,r,range,bar-chart,R,Range,Bar Chart,我正在R中创建条形图,显示个人的平均分数和他们在不同尺度上的群组分数。但是,我还想显示量表中各个项目的得分范围 例如,如果我在一个由5个项目组成的5分Likert量表上的平均分为3分,我还想看看我的个人项目评分范围是1-5分,这意味着我到处都是,平均分为3分,还是2-4分,这意味着我在3分附近的评分更为一致 起初我只是想做误差条,但我需要它来显示分数的范围,而不是标准误差或置信区间。我使用的是ggplot2,需要理想地坚持使用这个R包,因为我需要它进行一些其他编码 # Make some dat
# Make some data
dat <- data.frame(Item1=c(1,2,2,4,5), Item2=c(3,3,1,5,2), Item3=c(1,5,5,4,5),
Item4=c(1,4,3,4,2), Item5=c(3,2,3,4,3))
# Find mean scores
for (i in 1:nrow(dat)) {
dat$ScaleMean[i] <- round(rowMeans(dat, na.rm=T)[i],2)
}
# Find cohort mean
dat$CoScaleMean <- round(mean(dat$ScaleMean, na.rm=T), 2)
# Add participant IDs
dat$ID <- c(1,2,3,4,5)
# Create long data format
dat.long3 <- melt(dat, id.vars=c('ID'),
measure.vars=c('ScaleMean', 'CoScaleMean'))
# Rename variable and value columns
colnames(dat.long3)[c(2,3)] <- c('Scale', 'Score')
# Bar chart
dat.long3 %>%
filter(ID == 1) %>%
ggplot(aes(x=Scale, y=Score)) +
geom_bar(aes(x=Scale, y=Score, fill=Scale), stat = 'identity', width=.9, alpha=1, position='dodge') +
coord_flip() +
ggtitle(label='Scale Name') +
scale_y_continuous(breaks=seq(0, 5, 1), limits = c(0, 5), expand=c(0,0)) +
scale_x_discrete(labels=element_blank()) +
scale_fill_manual(label=paste0(c('Your Score', 'Cohort Score')), values=c('gold', 'darkorange')) +
guides(fill = guide_legend(nrow = 2, reverse = TRUE)) +
geom_text(aes(x=Scale, label=Score, y=1), size=5, color='#000000')
这适用于另一个人,他要求在图表(而非表格)中进行视觉表示,并需要将其保持在条形图形式,无方框图等。。如果有的话,我不确定还有什么其他的选择可以实现这一点?非常感谢你的帮助 您可以使用胶水包创建自定义标签,并在geom_文本中调用该标签。从dat$ID之后开始谢谢。我有点明白你要去哪里,但是我得到了一个错误:找不到map_dbl。当我在包裹区搜索时,它甚至没有出现。抱歉!map_dbl来自purrr包,我现在已经在编辑的响应中加载了它。我想我记得在您提到purrr时使用了该函数。所以,现在当我运行代码时,我得到:map_dblitems中的Error,min:object'items'未找到。如果我/仅/运行。。。。dat%nestitems=Item1:Item5。。。。代码是有效的,但它没有在变异行中调用名称。嗯,我不确定发生了什么。一切都呈现在这里:这很奇怪。可能是我的R版本。我会继续挑选它,看看是否能找到工作。
library(dplyr)
library(tidyr)
library(purrr)
library(glue)
dat <- dat %>%
nest(items = Item1:Item5) %>%
mutate(min = map_dbl(items, min),
max = map_dbl(items, max),
ScaleMean = glue("{ScaleMean} [{min}-{max}]"),
CoScaleMean = glue("{CoScaleMean} [{min}-{max}]")) %>%
select(ID, ScaleMean, CoScaleMean)
# Create long data format
dat.long3 <- melt(dat, id.vars=c('ID'),
measure.vars=c('ScaleMean', 'CoScaleMean'))
dat.long3 <- dat.long3 %>%
separate(value, into = c("value", "range"), sep = " ") %>%
mutate(value = as.numeric(value))
# Rename variable and value columns
colnames(dat.long3)[c(2,3)] <- c('Scale', 'Score')
# Bar chart
dat.long3 %>%
mutate(label = glue("{Score} {range}")) %>%
dplyr::filter(ID == 1) %>%
ggplot(aes(x=Scale, y=Score)) +
geom_bar(aes(x=Scale, y=Score, fill=Scale), stat = 'identity', width=.9, alpha=1, position='dodge') +
coord_flip() +
ggtitle(label='Scale Name') +
scale_y_continuous(breaks=seq(0, 5, 1), limits = c(0, 5), expand=c(0,0)) +
scale_x_discrete(labels=element_blank()) +
scale_fill_manual(label=paste0(c('Your Score', 'Cohort Score')), values=c('gold', 'darkorange')) +
guides(fill = guide_legend(nrow = 2, reverse = TRUE)) +
geom_text(aes(x=Scale, label=label, y=1), size=5, color='#000000')