Comment définir l'utilisation ggplot2 de carte raster
Je voudrais faire un tracé à l'aide de R studio similaire à celui ci-dessous (créé à l'Arc Map)
J'ai essayé le code suivant:
# data processing
library(ggplot2)
# spatial
library(raster)
library(rasterVis)
library(rgdal)
#
test <- raster(paste(datafold,'oregon_masked_tmean_2013_12.tif',sep="")) # read the temperature raster
OR<-readOGR(dsn=ORpath, layer="Oregon_10N") # read the Oregon state boundary shapefile
gplot(test) +
geom_tile(aes(fill=factor(value),alpha=0.8)) +
geom_polygon(data=OR, aes(x=long, y=lat, group=group),
fill=NA,color="grey50", size=1)+
coord_equal()
La sortie de ce code ressemble à ceci:
Un couple de choses à noter. Tout d'abord, le bassin versant de fichiers sont manquants à partir de la version R. c'est très bien.
Deuxième, Le plus foncé sur fond gris dans le R de la parcelle est Pas de valeurs de Données. Dans l'Arc, ils ne s'affichent pas, mais dans le R elles s'affichent avec gplot. Ils ne s'affichent pas lorsque j'utilise "plot" de la trame du package:
plot(test)
Mes questions sont les suivantes:
- Comment puis-je me débarrasser de la dark gris NoData remplissez le gplot' exemple?
- Comment puis-je définir la légende (barre de couleur) raisonnable (comme dans la ArcMap et raster 'complot' légendes?)
- Comment puis-je contrôler la palette de couleurs?
À noter, j'ai essayé beaucoup de différentes versions de
scale_fill_brewer
scale_fill_manual
scale_fill_gradient
et ainsi de suite et ainsi de suite, mais j'ai des erreurs, par exemple
br <- seq(minValue(test), maxValue(test), len=8)
gplot(test)+
geom_tile(aes(fill=factor(value),alpha=0.8)) +
scale_fill_gradient(breaks = br,labels=sprintf("%.02f", br)) +
geom_polygon(data=OR, aes(x=long, y=lat, group=group),
fill=NA,color="grey50", size=1)+
coord_equal()
Regions defined for each Polygons
Error: Discrete value supplied to continuous scale
Enfin, une fois que j'ai une solution pour le tracé de l'une de ces cartes, je voudrais tracer plusieurs cartes sur une figure et de créer une seule barre de couleur pour l'ensemble du groupe (c'est à dire une barre de couleur pour toutes les cartes), et je voudrais être en mesure de contrôler l'emplacement de la barre de couleur est situé, et que la taille de la barre de couleur. Voici un exemple de ce que je peux faire avec la grille.arranger, mais je ne peux pas comprendre comment mettre une seule barre de couleur:
r1 <- test
r2 <- test
r3 <- test
r4 <- test
colr <- colorRampPalette(rev(brewer.pal(11, 'RdBu')))
l1 <- levelplot(r1,
margin=FALSE,
colorkey=list(
space='bottom',
labels=list(at=-5:5, font=4),
axis.line=list(col='black')
),
par.settings=list(
axis.line=list(col='transparent')
),
scales=list(draw=FALSE),
col.regions=viridis,
at=seq(-5, 5, len=101)) +
layer(sp.polygons(oregon, lwd=3))
l2 <- levelplot(r2,
margin=FALSE,
colorkey=list(
space='bottom',
labels=list(at=-5:5, font=4),
axis.line=list(col='black')
),
par.settings=list(
axis.line=list(col='transparent')
),
scales=list(draw=FALSE),
col.regions=viridis,
at=seq(-5, 5, len=101)) +
layer(sp.polygons(oregon, lwd=3))
l3 <- levelplot(r3,
margin=FALSE,
colorkey=list(
space='bottom',
labels=list(at=-5:5, font=4),
axis.line=list(col='black')
),
par.settings=list(
axis.line=list(col='transparent')
),
scales=list(draw=FALSE),
col.regions=viridis,
at=seq(-5, 5, len=101)) +
layer(sp.polygons(oregon, lwd=3))
l4 <- levelplot(r4,
margin=FALSE,
colorkey=list(
space='bottom',
labels=list(at=-5:5, font=4),
axis.line=list(col='black')
),
par.settings=list(
axis.line=list(col='transparent')
),
scales=list(draw=FALSE),
col.regions=viridis,
at=seq(-5, 5, len=101)) +
layer(sp.polygons(oregon, lwd=3))
grid.arrange(l1, l2, l3, l4,nrow=2,ncol=2) #use package gridExtra
La sortie est ceci:
Le fichier de formes et de fichier raster sont disponibles sur le lien suivant:
https://drive.google.com/open?id=0B5PPm9lBBGbDTjBjeFNzMHZYWEU
Merci beaucoup à l'avance.
devtools::session_info()
Session d'info ---------------------------------------------------------------------------------------------------------------------
valeur de réglage
la version R version 3.1.1 (2014-07-10)
système x86_64, darwin10.8.0
interface RStudio (0.98.1103)
langue (FR)
rassembler en_US.UTF-8
tz America/Los_Angeles
Paquets -------------------------------------------------------------------------------------------------------------------------
package * date de la version source
bitops 1.0-6 2013-08-17 CRAN (R 3.1.0)
palette 1.2-6 2015-03-11 CRAN (R 3.1.3)
devtools 1.8.0 2015-05-09 CRAN (R 3.1.3)
digest de la version 0.6.4 2013-12-03 CRAN (R 3.1.0)
ggplot2 * 1.0.1 2015-03-17 CRAN (R 3.1.3)
ggthemes * 2.1.2 2015-03-02 CRAN (R 3.1.3)
git2r 0.10.1 l'a 2015-05-07 CRAN (R 3.1.3)
gridExtra 0.9.1 2012-08-09 CRAN (R 3.1.0)
gtable 0.1.2 2012-12-05 CRAN (R 3.1.0)
hexbin * 1.26.3 2013-12-10 CRAN (R 3.1.0)
treillis * 0.20-29 2014-04-04 CRAN (R 3.1.1)
latticeExtra * 0.6-26 2013-08-15 CRAN (R 3.1.0)
magrittr 1.5 2014-11-22 CRAN (R 3.1.2)
MASSE 7.3-33 2014-05-05 CRAN (R 3.1.1)
memoise 0.2.1 2014-04-22 CRAN (R 3.1.0)
munsell 0.4.2 2013-07-11 CRAN (R 3.1.0)
plyr 1.8.2 2015-04-21 CRAN (R 3.1.3)
proto 0.3-10 2012-12-22 CRAN (R 3.1.0)
raster * 2.2-31 2014-03-07 CRAN (R 3.1.0)
rasterVis * 0.28 2014-03-25 CRAN (R 3.1.0)
RColorBrewer * 1.0-5 2011-06-17 CRAN (R 3.1.0)
Rcpp 0.11.2 2014-06-08 CRAN (R 3.1.0)
RCurl de 1,95 4.6 2015-04-24 CRAN (R 3.1.3)
reshape2 1.4.1 2014-12-06 CRAN (R 3.1.2)
rgdal * 0.8-16 2014-02-07 CRAN (R 3.1.0)
rversions 1.0.0 2015-04-22 CRAN (R 3.1.3)
les échelles * 0.2.4 2014-04-22 CRAN (R 3.1.0)
sp * 1.0-15 2014-04-09 CRAN (R 3.1.0)
stringi 0.4-1 2014-12-14 CRAN (R 3.1.2)
stringr 1.0.0 2015-04-30 CRAN (R 3.1.3)
viridis * 0.3.1 2015-10-11 CRAN (R 3.2.0)
XML 3.98-1.1 2013-06-20 CRAN (R 3.1.0)
zoo de 1,7-11 2014-02-27 CRAN (R 3.1.0)
- quelle est la raison pour laquelle vous souhaitez utiliser ggplot pour cela?
- Je ne suis pas commis à l'aide de ggplot mais en général, j'aime ggplot et je suis en train de l'apprendre donc je voudrais être en mesure de produire des parcelles avec des ggplot efficacement. N'hésitez pas à partager d'autres solutions. Je vous remercie.
- veuillez identifier ce qui ne fonctionne pas. Peut-être que vous êtes aux prises avec le fait que j'ai inclus quelques chemins absolus qui ne sera évidemment pas le travail de quelqu'un d'autre de la machine. J'ai inclus un lien vers les données réelles à la fin de mon message. Si vous mettez les données dans un dossier et remplacer les chemins avec le chemin d'accès à votre dossier, il doit travailler. Je ne suis pas assez habile avec R pour générer les données à partir de zéro.
- Des excuses. J'ai négligé de vérifier que
rasterVis
a été chargé sur mon nouveau système.
Vous devez vous connecter pour publier un commentaire.
Voici comment j'allais le faire, avec
rasterVis::levelplot
:Charge choses:
Lire des choses:
Définir une couleur de la rampe de la palette (ou un vecteur de couleurs avec une longueur de 1 plus court que le nombre de sauts pour la couleur de la rampe définie avec le
at
argument ci-dessous).Parcelle choses:
Vous pourriez réellement envie de la légende de contour (y compris ses tiques) tracées, dans ce cas, ajoutez
axis.line=list(col='black')
à la liste descolorkey
args. Cela est nécessaire pour remplacer la suppression générale des boîtes causée parpar.settings=list(axis.line=list(col='transparent'))
:Je suis d'accord avec @hrbrmstr que viridis est souvent un rampe mieux utiliser, en dépit de l'être-à mon avis-un peu laid. Les principaux avantages par rapport à quelque chose comme ColorBrewer de
RdYlBu
sont que les couleurs sont encore distinctes lorsque désaturé, et les différences de coloration de mieux refléter les différences dans les valeurs. Je crois queRdYlBu
est parfaitement accessible pour la Deutéranopie/Protanopie/Tritanopie de daltonisme, cependant.Voici la viridis version:
MODIFIER
En réponse à l'OP est question, ici, est de savoir comment l'intrigue de plusieurs rasters comme demandé.
En supposant que tous les fichiers ont la même mesure, la résolution, projections, etc., vous pouvez les empiler dans un
RasterStack
, et ensuite utiliserlevelplot
sur la pile. Vous pouvez passerwidth
comme un élément de la liste transmise àcolorkey
de contrôle de la légende de la hauteur ("largeur" est un peu contre-intuitif, mais par défaut, les légendes sont à la verticale). Si vous souhaitez supprimer la bande d'étiquettes au-dessus de chaque panneau (comme je l'ai fait ci-dessous - par défaut, ils sont étiquetés avec la pile de noms de couche [voirnames(s)
]), vous pouvez ajouterstrip.border
etstrip.background
à la liste transmise àpar.settings
.rasterTheme
fonction:myTheme <- rasterTheme(region = viridis(n = 9)); myTheme$axis.list$col <- 'transparent'
. Ensuite, vous utilisezpar.settings = myTheme
à l'intérieur de lalevelplot
appel.Vous n'avez pas inclure tout ce que vous utilisiez pour faire
test
j'ai donc fait ceci:Et, ensuite, c'est juste une question d'envoyer que + le shapefile de ggplot2:
Il va travailler avec n'importe quel permanent de la température à l'échelle maintenant, tho. Viridis est juste l'un des meilleurs à venir autour dans un très long moment.
Vous pouvez utiliser les options suivantes si vous devez utiliser
gplot
:library(ggthemes)
pour la deuxième question (je vais mettre à jour le post). pour le premier que j'ai transformé votretest
objet différemment.library(ggthemes)
dans le poste, vous devez le faire pourtheme_map
devtools::session_info()
à votre question de départ?C'est la solution de facilité en utilisant ggplot:
Dans scale_fill_gradientn (devrait également fonctionner pour les scale_file_gradient), jeu na.valeur = NA.