eliocamp / metr Goto Github PK
View Code? Open in Web Editor NEWTools for Easier Analysis of Meteorological Fields
Home Page: https://eliocamp.github.io/metR/
Tools for Easier Analysis of Meteorological Fields
Home Page: https://eliocamp.github.io/metR/
Hacer que todas las funciones puedan usar data.frames y usar data.table sólo si está instalado.
Hay que chequear los argumentos. Considerar usar
https://cran.r-project.org/web/packages/ArgumentCheck/vignettes/ArgumentChecking.html
¿Qué carajo pasa acá? Cierra los contornos por cualquier lado y manda cualquiera con el color.
library(data.table)
library(ggplot2)
library(metR)
qs.wave.season <- readRDS("~/Documents/Tesis/DATA/qs.wave.season.Rds")
binwidth <- 5
plot.levs <- c(500, 300, 200, 100, 30)
setkey(qs.wave.season, season, lev, lon, lat)
ggplot(RepeatLon(qs.wave.season[lev == 200 & season == "Invierno"]), aes(lon, lat)) +
stat_contour_fill(aes(z = QS3), color = "black", binwidth = binwidth) +
scale_color_divergent(binwidth = binwidth, name = "QS3")
Funciones relacionadas con procesos físicos comunes.
Por ejemplo, para calcular gradientes medridionales de perfiles u otras situaciones donde no se tiene el campo 2D
Tiene más sentido?
Algunas funciones devuelven data frames y otras data tables. Hay que hacer que todo devuelva una o la otra (data.table, jiji)
O algo así. Para que sea explícita que es más general.
Ejemplo:
library(ggplot2)
library(metR)
df <- expand.grid(x = 1:10, y = 1:10)
df$z <- with(df, x*y - mean(x*y))
ggplot(df, aes(x, y, z = z)) +
geom_contour_fill(binwidth = 20) +
geom_contour(breaks = 0) +
scale_fill_divergent(guide = guide_colorstrip(),
breaks = MakeBreaks(20))
El problema está acá:
Line 113 in 5b4034b
Cuando mean.z == mean.level
, la corrección es nula y queda blanco. En principio no es trivial saber para qué lado tendría que ser la corrección. La forma "ideal" sería encontrar un punto que no esté "cubierto" por polígonos y fijarse para qué sentido hay que asignar el fill. Pero esto potencialmente puede ser muy difícil.
Hacer que MakeMask sea más rápido cuando se tiene un campo con muchos niveles. Hay que hacer la máscara sólo para cada combinación única de lon + lat y luego expandir a todo.
Hacer que el skip de geom_arrow funcione como se debe en una grilla regular.
Por ejemplo haciendo un subset de los datos con %in% JumpBy(ubique(x|y), skip).
Se puede agregar un atributo a columnas de data.frame (y data.table). Podría usar eso para hacer más fácil el tratamiento de grillas donde haya una coordenada circular. Se puede:
RepeatLon()
.Derivate()
Chequear paquete circular
https://cran.r-project.org/web/packages/circular/circular.pdf
Buscar una forma de hacer una escala de colores "circular". Es decir, que use (casi, porque la escala tiene que ser biyectiva) el mismo color para los extremos.
"There are only two hard things in Computer Science: cache invalidation and naming things"
Ponerle nombre a la criatura. Opciones por ahora:
meteoR:
metR
tidyweather
Para que x %~% c(20, 30)
funcione realmente como %in%
aproximado.
Al pedo porque breaks
puede ser una función.
Usar recursion para derivar a un orden > 2.
Para facilitar el nombre en el by
de data.table
.
Cerrar los contornos "a mano" en stat_contour_fill()
para evitar el hack medio feo.
Que EOF()
e ImputeEOF()
se fijen si irlba
está instalado y usen base::svd()
si no está.
Usar start
y count
de ncdf4::ncvar_get()
para permitir leer sólo un subset de los datos.
La principal complicación es que en ncvar_get()
requiere un orden particular (X, Y, Z, T) que no necesariamente es el orden en el que están organizadas las variables. También hay que tener en cuenta casos donde las variables a leer no tienen una dimensión (como Z).
O sea, eliminar los contornos que rodean a un determinado valor, no sólo a los niveles de contorno. En otras palabras, excluir en base a int.level
en vez de level
.
Igual esto es hasta que saque exclude
y uno pueda decir qué niveles quiere con una función. Ahí se me acaba la jodita... 🤔
Aclarar que si out es vector o array, solo devuelve la primera variable.
Que chequee si la lon está entre 0 y 360 y que la lat esté entre -90 y 90
geom_arrow()
toma el ángulo y el start
en grados. ¿Está bien así o es preferible en radianes?
Es más cómodo e intuitivo usar grados, pero usar radianes es más "científico" y lógico. Debería preguntar..
Una grilla como esta: https://stackoverflow.com/questions/28330821/r-plot-filled-contour-output-in-ggpplot2
La solución probablemente sea extender los datos en x para cada y, y en y para cada x. Algo como
data[ , x := c(max(x) + dx, x, min(x) - dx), by = y]
Esto así literal no creo que funcione porque le estoy tratando de agregar a x más elementos de los que tiene, pero se entiende la idea.
Que los labels sigan el ángulo del contorno en ese lugar.
O pensar otra forma de indicar que no querés pintar todo el domino.
Para hacer Derivate(x ~ y) o Derivate(y ~ x).
En particular para DerivatePhysical.
Como está ahora, no sirve mucho.
Test
El stat se lleva muy mal con los datos faltantes. Hay que arreglar eso.
Quizás agregar una opción para rellenar los datos por interpolación.
Constantes atmosféricas
Que funcione bien. Con líneas en vez de texto.
Agregar la función para elevación y asimut.
Actualmente stat_contour_fill()
siempre agrega un polygon para el promedio. Hacer que sólo lo agregue si su nivel está entre los breaks
.
Por ahora EOF está dirigida únicamente a hacer EOF en modo S para campos. Se puede hacer más general.
Funcion para leer gribs
Guardar datos para ejemplos y vignettes:
Y por qué no hacer un stat_contour2
que haga lo mismo, mientras ggplot2 se actualiza.
Función para convertir la dirección del viento desde y hacia convención meteorológica.
Herramientas para manejar códigos synop.
Traductor (ida y vuelta)
Símbolos para plotear
Crear un geom para plotear synops completos. <- JODIDO!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.