2017-02-12 30 views
1

Я пытаюсь наложить два барных сюжета друг на друга, а не рядом. Данные взяты из одного набора данных. Я хочу «Блок» на оси х и «Старт» и «Конец» в качестве накладываемых графиков.Наложение двух барных участков с geom_bar()

Block Start  End 
1 P1L  76.80  0.0 
2 P1S  68.87  4.4 
3 P2L  74.00  0.0 
4 P2S  74.28  3.9 
5 P3L  82.22  7.7 
6 P3S  80.82  17.9 

Мой сценарий

ggplot(data=NULL,aes(x=Block))+ 
    geom_bar(data=my_data$Start,stat="identity",position ="identity",alpha=.3,fill='lightblue',color='lightblue4')+ 
    geom_bar(data=my_data$End,stat="identity",position ="identity",alpha=.8,fill='pink',color='red') 

Я получаю ошибку: ggplot2 не знает, как обращаться с данными класса числовых

Я также попытался

ggplot(my_data,aes(x=Block,y=Start))+ 
     geom_bar(data=my_data$End, stat="identity",position="identity",...) 

Кто-нибудь знает, как я могу это сделать? Спасибо.

Edit:

Как получить DODGE накладывая бруски?

Я редактирую этот пост, потому что мой следующий вопрос имеет значение, так как это противоположная проблема моего исходного сообщения.

@ P.merkle

Я должен был изменить свой участок в четыре бара, показывающие средние значения всех блоков обозначены L и S. L стенд для литорали и S для сублиторали. Они были выставлены для двух процедур: нормального и уменьшенного.

Я вычислил средства и их стандартное отклонение. Мне нужны четыре бара с соответствующими барами ошибок: Нормальный/Прибрежный, Сокращенный/Прибрежный, Нормальный/Сублиторальный, Уменьшенный/Сублиторальный.

Проблема в том, когда я закладываю это, как литорали, так и сублиторальные бары накладываются друг на друга! Так что теперь я хочу, чтобы они не для перекрытия! Как я могу это сделать? Я пробовал все виды position = 'dodge' и position = position_dodge(newdata$Force), без везения ...

Мои newdata содержат следующую информацию:

Zonation Force N mean sd se 1 Litoral Normal 6 0.000000 0.000000 0.000000 2 Litoral Redusert 6 5.873333 3.562868 1.454535 3 Sublitoral Normal 6 7.280000 2.898903 1.183472 4 Sublitoral Redusert 6 21.461667 4.153535 1.695674

Мой сценарий заключается в следующем:

ggplot(data=cdata,aes(x=newdata$Force,y=newdata$mean))+ 
     geom_bar(stat="identity",position ="dodge", 
       alpha=.4,fill='red', color='lightblue4',width = .6)+ 
     geom_errorbar(aes(ymin=newdata$mean-sd,ymax=newdata$mean+sd), 
         width=.2, position=position_dodge(.9)) 

Результатом является К сожалению, this

Что касается ошибок, то это clea там четыре бара, но они перекрываются. Пожалуйста, как я могу это решить?

ответ

1

Существует простой и более сложный ответ на ваш вопрос.

Если вам не нужна легенда, простое решение может сработать для вас.

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

Вариант 1: Без легенды, сохраняя данные в широком формате

Вы можете уточнить спецификации эстетику на уровне отдельных геометрий (здесь, geom_bar):

ggplot(data=my_data,aes(x=Block))+ 
    geom_bar(aes(y=Start),stat="identity",position ="identity",alpha=.3,fill='lightblue',color='lightblue4') + 
    geom_bar(aes(y=End),stat="identity",position ="identity",alpha=.8,fill='pink',color='red') 

plot without legend

Variant 2: Добавить легенду, преобразовывая данные в длинный формат

Чтобы добавить легенду, используйте reshape2::melt для преобразования вашего фрейма данных из широкого формата в длинный формат, который дает вам столбцы variable («Старт» против «Конец») и value. Затем используйте variable колонку, чтобы определить свою легенду:

library(reshape2) 
my_data_long <- melt(my_data, id.vars = c("Block")) 
ggplot(data=my_data_long,aes(x=Block, y=value, fill=variable, color=variable, alpha=variable)) + 
    geom_bar(stat="identity",position ="identity") + 
    scale_colour_manual(values=c("lightblue4","red")) + 
    scale_fill_manual(values=c("lightblue","pink")) + 
    scale_alpha_manual(values=c(.3, .8)) 

enter image description here

+0

Ха-ха, так легко! Спасибо огромное! – metazoa

+0

Если вам нужна легенда рядом с вашим сюжетом, взгляните на вариант 2 моего отредактированного ответа. –

+0

Ооо, спасибо! – metazoa