emehex emehex - 7 days ago 7
R Question

Smooth data for a geom_area graph

I have data that looks like this:

df <- tibble(
x = 1:20,
y = c(4, 4, 2, 1, 8, 3, 4, 2, 8, 2, 2, 2, 2, 6, 1, 7, 8, 9, 9, 2)
)


Graphed, it looks like this:

df %>%
ggplot(aes(x, y)) +
geom_area()


enter image description here

But the graph is really jarring. How might I smooth out the jagged edges to something like this:

enter image description here

Thanks!

Answer

Expanding on Axeman's comment: smooth can be controlled by the span parameter.

Example 1:

df %>% 
    ggplot(aes(x, y)) + 
    # original, delete if desired
    geom_area(alpha = 1/2) + 
    stat_smooth(
        geom = 'area', method = 'loess', span = 1/3,
        alpha = 1/2, fill = "red") + 
    labs(title = "Smooth with `span = 1/3`")

enter image description here

Example 2:

df %>% 
    ggplot(aes(x, y)) + 
    geom_area(alpha = 1/2) + 
    # original, delete if desired
    stat_smooth(
        geom = 'area', method = 'loess', span = 7/10,
        alpha = 1/2, fill = "blue") + 
    labs(title = "Smooth with `span = 7/10`")

enter image description here