density - histograma ggplot r
ggplot_stat_density2d parcelas para distribución ecológica (1)
Mi enfoque para su pregunta es pragmático: simplemente ponga la capa de países del golfo sobre la distribución del mapa de calor. Esto cosecha el mapa de calor en consecuencia. Tenga en cuenta, sin embargo, que el mapa de calor todavía se calcula como si no hubiera sido recortado. Eso significa que el cálculo de la densidad no se limita solo al cuerpo de agua, sino que simplemente se recorta visualmente.
En aras de la reproducibilidad, el siguiente código asume que ha descomprimido el archivo .rar
proporcionado por @Hammao y ejecuta el código en la carpeta Persian Gulf
resultante.
# get sample data
sample.data <- read.csv("sample.data3.csv")
Ahora, necesitamos obtener las formas del país para los países del Golfo. Yo uso el paquete rworldmap
para esto.
# loading country shapes
library(rworldmap)
# download map of the world
worldmap <- getMap(resolution = "high") # note that for ''resolution="high"''
# you also need the "rworldxtra" pkg
# extract Persian Gulf countries...
gulf_simpl <- worldmap[worldmap$SOVEREIGNT == "Oman" |
worldmap$SOVEREIGNT == "Qatar" |
worldmap$SOVEREIGNT == "United Arab Emirates" |
worldmap$SOVEREIGNT == "Bahrain" |
worldmap$SOVEREIGNT == "Saudi Arabia" |
worldmap$SOVEREIGNT == "Kuwait" |
worldmap$SOVEREIGNT == "Iraq" |
worldmap$SOVEREIGNT == "Iran", ]
# ... and fortify the data for plotting in ggplot2
gulf_simpl_fort <- fortify(gulf_simpl)
# Now read data for the Persian Gulf, which we need to get the distances for
# the extension of the map
PG <- readOGR(dsn = ".", "iho")
PG <- readShapePoly("iho.shp")
PG <- fortify(PG)
Ahora, es simplemente una cuestión de trazar las capas en el orden correcto.
# generate plot
ggplot(sample.data) +
# first we plot the density...
stat_density_2d(aes(x = long, y = lat,
fill = ..level..),
geom="polygon",
alpha = 0.5) +
# ... then we plot the points
geom_point(aes(x = long, y = lat)) +
# gradient options
scale_fill_gradient(low = "green", high = "red") +
scale_alpha(range = c(0.00, 0.25), guide = FALSE) +
# and now put the shapes of the gulf states on top
geom_polygon(data = gulf_simpl_fort,
aes(x = long,
y = lat, group = group),
color = "black", fill = "white",
inherit.aes = F) +
# now, limit the displayed map only to the gulf
coord_equal(xlim = c(min(PG_fort$long), max(PG_fort$long)),
ylim = c(min(PG_fort$lat), max(PG_fort$lat))) +
theme_bw()
Intento trazar la distribución ecológica de algunas especies de organismos que estoy estudiando en el Golfo Pérsico / Árabe. Aquí hay una muestra de un código que he intentado:
Capa de Backround
library(ggplot2)
library(ggmap)
nc <- get_map("Persian Gulf", zoom = 6, maptype = ''terrain'', language = "English")
ncmap <- ggmap(nc, extent = "device")
Otras capas
ncmap+
stat_density2d(data=sample.data3, aes(x=long, y=lat, fill=..level.., alpha=..level..),geom="polygon")+
geom_point(data=sample.data3, aes(x=long, y=lat))+
geom_point(aes(x =50.626444, y = 26.044472), color="red", size = 4)+
scale_fill_gradient(low = "green", high = "red") + scale_alpha(range = c(0.00, 0.25), guide = FALSE)
pero, me gustaría utilizar el stat_density2d
para mostrar las distribuciones de cientos de especies (que se registran en columnas, por ejemplo, SP1 .... SPn) sobre el cuerpo de agua en lugar de solo mostrar la latitud y la longitud.
Además, ¿es posible restringir mi mapa de calor solo al cuerpo de agua? Agradeceré cualquier ayuda y recomendaciones que pueda obtener sobre esto, por favor