Управление визуальной графикой в ​​ggplot (): geom_bar () + Создание легенды с помощью scale_fill_brewer + plot_grid () с использованием пакета Cowplot в R - PullRequest
0 голосов
/ 06 февраля 2019

Обзор

У меня есть два фрейма данных с именами 'mydf1' и 'mydf2' (см. Ниже), и я хотел бы создать два столбца с использованием geom_bar() в пакете ggplot.В идеале я хотел бы заполнить каждый барплот отдельным цветом, чтобы соответствовать легенде.

После построения обоих графиков я хотел бы построить их в одном и том же окне, используя plot_grid() с использованием пакета cowplot.

Я не совсем понимаю, как поместить эстетику в geom_bar() вместе с другими командами для правильной работы.Во-первых, я создал Желаемый результат 1 , который хорошо визуализирует данные.

Однако я манипулировал этим кодом, чтобы получить отдельные цветные полосы с легендой.После запуска нового кода, как показано в Желаемый результат 2 (ниже) , некоторые визуальные компоненты графиков, показанных в «Желаемый график 1» , отсутствуют, например:

  1. Помечены отдельные столбцы, показывающие значения для Mean_Canopy_Index
  2. Заголовок для каждого столбца в шрифте 'New Times Roman'
  3. Правильный формат для x (Индекс урбанизации) и y (Имеется в виду под индексом Canopy Index) шрифтом «New Times Roman».
  4. В названии для каждого столбца есть выделенное курсивом слово для вида Quercus petraea

Если у кого-нибудь есть какие-либо предложения о том, как объединить Желаемый участок 1 и Желаемый участок 2, я был быглубоко признателен.

Желаемый результат 1

В идеале, я хотел бы создать тот же график, что и в 'Желаемый результат 1' , носодержащие разноцветные полосы и легенду, как видно из 'Желаемый результат 2'

Я создал оба столбца, как показано в 'Желаемый результат 1' (ниже) с R-код, показанный ниже для желаемого результата 1 , показан.Единственная разница между R-кодом для Желаемый результат 1 и Желаемый результат 2 - это команды в функции geom_bar.

R-код, используемый для получения желаемого результата 1

Canopy_Urban_2 <- ggplot(mydf2, 
                         aes(x = Urbanisation_index, y = Canopy_Index_Mean)) +
  geom_bar(stat="identity", color="steelblue", fill="steelblue", width=0.5) +
  labs(title=plottitle2,
       x="Categories of Urbansiation Index",
       y="Mean Canopy Index (%)",
       size=13)+
  geom_text(aes(label = sprintf("%.1f", Canopy_Index_Mean)),
            vjust=1.6,
            color="white",
            size=3.5)+
  theme(axis.text.x = element_text(angle = 1, hjust = 1), 
        text = element_text(size=12, family = "Times New Roman")) + 
  theme(panel.background = element_blank(), 
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        panel.border = element_blank()) + 
  theme(axis.line.x = element_line(color="black", size = 0.8),
        axis.line.y = element_line(color="black", size = 0.8))

Барплот для желаемого результата 1 enter image description here

Барплот для желаемого результата 2

Я произвел 'Desires Result 2' , используя R-код, показанный ниже.

enter image description here

R-код для требуемого результата 2:

Пакеты

library(ggplot2)
library(cowplot)
library(RColorBrewer)

Курсивом заголовок для обоих графиков

##Produce an object called Quercus petraea
word='Quercus petraea'

##Produce an object for the main title with the italicised species name
plottitle2 <- substitute('Barplot of Mean Canopy Index (%) for Categories of the Urbanisation Index for ' ~ italic(x), 
                         list(x=word))

##Importing fonts onto the hard drive
library(extrafont)
font_import()

Барплот 1 для кадра данных 1

