rm(list = ls())
library(ggplot2)
###################################################___1
ggplot(diamonds, aes(color, fill=cut)) + geom_bar() +
theme(legend.position="bottom")

########################################################__11
unique(diamonds$cut)
## [1] Ideal Premium Good Very Good Fair
## Levels: Fair < Good < Very Good < Premium < Ideal
ggplot(diamonds, aes(color, fill=cut)) + geom_bar() +
theme(legend.position="bottom") +
scale_fill_discrete(breaks=c("Ideal", "Premium", "Good" , "Very Good", "Fair"))

###################################################___2
ggplot(diamonds, aes(color, fill=cut)) + geom_bar() +
theme(legend.position="bottom") +
guides(fill=guide_legend(ncol=2))

#################################################____3
library(cowplot)
library(RColorBrewer)
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v tibble 3.1.6 v dplyr 1.0.7
## v tidyr 1.1.4 v stringr 1.4.0
## v readr 2.1.1 v forcats 0.5.1
## v purrr 0.3.4
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
cut_colors <-
setNames(brewer.pal(5, "Set1")
, levels(diamonds$cut))
full_plot <-
ggplot(diamonds, aes(color, fill=cut)) + geom_bar() +
scale_fill_manual(values = cut_colors) +
theme(legend.position="none")
full_plot

str(diamonds)
## tibble [53,940 x 10] (S3: tbl_df/tbl/data.frame)
## $ carat : num [1:53940] 0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23 ...
## $ cut : Ord.factor w/ 5 levels "Fair"<"Good"<..: 5 4 2 4 2 3 3 3 1 3 ...
## $ color : Ord.factor w/ 7 levels "D"<"E"<"F"<"G"<..: 2 2 2 6 7 7 6 5 2 5 ...
## $ clarity: Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..: 2 3 5 4 2 6 7 3 4 5 ...
## $ depth : num [1:53940] 61.5 59.8 56.9 62.4 63.3 62.8 62.3 61.9 65.1 59.4 ...
## $ table : num [1:53940] 55 61 65 58 58 57 57 55 61 61 ...
## $ price : int [1:53940] 326 326 327 334 335 336 336 337 337 338 ...
## $ x : num [1:53940] 3.95 3.89 4.05 4.2 4.34 3.94 3.95 4.07 3.87 4 ...
## $ y : num [1:53940] 3.98 3.84 4.07 4.23 4.35 3.96 3.98 4.11 3.78 4.05 ...
## $ z : num [1:53940] 2.43 2.31 2.31 2.63 2.75 2.48 2.47 2.53 2.49 2.39 ...
for_first_legend <-
diamonds %>%
filter(cut %in% c("Fair", "Good")) %>%
ggplot(aes(color, fill=cut)) + geom_bar() +
scale_fill_manual(values = c("#E41A1C", "#377EB8")
, name = "First Group")
for_first_legend

#unique(for_first_legend$cut)
for_second_legend <-
diamonds %>%
filter(cut %in% c("Very Good", "Premium", "Ideal")) %>%
ggplot(aes(color, fill=cut)) + geom_bar() +
scale_fill_manual(values = c("#4DAF4A", "#984EA3", "#FF7F00")
, name = "Second Group")
for_second_legend

plot_grid(
full_plot
, plot_grid(
get_legend(for_first_legend)
, get_legend(for_second_legend)
, nrow = 1
)
, nrow = 2
, rel_heights = c(8,2)
)

#output p1
ggsave(paste0(Sys.Date(),"-plot21.tiff"),
plot = last_plot(), device = NULL,
scale = 1, width = 10, height = 10, units ="cm",dpi = 300,
limitsize = TRUE,compression = "lzw")
#ref https://stackoverflow.com/questions/27803710/ggplot2-divide-legend-into-two-columns-each-with-its-own-title
#https://stackoverflow.com/questions/26872905/how-to-reorder-a-legend-in-ggplot2