如何使用按多列因子水平计算的均值绘制直方图
How to plot histogram with means calculated by factor levels from multiple columns
我是 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 中绘制它!提前致谢!
根据您提供的平均值,您可以这样做:
重新创建您的简化数据集:
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='_')))
这将为您提供下图:
假设您指的是条形图而不是直方图(如果不是这种情况,请澄清您的问题),您可以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")
数据:
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")
##
我是 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 中绘制它!提前致谢!
根据您提供的平均值,您可以这样做:
重新创建您的简化数据集:
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='_')))
这将为您提供下图:
假设您指的是条形图而不是直方图(如果不是这种情况,请澄清您的问题),您可以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")
数据:
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")
##