3 votes

Créer une carte thermique du ratio

Tout le monde ! Je suis nouveau dans R et j'aimerais créer une carte thermique. Il y a un ensemble de données avec des colonnes :

  • X : coordonnée x
  • Y : coordonnée y
  • Pet_type : type d'animal (chat, chien, hamster, etc.)
  • Owner_type : type de propriétaire (homme adulte, femme adulte, enfant)

Petit ensemble de données :

Propriétaire

Animal de compagnie

X

Y

Homme

Chien

27.793

88.2128

Homme

Hamster

37.7177

87.9776

Femme

Chat

24.4547

87.3016

Enfant

Chat

36.464

84.9169

Enfant

Chien

29.4175

84.5433

Femme

Lézard

37.9588

83.9029

Homme

Cochon d'Inde

44.8986

82.7822

Enfant

Chien

26.6216

82.0757

Homme

Hamster

46.2332

81.9817

Homme

Chat

31.9716

81.7507

Femme

Chat

22.8606

80.9761

Enfant

Chien

29.744

80.7988

Enfant

Lézard

32.2393

80.35

Femme

Cochon d'Inde

38.92

78.8604

Homme

Chien

39.42

78.3604

Enfant

Hamster

32.2632

87.8267

Quelles seraient les étapes à suivre pour créer une carte thermique montrant le ratio d'un animal spécifique par rapport à tous les animaux de cet emplacement spécifique ? Par exemple : Je veux créer une carte thermique de la densité des chats et si le bac est composé de 20 animaux et que 10 d'entre eux sont des chats, la valeur du bac est de 0,5 ou 50 %, etc.

J'utilise ggplot et j'ai réussi à voir le nombre total d'animaux dans chaque case. Quelles manipulations dois-je effectuer sur le tableau avant de le transmettre à ggplot ?

df %>% 
  ggplot(aes(X, Y))+
  geom_bin_2d(bins=15)

This is how far I got

J'ai du mal à comprendre comment créer une déclaration indiquant que je veux voir le rapport entre les chats et tous les animaux de compagnie dans tous les bacs.

Donc oui, j'apprécierais vraiment que quelqu'un puisse m'aider à résoudre ce problème (probablement facile).

0voto

Dan Adams Points 868

Il existe plusieurs façons de procéder au binning 2D. L'une d'entre elles consiste à demander à {ggplot2} de créer les bacs pour vous, puis de les normaliser en fonction du nombre total et de les re-tracer. Ici, vous avez d'abord construit le graphique en utilisant le compte brut, puis vous avez extrait les cases calculées en utilisant la fonction ggplot2::ggplot_build() et faire un standard group_by() %>% mutate(fract = x/sum(x) . Ensuite, vous pouvez refaire l'intrigue.

library(tidyverse)

n <- 5000

d <- tibble(x = rnorm(n),
            y = rnorm(n),
            pet = fct_infreq(sample(
              c("cat", "dog", "fish", "bird"), n, T, prob = c(4, 3, 2, 1)
            )))
p <- d %>%
  ggplot(aes(x, y)) +
  geom_bin_2d(aes(fill = after_stat(count))) +
  facet_wrap( ~ pet)

# original plot of count per animal per bin
p

# get underlying data
e <- ggplot_build(p)$data[[1]]

# normalize and then re-plot
e %>% 
  mutate(pet = fct_recode(PANEL, cat = "1", dog = "2", fish = "3", bird = "4")) %>% 
  group_by(xbin, ybin) %>% 
  mutate(fract = count/sum(count)) %>% 
  ggplot(aes(xmin, ymin)) +
  geom_tile(aes(fill = fract)) +
  facet_wrap(~pet)

Créé le 2022-11-09 avec reprex v2.0.2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X