我是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中绘制它!提前谢谢!
答案 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")
数据:
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")
##
答案 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='_')))
这将为您提供以下图表: