Настройте Barplot в ggplot2 - PullRequest
0 голосов
/ 04 мая 2018

Я бы хотел нарисовать точно (или что-то похожее) следующую фигуру А:

Figure A

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

Любая помощь приветствуется.

Заранее спасибо

groupe2<-rep(c(rep("P",4),rep("I",4)),3)
groupe<-rep(c("PPP","PPI","PII","PIP","III","IIP","IPP","IPI"),3)
OR_A<-c(1.00,0.86,0.90,0.88,0.70,0.77,0.77,0.68)
ICinf_A<-c(NA,0.70,0.76,0.72,0.61,0.61,0.60,0.50)
ICsup_A<-c(NA,1.06,1.06,1.07,0.81,0.96,1.00,0.92)
OR_B<-c(1.00,0.97,0.81,1.01,0.58,0.61,0.73,0.69)
ICinf_B<-c(NA,0.78,0.62,0.77,0.52,0.50,0.61,0.57)
ICsup_B<-c(NA,1.20,1.05,1.28,0.65,0.71,0.81,0.82)
OR_C<-c(1.00,1.03,0.65,0.86,0.37,0.47,0.68,0.58)
ICinf_C<-c(NA,0.84,0.50,0.67,0.33,0.40,0.59,0.49)
ICsup_C<-c(NA,1.27,0.86,1.10,0.41,0.56,0.78,0.69)
outcome<-c(rep("PC M",8), rep("RIC M",8), rep("RIC C",8))

OR<-c(OR_A,OR_B,OR_C)
ICinf<-c(ICinf_A,ICinf_B,ICinf_C)
ICsup<-c(ICsup_A,ICsup_B,ICsup_C)

dataOR<-data.frame(OR,groupe,outcome,groupe2,ICinf,ICsup)

#pour mettre l'ordre qu'on veut pour la légende (par défaut : ordre alphabétique)
dataOR[, "groupe"] <- factor(dataOR[, "groupe"] , 
                             levels = c("PPP","PPI","PII","PIP","III","IIP","IPP","IPI"))

##########
##########


ggplot(dataOR, aes(fill=outcome, y=OR, x=groupe)) +
  geom_bar(position="dodge", stat="identity") + 
  scale_fill_brewer(palette="Blues")+
  geom_errorbar(aes(ymin=ICinf, ymax=ICsup), width=.2,position=position_dodge(.9))+
  #theme(panel.background = element_rect(fill="lightgreen"))+
  geom_hline(yintercept=1)

Figure A

Относительно меток для рисунка A:

Например:

ППС и т.д ...

будет на месте

Базовый уровень активности и т.д ...

ОБНОВИТЬ ОБНОВИТЬ

FIGURE C

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Я думаю, что поймал все, что вы хотели с первого сюжета. Я сделал несколько настроек, некоторые с параметрами theme, а некоторые немного хакерские:

  • Добавлена ​​тонкая линия вокруг полосок, примерно того же цвета, что и фон панели, чтобы полосы не сжимались рядом друг с другом
  • Изменена заливка, чтобы пропустить самые светлые цвета в палитре, просто потому, что светло-синий трудно увидеть на светло-сером фоне (не стесняйтесь отбрасывать это)
  • Добавлен geom_point, но установлен, чтобы он не отображался в легенде
  • Расширена шкала y, чтобы избавиться от зазора в нижней части столбцов
  • Граненый на одной строке и со свободным масштабированием x
  • Уронил название легенды
  • Поместить легенду сверху с рамкой и прямоугольными клавишами
  • Добавлены черные линии на осях x и y
  • Отброшенные метки оси и метки оси X
  • Уронил х сетку
  • Поместите названия осей жирным шрифтом.

Я думаю, что это все, что отличалось между ними!

ggplot(dataOR, aes(fill=outcome, y=OR, x=groupe)) +
    geom_bar(position="dodge", stat="identity", color = "gray95", size = 0.25) + 
    # scale_fill_brewer(palette="Blues")+
    scale_fill_manual(values = RColorBrewer::brewer.pal(5, "Blues")[3:5]) +
    geom_errorbar(aes(ymin=ICinf, ymax=ICsup), width=.4, position=position_dodge(.9))+
    geom_hline(yintercept=1) +
    geom_point(position = position_dodge(0.9), size = 0.5, show.legend = F) +
    scale_y_continuous(expand = expand_scale(mult = c(0, 0.05))) +
    facet_wrap(~groupe, nrow = 1, scales = "free_x") +
    labs(fill = NULL) +
    theme(legend.position = "top", 
                legend.key.height = unit(0.2, "cm"), 
                legend.background = element_rect(color = "black", size = 0.4), 
                axis.line = element_line(color = "black"),
                axis.text.x = element_blank(),
                axis.ticks = element_blank(),
                panel.grid.major.x = element_blank(),
                axis.title = element_text(face = "bold"))
#> Warning: Removed 3 rows containing missing values (geom_errorbar).

Создано в 2018-05-04 пакетом представ (v0.2.0).

0 голосов
/ 04 мая 2018

Похоже, вы хотите использовать функцию фасетирования ggplot. Некоторые небольшие изменения в вашем коде дают вам грани, удаляют ось X и добавляют точки:

ggplot(dataOR, aes(fill=outcome, y=OR, x=factor(1))) + #Reset x-axis
  geom_bar(position="dodge", stat="identity") + 
  scale_fill_brewer(palette="Blues")+
  geom_errorbar(aes(ymin=ICinf, ymax=ICsup), width=.2,position=position_dodge(.9))+
  geom_point(position=position_dodge(.9)) + #Add points
  geom_hline(yintercept=1) + 
  facet_wrap(~groupe, nrow = 1) +  #Add facets
  scale_x_discrete(name = NULL, labels = NULL, breaks = NULL) #Remove labels

enter image description here


В соответствии с комментарием ниже, чтобы изменить цвета определенных групп, которые вы можете сделать:

colors = c(brewer.pal(3, "Blues"), rep(brewer.pal(3,"Reds"), 3), rep(brewer.pal(3, "Blues"), 4))

ggplot(dataOR, aes(fill=interaction(outcome, groupe), y=OR, x=factor(1))) +
  geom_bar(position="dodge", stat="identity") + 
  scale_fill_manual(values = colors, guide = FALSE) +
  geom_errorbar(aes(ymin=ICinf, ymax=ICsup), width=.2,position=position_dodge(.9))+
  geom_point(position=position_dodge(.9)) +
  geom_hline(yintercept=1) + 
  facet_wrap(~groupe, nrow = 1) + 
  scale_x_discrete(name = NULL, labels = NULL, breaks = NULL)

enter image description here

...