6.8: Guardar archivos de imagen usando R y Rstudio
- Page ID
- 151864
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)
( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\id}{\mathrm{id}}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\kernel}{\mathrm{null}\,}\)
\( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\)
\( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\)
\( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)
\( \newcommand{\vectorA}[1]{\vec{#1}} % arrow\)
\( \newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow\)
\( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vectorC}[1]{\textbf{#1}} \)
\( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)
\( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)
\( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)Espera, podrías estar pensando. ¿De qué sirve poder dibujar bonitas imágenes en R si no puedo guardarlas y enviárselas a amigos para presumir de lo increíbles que son mis datos? ¿Cómo guardo la foto? Esta es otra de esas situaciones en las que lo más fácil de hacer es usar las herramientas de RStudio.
Si estás ejecutando R a través de Rstudio, entonces la forma más fácil de guardar tu imagen es hacer clic en el botón “Exportar” en el panel Trazar (es decir, el área en Rstudio donde han ido apareciendo todas las parcelas). Al hacer eso verás un menú que contiene las opciones “Guardar trazado como PDF” y “Guardar trazado como imagen”. Cualquiera de las dos versiones funciona. Ambos traerán cuadros de diálogo que te darán algunas opciones con las que puedes jugar, pero además de eso es bastante simple.
Esto funciona bastante bien para la mayoría de las situaciones. Entonces, a menos que estés lleno de un deseo ardiente de aprender los detalles de bajo nivel, no dudes en saltarte el resto de esta sección.
detalles feos (avanzado)
Como digo, las opciones basadas en menús deberían ser lo suficientemente buenas para la mayoría de las personas la mayor parte del tiempo. Sin embargo, algún día es posible que desee ser un poco más sofisticado y hacer uso de las capacidades de escritura de imágenes de R en un nivel inferior. En esta sección te voy a dar una introducción muy básica a esto. Con toda honestidad, esto apenas rasca la superficie, pero te ayudará un poco para empezar si quieres conocer los detalles.
Bien, como insinué antes, cada vez que estás haciendo dibujos en R se considera que estás dibujando a algún dispositivo de algún tipo. Hay dispositivos que corresponden a una figura dibujada en pantalla, y hay dispositivos que corresponden a archivos gráficos que R producirá para ti. Para los efectos de esta sección asumiré que estás usando la aplicación predeterminada ya sea en Windows o Mac OS, no en Rstudio. La razón de esto es que mi experiencia con el dispositivo gráfico proporcionado por Rstudio me ha llevado a sospechar que todavía tiene un montón de características no estándar (o posiblemente solo indocumentadas), y así no confío en que siempre haga lo que espero. No dudo que lo suavizarán más tarde, pero honestamente puedo decir que no entiendo exactamente lo que está pasando con el dispositivo RStudioGD
. En cualquier caso, podemos pedirle a R que enumere todos los dispositivos gráficos que existen actualmente, simplemente usando el comando dev.list ()
. Si no hay ventanas de figuras abiertas, entonces verás esto:
> dev.list()
NULL
lo que solo significa que R no tiene ningún dispositivo gráfico abierto. Sin embargo, supongamos que si acaba de dibujar un histograma y escribe el mismo comando, R ahora le dará una respuesta diferente. Por ejemplo, si estás usando Windows:
> hist( afl.margins )
> dev.list()
windows
2
Lo que esto significa es que hay un dispositivo gráfico (dispositivo 2) que actualmente está abierto, y es una ventana de figura. Si hiciste lo mismo en una Mac, obtienes básicamente la misma respuesta, excepto que el nombre del dispositivo sería cuarzo
en lugar de ventanas
. Si tuvieras varias ventanas gráficas abiertas (lo cual, por cierto, puedes hacer usando el comando dev.new ()
) entonces verías algo como esto:
> dev.list()
windows windows windows
2 3 4
Bien, entonces esa es la idea básica detrás de los dispositivos gráficos. La idea clave aquí es que los archivos gráficos (como imágenes JPEG etc) también son dispositivos gráficos en lo que a R se refiere. Entonces lo que quieres hacer es copiar el contenido de un dispositivo gráfico a otro. Hay un comando llamado dev.copy ()
que hace esto, pero lo que te voy a explicar es uno más simple llamado dev.print ()
. Es bastante simple:
> dev.print( device = jpeg, # what are we printing to?
+ filename = "thisfile.jpg", # name of the image file
+ width = 480, # how many pixels wide should it be
+ height = 300 # how many pixels high should it be
+ )
Esto toma la ventana de figura “activa”, la copia en un archivo jpeg (que R trata como un dispositivo) y luego cierra ese dispositivo. La parte filename = "thisfile.jpg"
le dice a R qué debe nombrar el archivo gráfico, y los argumentos width = 480
y height = 300
le dicen a R que dibuje una imagen de 300 píxeles de alto y 480 píxeles de ancho. Si quieres un tipo diferente de archivo, simplemente cambia el argumento del dispositivo de jpeg
a otra cosa. R tiene dispositivos para png
, tiff
y bmp
que todos funcionan exactamente de la misma manera que el comando jpeg
, pero producen diferentes tipos de archivos. En realidad, para gráficos caricaturescos simples como este histograma, sería mejor que utilices PNG o TIFF sobre JPEG. El formato JPEG es muy bueno para imágenes naturales, pero es un desperdicio para los dibujos de líneas simples. La información anterior probablemente cubre la mayoría de las cosas que quizás quieras. No obstante, si quieres más información sobre qué tipo de opciones puedes especificar usando R, ¿echa un vistazo a la documentación de ayuda escribiendo?
jpeg o?
tiff o lo que sea.