Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中的条形图上打印时如何显示比例值范围_R_Range_Bar Chart - Fatal编程技术网

在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

我正在R中创建条形图,显示个人的平均分数和他们在不同尺度上的群组分数。但是,我还想显示量表中各个项目的得分范围

例如,如果我在一个由5个项目组成的5分Likert量表上的平均分为3分,我还想看看我的个人项目评分范围是1-5分,这意味着我到处都是,平均分为3分,还是2-4分,这意味着我在3分附近的评分更为一致

起初我只是想做误差条,但我需要它来显示分数的范围,而不是标准误差或置信区间。我使用的是ggplot2,需要理想地坚持使用这个R包,因为我需要它进行一些其他编码

# 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')