barplot1 <- ggplot(mydf.1, 
                   aes(x = Urbanisation_index, y = Canopy_Index_Mean)) +
  geom_bar(stat="identity", aes(fill = factor(Urbanisation_index)), width=0.5,
  labs(title=plottitle2,
       x="Categories of Urbansiation Index",
       y="Mean Canopy Index (%)",
       size=13)+
  geom_text(aes(label = sprintf("%.1f", Canopy_Index_Mean)),
            vjust=1.6,
            color="white",
            size=3.5)+
  theme(axis.text.x = element_text(angle = 1, hjust = 1), 
        text = element_text(size=12, family = "Times New Roman")) + 
  theme(panel.background = element_blank(), 
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        panel.border = element_blank()) + 
  theme(axis.line.x = element_line(color="black", size = 0.8),
        axis.line.y = element_line(color="black", size = 0.8)))

Заполните бары и добавьте легенду для Boxplot1

Barplot1.1 <- barplot1 +
  scale_fill_brewer(palette = "Dark2", 
                    name="Urbanisation Index", 
                    breaks=c("1", "2", "3", "4"),
                    labels=c("Urban", "Suburban", "Village/Small Town", "Rural"))

Barplot 2 для datafame 2

barplot2 <- ggplot(mydf.2, 
                   aes(x = Urbanisation_index, y = Canopy_Index_Mean)) +
  geom_bar(stat="identity", aes(fill = factor(Urbanisation_index)), width=0.5,
  labs(title=plottitle2,
       x="Categories of Urbansiation Index",
       y="Mean Canopy Index (%)",
       size=13)+
  geom_text(aes(label = sprintf("%.1f", Canopy_Index_Mean)),
            vjust=1.6,
            color="white",
            size=3.5)+
  theme(axis.text.x = element_text(angle = 1, hjust = 1), 
        text = element_text(size=12, family = "Times New Roman")) + 
  theme(panel.background = element_blank(), 
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        panel.border = element_blank()) + 
  theme(axis.line.x = element_line(color="black", size = 0.8),
        axis.line.y = element_line(color="black", size = 0.8)))

Заполните бары и добавьте легенду для Boxplot 2

 Barplot2.2 <- barplot2 +
   scale_fill_brewer(palette = "Dark2", 
                     name="Urbanisation Index", 
                     breaks=c("1", "2", "3", "4"),
                     labels=c("Urban", "Suburban", "Village/Small Town", "Rural"))

Объедините Barplot 1 и Barplot 2, используя plot_grid ()

plot_grid(Barplot1.1 + ggtitle("A: Observation Period 1"),
          Barplot2.2 + ggtitle("B: Observation Period 2"), 
          align = "v",
          label_fontface="bold",
          label_fontfamily="Times New Roman",
          ncol = 1,
          nrow = 2)

Данные

mydf.1 <- 
  structure(list(Urbanisation_index = c(2, 2, 4, 4, 3, 3, 4, 4, 4, 2, 4, 3, 4, 4, 1, 
                                  1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 
                                  2, 2, 4, 4, 3, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 
                                  2, 1, 4, 4, 4, 4, 4, 4, 4), 
                 Canopy_Index_Mean = c(65, 75, 55, 85, 85, 85, 95, 85, 85, 45, 65, 75, 75, 
                            65, 35, 75, 65, 85, 65, 95, 75, 75, 75, 65, 75, 65, 
                            75, 95, 95, 85, 85, 85, 75, 75, 65, 85, 75, 65, 55, 
                            95, 95, 95, 95, 45, 55, 35, 55, 65, 95, 95, 45, 65, 
                            45, 55)), 
            row.names = c(NA, -54L), class = "data.frame")

mydf.2 <- 
  structure(list(Urbanisation_index = c(2, 2, 4, 4, 3, 3, 4, 4, 4, 3, 4, 4, 4, 4, 1, 
                                  1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 
                                  2, 2, 4, 4, 3, 2, 2, 2, 2, 2, 2, 1, 1, 4, 4, 
                                  4, 4, 4, 4, 4), 
                 Canopy_Index_Mean = c(5, 45, 5, 5, 5, 5, 45, 45, 55, 15, 35, 45, 5, 5, 5, 
                            5, 5, 5, 35, 15, 15, 25, 25, 5, 5, 5, 5, 5, 5, 15, 
                            25, 15, 35, 25, 45, 5, 25, 5, 5, 5, 5, 55, 55, 15, 
                            5, 25, 15, 15, 15, 15)), 
            row.names = c(NA, -50L), class = "data.frame")
...