2016-12-07 2 views
0

Я попытался выровнять различные графики, полученные с помощью geom_bar. Когда я запускаю каждый сюжет один за другим, он работает хорошо. Я получил то, что хочу. Но когда я агрегировать их все в одну кратную сюжет, я всегда такой же ....Сочетание ggplots стирает оригинальный сюжет?

Чтобы было ясно: это первый участок, который хорошо: enter image description here

Вот что я получил, когда я объединить обе графики. Первая колонка должна быть такой же, как и выше: ... enter image description here

Не могу найти проблему. Это мой сценарий:

##### colonne 6 
i=6 
col=compil[,i] 
nom=names(compil[i]) 
maxi = max(col) 
mini = min(col) 

p5 <- ggplot(compil,aes(x=NIVEAU, y=col)) + 
    geom_bar(stat="identity",position = "identity",aes(width=0.85), 
      fill=ifelse(col > 1, rgb(63,202,20, maxColorValue = 255), 
         ifelse (col< -1,rgb(204,0,0, maxColorValue = 255), 
           rgb(160,160,160, maxColorValue=255)))) + 
    geom_hline(yintercept=0,color=rgb(160,160,160, maxColorValue=255))+ 
    coord_flip(ylim=c(-2.5,2.5)) + 
    labs(x="", y="", title= nom) + guides(fill=F) + 
    theme(panel.grid.major=element_blank(), panel.grid.minor.x=element_blank(), 
     panel.background = element_blank(), axis.text.x=element_blank(), 
     axis.ticks = element_blank(),axis.line= element_blank(), 
     plot.margin=unit(c(1,-1,1,-1),"lines"), plot.title = element_text(size=10)) 
print(p5) 

##### colonne 7 
i=7 
col=compil[,i] 
nom=names(compil[i]) 
maxi = max(col) 
mini = min(col) 

p6 <- ggplot(compil,aes(x=NIVEAU, y=col)) + 
    geom_bar(stat="identity",position = "identity",aes(width=0.85), 
      fill=ifelse(col > 1, rgb(63,202,20, maxColorValue = 255), 
         ifelse (col< -1,rgb(204,0,0, maxColorValue = 255), 
           rgb(160,160,160, maxColorValue=255)))) + 
    geom_hline(yintercept=0,color=rgb(160,160,160, maxColorValue=255))+ 
    coord_flip(ylim=c(-2.5,2.5)) + 
    labs(x="", y="", title= nom) + guides(fill=F) + 
    theme(panel.grid.major=element_blank(), panel.grid.minor.x=element_blank(), 
     panel.background = element_blank(), axis.text=element_blank(), 
     axis.ticks = element_blank(),axis.line= element_blank(), 
     plot.margin=unit(c(1,-1,1,-1),"lines"), plot.title = element_text(size=10)) 
print(p6) 

vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y) 
grid.newpage() 
pushViewport(viewport(layout = grid.layout(1, 3))) 
print(p5, vp = vplayout(1, 1:2)) 
print(p6, vp = vplayout(1, 3)) 

Если кто-то может помочь мне найти ошибку, я действительно ценю! Конечно, я делаю что-то не так, но что ?? Заранее благодарю за ваше время и вашу помощь!

+0

это может быть связанно с 'ленивого Eval ggplot' и вы изменяя тот же набор значений для каждого участка, но это трудно сказать, без каких-либо примеров данных. возможно, переименуйте переменные для 'colonne 7', чтобы имена были уникальными для имен' colonne 6' – Nate

+0

Чтобы проверить предложение @ NathanDay, попробуйте распечатать p5 после генерации p6. –

+0

Я подумывал сделать петлю, поэтому я сохранил одно и то же имя ... но вы правы: я тоже был ленив! Переименовав все переменные, как сказал @Nathan Day, теперь он работает как expexted! Большое спасибо! – Sandrine

ответ

0

Т.Л., др Попробуйте заменить aes(x=NIVEAU, y=col) с aes_string(x="NIVEAU", y = nom, fill = nom), где nom = names(compil)[i].


col по-видимому, вектор, но внутри aes() вы должны пройти некотируемые переменные из data.frame. Передача значений напрямую приведет к неожиданностям, потому что ggplot2 действительно не знает, где искать «col» при построении графика - он ищет такую ​​переменную в данных, которые были привязаны к среде графика, и ее нет, поэтому следующий должен выглядеть в глобальной окружающей среде ...

По этой же причине вещи fill = ifelse() не могут работать должным образом и должны быть удалены. Отображение цветов в значениях - это задание масштаба в ggplot2, так что просто введите fill = nom, затем добавьте scale_fill_manual(...) или любой другой тип совместимой шкалы.

(угадывание, так как нет воспроизводимого кода)

+0

Спасибо @baptiste за ваш комментарий. Я не знаком с использованием «aes». Спасибо вам, я кое-что узнал !! ... К сожалению, он не работает, но я не уверен, что хорошо его использую ... Я немного подтолкну к написанию лучшего сценария. – Sandrine

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