No matter what I try I cannot create a ridgeline plot using ggridges
. Using a dataframe graphing_dataframe
that looks as follows:
str(graphing_dataframe)
summary(graphing_dataframe)
> str(graphing_dataframe)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 14 obs. of 3 variables:
$ id : chr "00343" "00343" "00343" "00343" ...
$ week : num 14 1 2 3 4 5 6 7 8 9 ...
$ rating: num 14 4 12 8 14 19 16 16 7 8 ...
- attr(*, "spec")=
.. cols(
.. id = col_character(),
.. week = col_double(),
.. rating = col_double()
.. )
> summary(graphing_dataframe)
id week rating
Length:14 Min. : 1.00 Min. : 4.00
Class :character 1st Qu.: 4.25 1st Qu.: 8.00
Mode :character Median : 7.50 Median :10.50
Mean : 7.50 Mean :11.43
3rd Qu.:10.75 3rd Qu.:15.50
Max. :14.00 Max. :19.00
My data is:
structure(list(id = c("00343", "00343", "00343", "00343", "00343",
"00343", "00343", "00343", "00343", "00343", "00343", "00343",
"00343", "00343"), week = c(14, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13), rating = c(14, 4, 12, 8, 14, 19, 16, 16, 7, 8, 9,
18, 9, 6)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,
-14L), spec = structure(list(cols = list(id = structure(list(), class = c("collector_character",
"collector")), week = structure(list(), class = c("collector_double",
"collector")), rating = structure(list(), class = c("collector_double",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector"))), class = "col_spec"))
My code is:
ggplot(graphing_dataframe,
aes(x = rating, y = week, fill = ..x..)
) +
geom_density_ridges()
Picking joint bandwidth of 2.53
Error: geom_density_ridges requires the following missing aesthetics: y
I've tried using unlist
per this question but that doesn't work either.
Seems as if the error message is a bit misleading, according to the documentation you need to add a group aesthetic for numerical variables:
The grouping aesthetic does not need to be provided if a categorical variable is mapped onto the y axis, but it does need to be provided if the variable is numerical.
so adding group = week
to ggplot(aes(…))
ought to do the trick. (Just had the same issue myself.)
This question seems to be at the top of the list when googling this error message, so I thought I'd chime in: the other reason you can get this error is if you have your x
and y
switched:
For instance, with the above data (using id
instead), this works:
ggplot(graphing_dataframe,
aes(x = rating, y = id)) +
geom_density_ridges()
While this throws the error:
ggplot(graphing_dataframe,
aes(x = id, y=rating)) +
geom_density_ridges()
I have also noticed , if y is a factor this error will not pop up. try this :)
ggplot(graphing_dataframe,
aes(x = id, y=as.factor(rating))) +
geom_density_ridges()
As @JonnyPhelps commented my data is not compatible with a ridgeline plot (or vice versa).
y needs to be a categorical variable. You can try:
ggplot(graphing_dataframe,
aes(x = rating, y = as.factor(week), fill = ..x..))+
geom_density_ridges()
or
ggplot(graphing_dataframe,
aes(x = rating, y = as.character(week), fill = ..x..))+
geom_density_ridges()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With