2015-10-14 5 views
0

Je suis en train de dessiner un certain nombre de diagrammes à bulles superposés à des cartes en utilisant draw.bubble du paquet mapplots. Les données consistent en une densité d'animaux pour un nombre d'espèces différentes dans des emplacements différents, par ex.L'échelle des bulles est-elle cohérente sur plusieurs cartes à l'aide de draw.bubble dans les mapplots?

Species Density Lat Lon 
A  10  55.4 -7.8 
A  12  55.4 -7.7 
A  15  55.4 -7.6 
B  20  55.4 -7.8 
B  22  55.4 -7.7 
B  25  55.4 -7.6 

etc ....

Je dessine une carte séparée pour chaque espèce en utilisant le code suivant:

xmin <- min(Data$Long) 
xmax <- max(Data$Long) 
ymin <- min(Data$Lat) 
ymax <- max(Data$Lat) 

xlim <- c(xmin,xmax) 
ylim <- c(ymin,ymax) 

windows() 

basemap(xlim, ylim) 

draw.bubble(Data$Long[Data$Species=="A"],Data$Lat[Data$Species=="A"], 
     Data$Density[Data$Species=="A"], maxradius=0.15, pch=21, bg="#00FF0050") 

legend.bubble("bottomright", z=max(Data$Density[Data$Species=="A"]), maxradius=0.15, inset=0.02, bg="lightblue", 
      txt.cex=0.8, pch=21, pt.bg="#00FF0050") 

Le problème que j'ai est que la taille des bulles pour chaque parcelle séparée est déterminée par la plus grande valeur de densité pour chaque espèce, donc quand je lance ce code pour plusieurs espèces, en produisant plusieurs parcelles, la taille des bulles dans chaque parcelle n'est pas sur la même échelle. Donc, je voulais savoir s'il y avait de toute façon que je puisse spécifier une échelle cohérente pour les bulles sur l'ensemble de mes parcelles?

Répondre

1

Vous devez d'abord calculer le maximum de toutes les espèces

totalmax <- max(Data$Density) 

Ensuite, pour chaque parcelle vous calculez le maximum de cette espèce

speciesmax <- max(Data$Density[Data$Species=="C"]) 

Calculer la bubblesize relative:

bubblesize = 0.15 * speciesmax/totalmax 

Et utilisez cela dans votre intrigue:

draw.bubble(Data$Long[Data$Species=="A"],Data$Lat[Data$Species=="A"], 
     Data$Density[Data$Species=="A"], maxradius=bubblesize, pch=21, bg="#00FF0050") 
+0

Merci, mon cerveau de maths m'a totalement échoué sur celui-ci mais c'est parfait !! –