Je galère depuis quelques temps sur un problème qui me parassait simple à la base...
Tout d'abord, mon fichier de données simplifié:
Code : Tout sélectionner
id TAXO altitude
1 1 sp1 54
2 2 sp2 NA
3 3 sp1 256
4 4 sp1 2
5 5 sp3 NA
6 6 sp4 30
7 7 sp4 59
8 8 sp2 312
9 9 sp4 756
10 10 sp4 18
Voici la sortie de dput()
Code : Tout sélectionner
structure(list(id = 1:10, TAXO = structure(c(1L, 2L, 1L, 1L,
3L, 4L, 4L, 2L, 4L, 4L), .Label = c("sp1", "sp2", "sp3", "sp4"
), class = "factor"), altitude = c(54L, NA, 256L, 2L, NA, 30L,
59L, 312L, 756L, 18L)), class = "data.frame", row.names = c(NA,
-10L))
De ce fichier, j'ai obtenu un certain nombre de graphes: histogramme du nombre de données par classe d'altitude pour toutes les données et pour chaque espèce (TAXO).
Ex:
Code : Tout sélectionner
library(ggplot2)
library(grid)
library(tidyverse)
dim_df <- as.factor(dim(data[!is.na(data$altitude),])[1])
p_alt <- ggplot(data, aes(altitude, fill= ..x..)) + geom_histogram(breaks = seq(0,3000, by=100), show.legend = FALSE) + scale_fill_gradientn(colors = terrain.colors(30)) + coord_flip() + xlab("altitude") + ylab("nombre d’observations") + theme(axis.title.x = element_text(size=16),axis.text.x = element_text(size = 14),axis.title.y = element_text(size=16),axis.text.y = element_text(size = 14), panel.grid.minor.x=element_blank(),panel.grid.major.x=element_blank())+ annotation_custom(grobTree(textGrob(label= paste("n =", dim_df, sep=" "), x=0.84, y=0.95, hjust=0, vjust= 0, gp=gpar(fontsize=15))))
print(p_alt)
Maintenant, je bloque sur le dernier graphe que je souhaite produire: histogramme du nombre d'espèces par classe d'altitude.
Au mieux, j'ai obtenu ce plot:
Code : Tout sélectionner
#filtre des données pour altitude != NA
df2 <- dplyr::filter(data, !is.na(altitude))
#discrétisation de la variable "altitude" par pas de 100m
df2$alt_class<-cut(df2$altitude, seq(0,3000, by=100))
#nombre de valeur unique par classe d'altitude
species_counts <- df2 %>%
group_by(df2$alt_class) %>%
summarise(species_number = n_distinct(TAXO))
dfsc<-as.data.frame(species_counts)
plot(dfsc)
Certes, j'obtiens une représentation graphique du résultat souhaité. Mais j'aimerais représenter les résultats sous le même format que l'exemple précédent...
Autre méthode essayée:
Code : Tout sélectionner
dfsc2 <- data.frame(altitude=unique(df2$alt_class), RichTax=sapply(unique(df2$alt_class), function(x){length(unique(df2$TAXO[df2$alt_class==x]))}))
Mais je me retrouve bloqué au même stade...
Le data frame obtenu (dfsc) est celui que je veux représenter sous forme d'un histogramme (geom_histogram), comme j'ai pu le faire pour les graphes précédents.
Mais là, je sèche complètement.
Auriez-vous une piste à exploiter svp?
Merci ! :)
Mat'