如何使用多列中因子水平计算的平均值绘制直方图

时间:2015-01-06 21:08:38

标签: r histogram

我是R的新手,可能是我的问题看起来很傻,我花了一半的时间试图独自解决它而没有运气。我没有找到说明如何操作的教程,如果你知道这样的教程,那么欢迎你。我想绘制一个直方图,其中的平均值是根据列的因子计算的。我的初始数据看起来像这样(简化版):

code_group scale1  scale2
   1           5       3
   2           3       2
   3           5       2

所以我需要直方图,其中每个bean由code_group着色,它的值是code_group的每个级别的平均值,x轴是标签scale1和scale2。每个标签包含三个bean(对于三个级别的因子code_group)。我已经设法自己计算每个级别的均值,它看起来像这样:

code_group    scale1      scale2 
    1       -1.0270270   0.05405405   
    2       -1.0882353   0.14705882
    3       -0.7931034   -0.34482759

但我不知道如何在historgam中绘制它!提前谢谢!

2 个答案:

答案 0 :(得分:2)

假设您的意思是条形图而不是直方图(如果不是这样,请澄清您的问题),您可以melt您的数据和情节它与ggplot像这样:

library(ggplot2)
library(reshape2)
##
mdf <- melt(
  df,
  id.vars="code_group",
  variable.name="scale_type",
  value.name="mean_value")
##
R> ggplot(
    mdf,
    aes(x=scale_type,
        y=mean_value,
        fill=factor(code_group)))+
    geom_bar(stat="identity",position="dodge")

enter image description here


数据:

df <- read.table(
  text="code_group    scale1      scale2 
    1       -1.0270270   0.05405405   
    2       -1.0882353   0.14705882
    3       -0.7931034   -0.34482759",
  header=TRUE)

修改
您可以像下面那样对数据本身(或其副本)进行修改:

mdf2 <- mdf
mdf2$code_group <- factor(
  mdf2$code_group,
  levels=1:3,
  labels=c("neutral",
           "likers",
           "lovers"))
names(mdf2)[1] <- "group"
##
ggplot(
  mdf2,
  aes(x=scale_type,
      y=mean_value,
      fill=group))+
  geom_bar(stat="identity",position="dodge")
##

enter image description here

答案 1 :(得分:0)

考虑到您提供的平均值,您可以执行以下操作:

要重新创建简化数据集:

d=data.frame(code_group=c(1,2,3),scale1=c(-1.02,-1.08,-0.79),scale2=c(0.05,.15,-0.34))

创建图表:

barplot(c(d[,'scale1'],d[,'scale2']),col=d[,'code_group'],names.arg=c(paste('scale1',unique(d[,'code_group']),sep='_'),paste('scale2',unique(d[,'code_group']),sep='_')))

这将为您提供以下图表:

enter image description here