--- title: "Perception : système visuel, marques et canaux, couleurs" author: "Antoine Neuraz" date: "10/30/2019" output: bookdown::html_document2: code_folding: hide --- ```{r, include=FALSE} library(ggplot2) library(tidyverse) library(see) library(patchwork) library(vizoR) seed = 44 ``` # Perception : système visuel, marques et canaux, couleurs ## TODO ## Types de marques ```{r} size <- list(100, 2) min_x <- 0 max_x <- 1 p_color <- generate_dataset_uniform( dataset_size = size, min_x = min_x, max_x = max_x, seed = seed ) %>% ggplot( data = ., aes( x = x, y = y, color = group ) ) + geom_point(size = 3) + scale_color_material_d() + theme_void_complete() + labs(subtitle= "Couleur") #p_color ``` ```{r} p_angle <- generate_dataset_uniform( dataset_size = size, min_x = min_x, max_x = max_x, seed = seed ) %>% mutate(angle = ifelse(group == "group1", 0, pi / 3)) %>% ggplot( data = ., aes( x = x, y = y, angle = angle ) ) + geom_spoke( radius = 0.04, size = .8 ) + theme_void_complete() + scale_color_material_d() + ggtitle("Angle") #p_angle ``` ```{r} p_size <- generate_dataset_uniform( dataset_size = size, min_x = min_x, max_x = max_x, seed = seed ) %>% mutate(size = ifelse(group == "group1", 2, 3)) %>% ggplot( data = ., aes( x = x, y = y, size = size ) ) + geom_point() + theme_void_complete() + scale_size(range = c(1, 3)) + ggtitle("Taille") #p_size ``` ```{r} p_grey <- generate_dataset_uniform( dataset_size = size, min_x = min_x, max_x = max_x, seed = seed ) %>% ggplot( data = ., aes( x = x, y = y, color = group ) ) + geom_point(size = 3) + theme_void_complete() + scale_color_manual(values = c('group2' = 'black', 'group1' = 'lightgrey')) + ggtitle("Luminosité") #p_grey ``` ```{r} dt <- generate_dataset_uniform( dataset_size = size, min_x = min_x, max_x = max_x, seed = seed ) %>% mutate(curvature = ifelse(group == "group1", 0, 1)) p_curve <- dt %>% ggplot( data = ., aes( x = x, y = y, xend = x, yend = y+max_x/10, curvature = curvature ) ) + geom_curve(data = subset(dt, group == 'group1'), curvature = 0) + geom_curve(data = subset(dt, group == 'group2'), curvature = .7) + scale_color_material_d() + theme_void_complete() + ggtitle("Courbe") #p_curve ``` ```{r} dt <- generate_dataset_uniform( dataset_size = size, min_x = min_x, max_x = max_x, seed = seed ) p_box <- dt %>% ggplot( data = ., aes( x = x, xend = x+max_x/50, y = y, yend = y ) ) + geom_point(data = subset(dt, group=='group2'),aes(x = x+max_x/100), shape = 22, size = 4) + geom_segment() + #geom_curve(data = subset(dt, group == 'group2'), curvature = .7) + scale_color_material_d() + theme_void_complete() + ggtitle("Encapsulage") #p_box ``` ```{r} p_shape <- generate_dataset_uniform( dataset_size = size, min_x = min_x, max_x = max_x, seed = seed ) %>% ggplot( data = ., aes( x = x, y = y, shape = group ) ) + geom_point(size = 3) + #scale_color_manual(values = c('group2' = 'black', 'group1' = 'lightgrey')) + theme_void_complete() + ggtitle("Forme") #p_shape ``` ```{r} p_fill <- generate_dataset_uniform( dataset_size = size, min_x = min_x, max_x = max_x, seed = seed ) %>% ggplot( data = ., aes( x = x, y = y, fill = group ) ) + geom_point(size = 3, shape = 21) + scale_fill_manual(values = c('group2' = 'black', 'group1' = 'white')) + theme_void_complete() + ggtitle("Remplissage") #p_fill ``` ```{r encode, fig.height=12, fig.cap='Exemples d\'encodage', fig.align='center'} p_color + p_angle + p_size + p_grey + p_curve + p_box + p_shape + p_fill + plot_layout(ncol = 2) ``` ## Mappings in ggplot ```{r} #theme_set(theme_void_real()) aes_pos <- ggplot() + geom_segment(data = data.frame(x = c(0, 0.5), xend = c(1, 0.5), y = c(0.5, 0), yend = c(0.5, 1)), aes(x = x, y = y, xend = xend, yend = yend), arrow = arrow(length = grid::unit(12, "pt")), size = .75) + annotate("text", .5, 1, size = 8, vjust = 1, hjust = 2.5, label = "y") + annotate("text", 1, .5, size = 8, vjust = 2, hjust = 1, label = "x") + theme_void() + theme(legend.position = 'none') + coord_cartesian(xlim = c(-.2, 1.2), ylim = c(-.2, 1.2)) + labs(title = 'position') aes_color <- ggplot() + geom_tile(data = data.frame(x = 0.15 + .2333*(0:3)), aes(x, y = .5, fill = factor(x)), width = .2, height = .6) + theme_void() + theme(legend.position = 'none') + scale_fill_viridis_d() + labs(title = 'couleur') aes_shape <- ggplot() + geom_point(data = data.frame(x = (.5 + 0:3)/4), aes(x, y = .5, shape = factor(x)), size = 8, fill = "grey80") + theme_void() + theme(legend.position = 'none') + scale_shape_manual(values = 21:24) + expand_limits(x=c(0,1)) + labs(title = 'forme') aes_size <- ggplot() + geom_point(data = data.frame(x = (.5 + 0:3)/4), aes(x, y = .5, size = factor(x)), shape = 21, fill = "grey80") + theme_void() + theme(legend.position = 'none') + scale_size_manual(values = c(2, 5, 8, 11)) + expand_limits(x=c(0,1)) + labs(title = 'taille') aes_lwd <- ggplot() + geom_segment(data = data.frame(x = rep(0.05, 4), xend = rep(0.95, 4), y = (1.5 + 0:3)/6, yend = (1.5 + 0:3)/6, size = 4:1), aes(x = x, y = y, xend = xend, yend = yend, size = size)) + theme_void() + theme(legend.position = 'none') + scale_size_identity() + labs(title = 'épaisseur de ligne') aes_ltp <- ggplot() + geom_segment(data = data.frame(x = rep(0.05, 4), xend = rep(0.95, 4), y = (1.5 + 0:3)/6, yend = (1.5 + 0:3)/6, linetype = 4:1), aes(x = x, y = y, xend = xend, yend = yend, linetype = linetype), size = 1) + theme_void() + theme(legend.position = 'none') + scale_linetype_identity() + labs(title = 'type de ligne') aes_pos + aes_shape + aes_size + aes_color + aes_lwd + aes_ltp +plot_layout(nrow=2) ``` figure from [https://serialmentor.com/dataviz/aesthetic-mapping.html]() ## scales in ggplot ```{r, fig.asp = .2} df <- data.frame(x = c(1:4)) scale_num <- ggplot(df, aes(x)) + geom_point(size = 3, color = "#0072B2", y = 1) + scale_y_continuous(limits = c(0.8, 1.2), expand = c(0, 0), breaks = 1, label = "position ") + scale_x_continuous(limits = c(.7, 4.4), breaks = 1:5, labels = c("1", "2", "3", "4", "5"), name = NULL, position = "top") + theme_minimal_grid() + theme(axis.ticks.length = grid::unit(0, "pt"), axis.text = element_text(size = 14), axis.title.y = element_blank(), axis.ticks.y = element_blank()) scale_color <- ggplot(df, aes(x, color = factor(x), fill = factor(x))) + geom_point(size = 5, shape = 22, y = 1) + scale_y_continuous(limits = c(0.8, 1.2), expand = c(0, 0), breaks = 1, label = "color ") + scale_x_continuous(limits = c(.7, 4.4), breaks = NULL) + scale_color_manual(values = c("#0082A6", "#4EBBB9", "#9CDFC2", "#D8F0CD"), guide = "none") + scale_fill_manual(values = c("#0082A6", "#4EBBB9", "#9CDFC2", "#D8F0CD"), guide = "none") + theme_minimal() + theme(axis.ticks.length = grid::unit(0, "pt"), axis.text.x = element_blank(), axis.text.y = element_text(size = 14), axis.title = element_blank(), axis.ticks = element_blank(), panel.grid.major = element_blank()) scale_shape <- ggplot(df, aes(x, shape = factor(x))) + geom_point(size = 4, color = "grey30", y = 1, fill = "grey80") + scale_y_continuous(limits = c(0.8, 1.2), expand = c(0, 0), breaks = 1, label = "shape ") + scale_x_continuous(limits = c(.7, 4.4), breaks = NULL) + scale_shape_manual(values = 21:24, guide = "none") + theme_minimal() + theme(axis.ticks.length = grid::unit(0, "pt"), axis.text.x = element_blank(), axis.text.y = element_text(size = 14), axis.title = element_blank(), axis.ticks = element_blank(), panel.grid.major = element_blank()) scale_num + scale_shape + scale_color + plot_layout(ncol = 1) ``` figure from [https://serialmentor.com/dataviz/aesthetic-mapping.html]()