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