2015-01-06 117 views
-1

我是R新手,可能是我的問題看起來很愚蠢,我花了一半的時間試圖自己解決它,沒有運氣。我找不到說明如何做的教程,如果你知道這樣的教程,歡迎你。我想繪製一個直方圖,並用列中的因子計算平均值。我最初的數據看起來像這樣(簡體版):如何繪製直方圖與多個因子水平計算平均值

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

所以我需要直方圖,其中每個bean由code_group着色,它的值是指從code_group每個級別,X軸帶標籤的量程1和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

你真的想一個直方圖,還是一個條形圖? – CephBirk

回答

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

+0

您的解決方案正常工作,但我發現我無法更改圖例和標籤的外觀,例如:image = ggplot( mdf, aes(x = scale_type, y = mean_value, fill = factor (code_group)))+ geom_bar(stat =「identity」,position =「dodge」); image + xlab(「Age in years」)+ ylab(「以英寸爲單位的高度」); image + scale_shape_discrete(name =「groups」,na。value =「grey50」,breaks = c(1,2,3),labels = c(「neutral」,「likers」,「lovers」)); 這一切都不起作用 –

+0

@DmitryMalugin我更新了我的答案,讓我知道這是否有幫助。 – nrussell

+0

是的,它有助於感謝很多! –

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