2014-01-08 2 views
3

У меня есть кадр данных DF в R, который выглядит следующим образом:Создание сгруппированного бара участка в R

 D  C  B  E  K  R 
Rd  80 80 80 80 80 80 
Sw  100 100 100 100 100 100 
Sf  100 100 100 100 100 100 

Я пытаюсь построить данные в барном стойком. Мне нужна ось y, чтобы иметь диапазон 0-100, а ось x - имена категорий. В принципе, мне нужно, чтобы выглядеть следующим образом:

100 |    _ _ _ _ _ _ _ _ _ _ _ _ 
    |_ _ _ _ _ _ | | | | | | | | | | | | | | 
    | | | | | | | | | | | | | | | | | | | | | 
    | | | | | | | | | | | | | | | | | | | | | 
    | | | | | | | | | | | | | | | | | | | | | 
0 |_|_|_|_|_|_|__|_|_|_|_|_|_|__|_|_|_|_|_|_|_ 
    D C B E K R D C B E K R D C B E K R 
     Rd    Sw   Sf 

С всеми Ds теми же цветами, все Cs тем же цветом, и так далее.

Я не уверен, как это сделать или какие библиотеки использовать.

До сих пор у меня есть:

counts <- as.matrix(df$D, df$C, df$B, df$E, df$K, df$R) 

barplot(counts, beside = TRUE, space = c(0, 0, 0, 0, 0, 0), xlab = "", 
col = c("coral", "coral1", "coral2", "coral3", "coral4", "cornflowerblue"), 
    names.arg = c("D", "C", "B", "E", "K", "R")) 
mtext(side = 1, text = "x label", line = 7) 

Но это только показывает что-то вроде этого:

100 | _ _ _ _ 
    |_| | |_| | | 
    | | | | | | | 
    | | | | | | | 
    | | | | | | | 
0 |_|_|_|_|_|_|_ 
    D C B E K R 
     x label 

Я не знаю, почему я получаю только это.

Любая помощь будет высоко оценена.

ответ

3

Попробуйте это:

df2 <- t(as.matrix(df)) 
bp <- barplot(df2,beside=TRUE,col=1:6) 
mtext(rownames(df2),1,at=bp) 

enter image description here

Если вы хотите изменить вещи, чтобы закрутить метки осей или точно позиционировать группа/бар этикетки, то вы можете сделать что-то вроде кода ниже. Измените аргументы line=, чтобы повлиять на вертикальное положение меток и аргумент las=1 в вызове barplot, чтобы покрутить метки по мере необходимости.

df2 <- t(as.matrix(df)) 
bp <- barplot(df2,beside=TRUE,col=1:6,axisnames=FALSE,las=1) 
mtext(rownames(df2),1,at=bp,line=0.6) 
mtext(colnames(df2),1,at=colMeans(bp),line=2) 
+0

Делая это следующим образом: 'df2 <- т (as.matrix (ДФ))' ' п.н. <- barplot (df2, рядом = TRUE, col = 1: 6, имена.arg = c («D», «C», «B», «E», «K», «R», «D», «C», «B», «E», «K», «R "," D "," C "," B "," E "," K "," R "))' 'mtext (rownames (df2), 1, at = bp)' Я могу отображать только буквы, а не Rd, Sw и Sf. Есть ли способ их отображения? – LoneWolf

+0

@ user3043867 - что вы имеете в виду? Вы можете ясно видеть, что мой пример имеет оба набора меток! – thelatemail

+0

Есть ли способ отображения фактических значений в barplot? – LoneWolf

0

Похоже, что вы не хотите, что as.matrix вызов векторов-столбцов из data.frame - это, скорее всего, что вы хотите: as.matrix (D), например:

barplot(as.matrix(data.frame(rpois(10, 2), rpois(10, 1))), beside = T) 

в принципе, я даю простой пример, представьте, у вас есть:

df = data.frame(x = c(1,2,3), y = c(2,3,4)) 

вы делали as.matrix (DF $ х, ДФ $ у) - это не то, что вы хотите, вы хотите сделать: as.matrix (df), таким образом:

barplot(as.matrix(df), beside = T) 

предоставит вам то, что вы хотите. Главное - посмотреть, что делает «as.matrix».

4
set.seed(1) 
df <- data.frame(groups = rep(c("Rd", "Sw", "Sf"), each=6), 
       bars = rep(c("D", "C", "B", "E", "K", "R"), 3), 
       values = sample(1:100,18)) 
library(ggplot2) 
ggplot(df, aes(x=bars, y=values, fill=bars)) + 
    geom_bar(stat="identity", position="dodge") + 
    facet_wrap(~groups, ncol=3) 

Результат: смотри рисунок ниже.

Или, если взять кадр данных от вопроса:

df <- read.table(sep=" ", header=T, text=" 
D C B E K R 
Rd 80 80 80 80 80 80 
Sw 100 100 100 100 100 100 
Sf 100 100 100 100 100 100") 

df$facet <- row.names(df) 
library(reshape2) 
df.long <- melt(df, "facet") 
ggplot(df.long, aes(x=variable, y=value, fill=variable)) + 
    geom_bar(stat="identity", position="dodge") + 
    facet_wrap(~facet, ncol=3) 

enter image description here

+0

@ MartínBel правда. Я сделал обновление. – lukeA

+1

reshape2 - это способ пойти на такие вопросы. В идеале каждая точка данных должна иметь свою собственную линию в кадре данных (длинный формат). Это достигается командой расплава в пакете reshape2. –

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