Обзор
У меня есть два фрейма данных с именами 'mydf1' и 'mydf2' (см. Ниже), и я хотел бы создать два столбца с использованием geom_bar()
в пакете ggplot
.В идеале я хотел бы заполнить каждый барплот отдельным цветом, чтобы соответствовать легенде.
После построения обоих графиков я хотел бы построить их в одном и том же окне, используя plot_grid()
с использованием пакета cowplot
.
Я не совсем понимаю, как поместить эстетику в geom_bar()
вместе с другими командами для правильной работы.Во-первых, я создал Желаемый результат 1 , который хорошо визуализирует данные.
Однако я манипулировал этим кодом, чтобы получить отдельные цветные полосы с легендой.После запуска нового кода, как показано в Желаемый результат 2 (ниже) , некоторые визуальные компоненты графиков, показанных в «Желаемый график 1» , отсутствуют, например:
- Помечены отдельные столбцы, показывающие значения для Mean_Canopy_Index
- Заголовок для каждого столбца в шрифте 'New Times Roman'
- Правильный формат для x (Индекс урбанизации) и y (Имеется в виду под индексом Canopy Index) шрифтом «New Times Roman».
- В названии для каждого столбца есть выделенное курсивом слово для вида 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](https://i.stack.imgur.com/Jfid4.png)
Барплот для желаемого результата 2
Я произвел 'Desires Result 2' , используя R-код, показанный ниже.
![enter image description here](https://i.stack.imgur.com/1jdoH.png)
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")