Camenber (burk !) d'un échantillon superposé à la population

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Christophe Genolini
Messages : 680
Enregistré le : 12 Juin 2006, 21:37
Contact :

Camenber (burk !) d'un échantillon superposé à la population

Messagepar Christophe Genolini » 06 Nov 2018, 09:29

Bonjour

Je cherche un faire un camembert (désolé, je n'ai pas le choix) qui représenterait à la fois la population globale et un échantillon. Pour cela, deux solutions :

1/ On trace le camembert de la population (en gris) puis par dessus, on trace celui de l'échantillon EN RESPECTANT les angles de la population, mais en mettant des portions de camembert de rayon plus ou moins long :
Image

2/ On trace le camembert de l'échantillon (couleur), puis par dessous, on trace celui de la population en respectant les angles de l'échantillon, mais en mettant des portions de camembert de rayon plus ou moins long :
Image

Deux questions :
1/ Est ce que vous avez déjà vu se genre de représentation ?
2/ Est-ce que vous savez si R permet de faire ca ?

Bonne journée
Christophe

Stéphane Adamowicz
Messages : 206
Enregistré le : 07 Mar 2012, 10:13
Contact :

Re: Camenber (burk !) d'un échantillon superposé à la population

Messagepar Stéphane Adamowicz » 06 Nov 2018, 09:45

Bonjour Christophe,

Non, je n'ai jamais vu ce genre de camembert à plusieurs couches,

et franchement, ce n'est pas Burk !, mais Burk, Burk, Burk, Burk ...

Il me semble qu'on bat là tous les records d'illisibilité. Les diagrammes sont censés donner une vision simple, et là, je la trouve incompréhensible.

cordialement,

Stéphane
Stéphane Adamowicz
INRA, UR 1115 Plantes et Systèmes de Culture Horticoles (PSH)
domaine St Paul, site agroparc
84914 Avignon, cedex 9

Guillaume Devailly
Messages : 17
Enregistré le : 22 Déc 2017, 12:31

Re: Camenber (burk !) d'un échantillon superposé à la population

Messagepar Guillaume Devailly » 06 Nov 2018, 11:55

Le plot souhaité est tellement moche et illisible que je me devais d'essayer.
Voilà une solution avec ggplot2 et cowplot, j'ai bien galéré, du coup je ne commente pas le code. :p
J'imagine qu'il doit y avoir plus simple en n'utilisant pas ggplot2.
Pour l'autre option, il faut essayer d'échanger les variables et d'adapter quelques constantes...

Image

Code : Tout sélectionner

library(tidyverse)
library(cowplot)

mdata <- tibble(
    categorie = LETTERS[1:3],
    echantillon = c(0.33, 0.47, 0.20),
    population = c(0.58, 0.38, 0.04)
) %>% mutate(
    cumech = cumsum(lag(echantillon, default = 0)),
    cumpop = cumsum(lag(population, default = 0)),
    categorie = forcats::fct_rev(factor(categorie))
)

inner_pie <- ggplot(data = mdata) +
    geom_col(aes(x = 1, y = echantillon, fill = categorie), colour = "black") +
    geom_text(aes(x = 1, y = cumech + echantillon/2, label = categorie), size = 12, hjust = 0.5, vjust = 0.5) +
    coord_polar(theta = "y", ) +
    scale_fill_viridis_d(begin = 0.2) +
    theme_void() +
    theme(legend.position = "none")

outer_pie <- ggplot(data = mdata) +
    geom_rect(aes(
        xmin = 1,
        xmax = 1 + population,
        ymin = cumech,
        ymax = echantillon + cumech,
        fill = categorie
    ), colour = "black") +
    xlim(c(0, 2)) +
    coord_polar(theta = "y") +
    scale_fill_viridis_d(alpha = 0.3) +
    theme_void() +
    theme(legend.position = "none")

ggdraw() +
    draw_plot(outer_pie) +
    draw_plot(inner_pie, x = 0.25, y = 0.25, width = 0.5, height = 0.5)

jean lobry
Messages : 649
Enregistré le : 17 Jan 2008, 20:00
Contact :

Re: Camenber (burk !) d'un échantillon superposé à la population

Messagepar jean lobry » 06 Nov 2018, 17:36

Bonjour Christophe,

j'ai déjà vu ce genre d'horreur dans la littérature, mais je ne dévoilerai mes sources que sous la torture !

Amicalement,

jean

EDIT : pour que Jacques Bertin ne se retourne pas dans sa tombe, j'ai dit ici «littérature» puisque nous sommes sur un forum francophone, mais l'orthographe «literature» serait sans doute plus conforme aux sources vu qu'elles ne se sont exprimées que dans la langue des brexiteurs.

Mickael Canouil
Messages : 440
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Camenber (burk !) d'un échantillon superposé à la population

Messagepar Mickael Canouil » 07 Nov 2018, 10:27

Bonjour,

basée sur la proposition de Guillaume, mais un code plus simple en ggplot2. (à noter que les proportions sont en "y" au lieu d'être à la fois en "y" et en tant "qu'angle")

Code : Tout sélectionner

library(tidyverse)

mdata <- tibble(
  class = rep(LETTERS[1:3], 2),
  y = c(0.58, 0.38, 0.04, 0.33, 0.47, 0.20),
  pop = rep(c("Population", "Sample"), each = 3)
) %>%
  group_by(pop) %>%
  mutate(
    cum = cumsum(lag(y, default = 0))
  ) %>%
  ungroup() %>%
  mutate(label = ifelse(pop=="Population", class, NA))


Code : Tout sélectionner

ggplot(data = mdata) +
  geom_bar(
    mapping = aes(x = class, y = y, fill = class, alpha = pop),
    stat = "identity",
    width = 1,
    position = "stack",
    colour = "white"
  ) +
  geom_text(
    mapping = aes(x = class, y = y + cum/2, label = label, colour = class),
    size = 12,
    hjust = 0.5,
    vjust = 0.5,
    show.legend = FALSE
  ) +
  scale_alpha_manual(name = NULL, values = c(0.5, 1)) +
  scale_fill_viridis_d(begin = 0.2, end = 0.8) +
  scale_colour_viridis_d(begin = 0.2, end = 0.8) +
  coord_polar() +
  theme_void() +
  guides(fill = "none")


Image


EDIT: en "y", les proportions entre les "pop", et l' "angle" la proportion dans l'échantillon

Code : Tout sélectionner

mdata[["xmin"]] <- rep(filter(mdata, pop=="Sample")[["cum"]], length(unique(mdata[["pop"]])))
mdata[["xmax"]] <-  rep(filter(mdata, pop=="Sample")[["y"]], length(unique(mdata[["pop"]]))) + mdata[["xmin"]]
mdata[["ymin"]]  <- c(filter(mdata, pop=="Sample")[["y"]], rep(0, length(filter(mdata, pop=="Sample")[["y"]])))
mdata[["ymax"]]  <- mdata[["ymin"]] + mdata[["y"]]


ggplot(data = mdata) +
  geom_rect(
    mapping = aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax, fill = class, alpha = pop),
    colour = "white"
  ) +
  geom_text(
    mapping = aes(x = (xmin+xmax)/2, y = y + cum/2, label = label, colour = class),
    size = 12,
    hjust = 0.5,
    vjust = 0.5,
    show.legend = FALSE
  ) +
  scale_alpha_manual(name = NULL, values = c(0.5, 1)) +
  scale_fill_viridis_d(begin = 0.2, end = 0.8) +
  scale_colour_viridis_d(begin = 0.2, end = 0.8) +
  coord_polar() +
  theme_void() +
  guides(fill = "none")


Image

Cordialement,
Mickaël

Christophe Genolini
Messages : 680
Enregistré le : 12 Juin 2006, 21:37
Contact :

Re: Camenber (burk !) d'un échantillon superposé à la population

Messagepar Christophe Genolini » 07 Nov 2018, 10:58

Merci pour vos réponses. A leur lumière, premier élément est que, a priori, ca n'existe pas en R.

@jean : je te rassure, je ne l'ai pas inventé, je sais que ca existe. Mais ca existe du coté informaticien, chez les data-vizualisateur. Visiblement, ca n'existe pas chez les statisticiens (et ca n'est pas prêt d'exister !)

@tout-les-anti-camembert : j'ai longtemps été membre du club, j'ai même enseigné de l'anticamemberisme pendant 12 ans... Et puis je suis tombé sur un camembert que était PLUS informatif que le barplot associé ! Il s'agit du résultat des élections avec 8 ou 10 partis (qui sont ordonnées de l’extrême droite à l’extrême gauche), où l'important est de savoir quelle coalition peut avoir 50%. Dans ce cas, ajouter mentalement des colonnes les unes au autre et déterminer si ca fait plus de 50% est très compliqué. Alors que sur un clacos, ajouter des angles et voir si ca fait plus de 180° est trivial.
Image Genre avec qui D doit s'associer pour avoir la majorité ? D+C+B ne suffiront pas. Par contre, D+C+E ou D+E+F, ou D+C+B+A auront les 50%.

Donc, même si je continue a ne pas aimer les clacos (pour toutes les raisons que tout le monde a eu la sagesse de ne pas lister, parce qu'on est entre statisticien et qu'on les connait tous !), je les déteste avec moins de ferveur qu'avant...

Christophe

jean lobry
Messages : 649
Enregistré le : 17 Jan 2008, 20:00
Contact :

Re: Camenber (burk !) d'un échantillon superposé à la population

Messagepar jean lobry » 08 Nov 2018, 17:32

Bonjour Christophe,

ton exemple est intéressant parce que justement Jacques Bertin faisait une exception, non pas pour les clacos, mais pour les demi-clacos, c'est à dire pour les représentations de type hémicycle parlementaire. Il vaut mieux un demi-clacos dans ton cas, sinon tu vas faire jouxter l'extrême-droite et l'extrême-gauche, c'est un jeu dangereux...

Amicalement,

jean lobry

EDIT : voici la citation exacte, c'est page 105 de "la graphique et le traitement graphique de l'information" ISBN 2-08-211112-1. « Cette construction [clacos] est inutile dans les problèmes à plus d'une ligne (7, p. 110) sauf dans des cas exceptionnels comme par exemple la répartition des sièges dans deux assemblées législatives (13) où la verticale correspondant à 50 % détermine la majorité. »

Christophe Genolini
Messages : 680
Enregistré le : 12 Juin 2006, 21:37
Contact :

Re: Camenber (burk !) d'un échantillon superposé à la population

Messagepar Christophe Genolini » 08 Nov 2018, 17:37

C'est vrai que ca pose problème. Je crois néanmoins que je préférerais le clacos avec une barre noire qui séparerait clairement les deux extrêmes. Parce que sur un demi clacos, il devient beaucoup plus difficile de dire quand une coalition franchit les 50% (50% = un angle de 90°...), ce qui est pour moi le seul intérêt de cette représentation graphique.

jean lobry
Messages : 649
Enregistré le : 17 Jan 2008, 20:00
Contact :

Re: Camenber (burk !) d'un échantillon superposé à la population

Messagepar jean lobry » 08 Nov 2018, 18:05

Si tu considères que les partis peuvent être ordonnés selon un axe droite-gauche, et que les alliances ne peuvent se faire que par regroupement de classes contiguës, alors le demi-clacos est assez efficace. Je ne sais pas comment reproduire l'exemple de Bertin (13), mais, en gros, ça saute aux yeux qui fait la loi.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité