r - change - ggplot2 title
Sparklines en ggplot2 (1)
Aquí hay un enfoque para obtener puntos de un solo color, así como los tres conjuntos de etiquetas y rangos de cuartiles sombreados:
# Calculate the min and max values, which.min returns the first (like your example):
mins <- group_by(d, Crime.Type) %>% slice(which.min(Crime.Rate))
maxs <- group_by(d, Crime.Type) %>% slice(which.max(Crime.Rate))
ends <- group_by(d, Crime.Type) %>% filter(Year == max(Year))
quarts <- d %>%
group_by(Crime.Type) %>%
summarize(quart1 = quantile(Crime.Rate, 0.25),
quart2 = quantile(Crime.Rate, 0.75)) %>%
right_join(d)
ggplot(d, aes(x=Year, y=Crime.Rate)) +
facet_grid(Crime.Type ~ ., scales = "free_y") +
geom_ribbon(data = quarts, aes(ymin = quart1, ymax = quart2), fill = ''grey90'') +
geom_line(size=0.3) +
geom_point(data = mins, col = ''blue'') +
geom_text(data = mins, aes(label = Crime.Rate), vjust = -1) +
geom_point(data = maxs, col = ''red'') +
geom_text(data = maxs, aes(label = Crime.Rate), vjust = 2) +
geom_text(data = ends, aes(label = Crime.Rate), hjust = 0) +
geom_text(data = ends, aes(label = Crime.Type), hjust = 0, nudge_x = 5) +
expand_limits(x = max(d$Year) + (0.25 * (max(d$Year) - min(d$Year)))) +
scale_x_continuous(breaks = seq(1960, 2010, 10)) +
scale_y_continuous(expand = c(0.1, 0)) +
theme_tufte(base_size = 15) +
theme(axis.title=element_blank(),
axis.text.y = element_blank(),
axis.ticks = element_blank(),
strip.text = element_blank())
Supongo que no quieres una leyenda aquí. Es casi seguro que puede hacer las cosas más concisas combinando algunos cuadros de datos, pero parece que aquí es más fácil hacer varias llamadas a geom.
Tufte Sparklines (como se ilustra en su Beautiful Evidence ) se ha replicado en gráficos base como parte de YaleToolkit y se ha perfeccionado aún más como resultado de esta pregunta . Las líneas de chispa también se han hecho en celosía como parte de mi pequeño proyecto Tufte en R (no se pretende promocionarse). Mi objetivo ahora es replicar los sparklines de Tufte en ggplot2 . Hay algunos scripts flotando en Gist y también como respuesta a esta pregunta en SO , pero ninguno de ellos proporciona una base sólida para hacer conjuntos replicables de sparklines.
Ahora, me gustaría que estas múltiples chispas se vean así (se hizo en gráficos base y el código está disponible aquí ): los puntos representan valores máximos / mínimos, el número en el extremo derecho es un valor final en series de tiempo específicas y banda gris muestra un rango aproximado de cuantiles:
No estoy lejos, pero me quedo con la asignación de valores mínimos / máximos y etiquetas:
library(ggplot2)
library(ggthemes)
library(dplyr)
library(reshape)
library(RCurl)
dd <- read.csv(text =
getURL("https://gist.githubusercontent.com/GeekOnAcid/da022affd36310c96cd4/raw/9c2ac2b033979fcf14a8d9b2e3e390a4bcc6f0e3/us_nr_of_crimes_1960_2014.csv"))
d <- melt(dd, id="Year")
names(d) <- c("Year","Crime.Type","Crime.Rate")
dd <- group_by(d, Crime.Type) %>%
mutate(color = (min(Crime.Rate) == Crime.Rate | max(Crime.Rate) == Crime.Rate))
ggplot(dd, aes(x=Year, y=Crime.Rate)) +
facet_grid(Crime.Type ~ ., scales = "free_y") +
geom_line(size=0.3) + geom_point(aes(color = color)) +
scale_color_manual(values = c(NA, "red"), guide=F) +
theme_tufte(base_size = 15) +
theme(axis.title=element_blank(),
axis.text.y = element_blank(), axis.ticks = element_blank()) +
theme(strip.text.y = element_text(angle = 0, vjust=0.2, hjust=0))