2015-08-27 2 views
0

У меня есть этот довольно большой фрейм данных, из которого я хотел бы создать граненые графики. Все это работает, но поскольку высота баров укладывается из множества отдельных значений, бары больше не сплошного цвета, но преобладают цвета контуров сегмента.Как удалить контуры сегмента штриха с гистограммы?

Кадр данных выглядит следующим образом:

> head(alldata[c("unit.size", "bppmbp")]) 
    unit.size  bppmbp 
1   6 0.11927224 
2  10 0.11430256 
3   1 0.07951483 
4   7 0.09442386 
5  13 0.18884771 
6   8 0.09939353 

Я хочу, чтобы построить сумму bppmbp для каждого unit.size (unit.size идет от 1 до 51).

Это мой код:

ggplot(data) + 
    aes(x=unit.size, y=bppmbp, fill=unit.size) + 
    geom_bar(stat="identity") 

Результат выглядит следующим образом. Левый снимок экрана - это выход PDF, справа - выход PNG (немного лучше, но вы можете видеть белые границы).

Bar plot with messed up bars (PDF)Bar plot with messed up bars (PNG)

От here Я понимаю, как задать цвет контура, но я не нашел, как удалить контур целиком. Я попытался добавить color="", color=NA или color=element.empty() в geom_bar(), но ни один из них не делает.

Как я могу удалить этот контур и иметь сплошные бары? Может быть, все ценности и просто нарисовать суммы бинов? Надеюсь, есть более простое решение.

+2

Попробуйте сначала агрегировать данные, а не полагаться на укладку в ggplot. – joran

+0

Thanks; вы, вероятно, правы. Я добавил кусок моих данных, но, я думаю, вопрос должен быть «как я могу объединить этот фреймворк данных, поэтому ggplot не делает уродливые стеки». – mpe

+0

Существует множество способов объединить данные в R и бесконечные ресурсы в Интернете, объясняющие, как это сделать. Начните искать «агрегат» или пакеты, такие как ** plyr **, ** dplyr ** или ** data.table **. – joran

ответ

1

С примерным кадром данных, как это:

x group subject 
1 50 test  1 
2 52 test  1 
3 23 test  1 
4 53 test  2 
5 23 test  2 
6 53 test  2 
7 62 control  3 
8 63 control  3 
9 36 control  3 
10 57 control  4 
11 58 control  4 
12 58 control  4 

library(Rmisc);library(ggplot2) 
dfc_subjects<- summarySE(df,measurevar = "x",groupvars = c("subject","group")) 
dfc_subjects 
    subject group N x   sd   se  ci 
1  1 test 3 41.66667 16.1967075 9.3511734 40.234852 
2  2 test 3 43.00000 17.3205081 10.0000000 43.026527 
3  3 control 3 53.66667 15.3079500 8.8380491 38.027056 
4  4 control 3 57.66667 0.5773503 0.3333333 1.434218 

совокупность с отдельными предметами, а также уменьшить этот размер в участке.

ggplot(dfc_subjects, aes(x=group, y=x, color=group)) + 
     geom_bar(stat="identity") 

enter image description here

Вы получаете эту уродливую ищет вещь. Но если вам это нравится

dfc_group<- summarySE(df,measurevar = "x",groupvars = "group") 
dfc_group 
    group N  x  sd  se  ci 
1 control 6 55.66667 9.93311 4.055175 10.42416 
2 test 6 42.33333 15.01555 6.130072 15.75785 

ggplot(dfc_group, aes(x=group, y=x, color=group)) + 
     geom_bar(stat="identity") 

Вы получаете то, что агрегировано по группе, а не отдельные случаи.

enter image description here

+0

Спасибо, ваш ответ очень полезен! Я предполагаю, что вопрос должен быть меньше «как сделать ggplot менее сложным» и более «как я могу объединить свой фрейм данных». 'summarySE()' кажется приятным, но мне нужна функция, которая суммирует столбец в зависимости от другого. В принципе, 'aggregate()' или что-то. Я добавил пример подмножества моего data.frame. – mpe

+0

Принято, тем не менее. Спасибо за те усилия, которые вы указали, чтобы показать мне способ объединить мои данные! – mpe

0

Для записи, это как я решить мою проблему с помощью aggregate():

> data.aggregate = aggregate(alldata$bppmbp, by = list(alldata$unit.size), sum) 
> names(data.aggregate) = c("unit.size", "bppmbp") 

Это подводит итог колонки bppmbp в зависимости от unit.size и дает мне более чистый кадр данных что я могу построить с помощью обычного ggplot(...) + geom_bar(...):

> head(data.aggregate) 
    unit.size bppmbp 
1   1 87.30581 
2   2 89.60076 
3   3 701.26025 
4   4 94.01366 
5   5 49.36587 
6   6 203.07879 

> ggplot(tablata, aes(x=unit.size, y=bppmbp, fill=unit.size)) + 
    geom_bar(stat="identity") + 
    xlab("Unit length") + 
    ylab("bp/Mbp") 

Bar chart without stacking artifacts

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