2015-09-30 5 views
0

Я хочу построить диаграммы для разных категорий (V, C и S в фиктивных данных) для значений разных переменных (v1-v5), чтобы увидеть, как диапазоны разных категорий варьируются в зависимости от переменная. Есть ли способ сделать это в R?barplot переменных по факторам в R

Factor v1 v2 v3 v4 v5 
     v 12.0 8.4 5.3 3.0 3.5 
     v 11.8 7.5 4.7 2.8 3.7 
     c 13.2 9.5 5.7 3.0 4.1 
     c 13.4 9.3 6.3 3.3 3.8 
     c 10.5 7.7 5.0 2.5 3.2 
     s 13.1 9.6 5.4 3.1 3.9 
     s 15.0 9.0 5.1 4.5 9.0 

Его должен быть очень простой код с использованием какого-либо пакета, но я не смог его выяснить.

ответ

3

Вы можете сделать:

library(data.table) 
df2 <- melt(setDT(df), measure.vars = patterns("^v")) 

library(ggplot2) 
ggplot(df2, aes(x=Factor, y=value1)) + 
    stat_summary(aes(fill=variable), fun.y="sum", geom = "bar", position="dodge") + 
    theme_bw() 

это дает:

enter image description here

использовали данные:

df <- read.table(text="Factor v1 v2 v3 v4 v5 
v 12.0 8.4 5.3 3.0 3.5 
v 11.8 7.5 4.7 2.8 3.7 
c 13.2 9.5 5.7 3.0 4.1 
c 13.4 9.3 6.3 3.3 3.8 
c 10.5 7.7 5.0 2.5 3.2 
s 13.1 9.6 5.4 3.1 3.9 
s 15.0 9.0 5.1 4.5 9.0", header=TRUE) 
+0

Требуется ли theme_bw()? Это зависит от интереса пользователя, не так ли? –

+1

@CristianVelandia Это действительно не нужно, но мне нравится больше, чем гей-фон. – Jaap

+0

@Jaap Хорошее решение. Однако при преобразовании данных от широкоугольного до долгого с расплавом имя столбца является значением1 вместо значения, поэтому мне нужно изменить имя внутри ggplot: 'y = value1'. Я что-то делаю неправильно или это опечатка? – mpalanco

0

есть еще один способ для достижения этой задачи

df<- read.csv("dummy.csv",header=TRUE,sep=",") 
df 
class(df) 
df2<-aggregate(cbind(df$v1,df$v2,df$v3,df$v4,df$v5)~df$Factor, FUN=sum) 
df2 

barp<-barplot(t(df2[ , -1]),col=c("blue", "red", "green", "orange", "gold")); 
axis(side = 1, at = barp, labels = df2$`df$Factor`) 
+0

Используемые здесь данные - это то же, что вы используете –

Смежные вопросы