
Cu Crăciunul de mâine, am decis să creăm un Pom de Crăciun animat folosind {ggplot2}, {sf} și {gganimate}.
Mai întâi avem nevoie de un copac. Pentru a face acest lucru am folosit un poligon {sf} în care trecem în coordonatele bradului de Crăciun ca o matrice de listă pentru
st_polygon. Putem folosi apoi geom_sf pentru a adăuga acest strat pe un obiect ggplot.
library(ggplot2) library(gganimate) library(sf) tree_coords = list( matrix( c(-4, 0, -2.22, 2, -3.5, 2, -1.5, 4, -2.5, 4, -0.8, 6, -1.5, 6, 0, 8, 1.5, 6, 0.8, 6, 2.5, 4, 1.5, 4, 3.5, 2, 2.22, 2, 4, 0, -4, 0), ncol=2, byrow=T ) ) tree = st_polygon(tree_coords) gg_tree = ggplot() + geom_sf(aes(), data=tree) gg_tree


Bine, deci acum avem o formă de copac. Acum trebuie să facem un pic mai plăcut de Crăciun schimbând:
- Culoarea folosind:
fill = "forestgreen", color = "darkgreen" - Adăugarea portbagajului:
geom_rect(aes(xmin = -0.75, xmax = 0.75, ymin = -2, ymax = 0), fill = "saddlebrown", color = "sienna4") - Adăugați o stea în partea de sus:
geom_point(aes(x = 0, y = 8), color = "gold", shape = 8, size = 7, stroke = 3) - Scoateți axa cu:
theme_void() - Setați chenarul:
coord_sf(xlim = c(-6, 6), ylim = c(-4, 10)) - Adăugați un mesaj de Crăciun:
annotate("text", x = 0, y = 9.5, label = "Merry Christmas n From Jumping Rivers!", size = 6)
Acum arborele nostru arată astfel:
gg_tree = ggplot() +
geom_sf(aes(), data=tree, fill = "forestgreen", color = "darkgreen") +
geom_rect(aes(xmin = -0.75, xmax = 0.75, ymin = -2, ymax = 0), fill = "saddlebrown", color = "sienna4") +
geom_point(aes(x = 0, y = 8), color = "gold", shape = 8, size = 7, stroke = 3) +
theme_void() +
coord_sf(xlim = c(-6, 6), ylim = c(-4, 10)) +
annotate("text", x = 0, y = 9.5, label = "Merry Christmas n From Jumping Rivers!", size = 6)
gg_tree


Apoi trebuie să folosim din nou {sf} pentru a face niște lumini pentru copac, apoi {gganimate} pentru a face luminile să clipească.
Plasarea punctelor în limitele copacului a fost o sarcină mai dificilă decât ne așteptam până când am căzut peste st_sample căruia îi putem trece un poligon și va crea câteva puncte eșantion în interiorul granițelor. De asemenea, creăm un vector pentru a colora punctele.
points = st_sample(tree, 75)
colours = sample(c("red", "yellow", "blue"), 75, replace = TRUE)
gg_tree = ggplot() +
geom_sf(aes(), data=tree, fill = "forestgreen", color = "darkgreen") +
geom_sf(aes(), data=points, color = colours) +
geom_rect(aes(xmin = -0.75, xmax = 0.75, ymin = -2, ymax = 0), fill = "saddlebrown", color = "sienna4") +
geom_point(aes(x = 0, y = 8), color = "gold", shape = 8, size = 7, stroke = 3) +
theme_void() +
coord_sf(xlim = c(-6, 6), ylim = c(-4, 10)) +
annotate("text", x = 0, y = 9.5, label = "Merry Christmas n From Jumping Rivers!", size = 6)
gg_tree


Acum îl putem anima pentru a face luminile să strălucească folosind transition_time
şi ease_aes:
gg_tree +
transition_time(1:75) +
ease_aes('linear')


În cele din urmă, un Crăciun și un An Nou minunat din partea echipei Jumping Rivers!
Pentru actualizări și revizuiri ale acestui articol, consultați postarea inițială
