управлять осью X графика скрипки в ggplot2

Я создаю графики скрипки в ggplot2 для временного ряда от year_1 до year_32. Годы в моем df хранятся в виде числовых значений. Из примеров, которые я видел, кажется, что я должен преобразовать эти числовые значения года в множители, чтобы построить одну скрипку в год; и на самом деле, если я запускаю код без as.factors, я получаю одну большую толстую скрипку. Я хотел бы понять, почему geom_violin не может иметь числовые значения по оси x; или если я ошибаюсь, как их использовать?

So:

my_data$year <- as.factor(my_data$year)

p <- ggplot(data = my_data, aes(x = year, y = continuous_var)+
 geom_violin(fill = "#FF0000", color = "#000000")+
 ylim(0,500)+
 labs(x = "x_label", y = "y_label")

p +my_theme()

работает нормально, но если я пропущу

my_data$year <- as.factor(my_data$year)

это не работает, я получаю одну большую толстую скрипку на все годы. Почему?

ТИА


person user237554    schedule 18.03.2021    source источник


Ответы (2)


PS: это обсуждение лучше подходит для Cross Validated, так как это больше статистика, чем вопрос кодирования.

Я не уверен на 100%, но вот мое объяснение: график скрипки показывает плотность для набора данных, вы можете разделить свои данные на группы, чтобы вы могли построить одну скрипку для каждой части ваших данных. Но если метрика, которую вы используете для разделения групп (ось X), является непрерывной, у вас будет бесконечное количество группировок (одна группа для значений в 0, одна для 0,1, одна для 0,01 и т. д.), поэтому в в конце вы фактически не можете разделить свои данные, и ggplot, вероятно, игнорирует переменную x и создает одну скрипку для всех ваших данных.

person Ricardo Semião e Castro    schedule 18.03.2021
comment
Это имеет смысл, спасибо! - person user237554; 18.03.2021
comment
Если это помогло, пожалуйста, примите ответ, чтобы отметить сообщение как решенное :) - person Ricardo Semião e Castro; 18.03.2021

Вы пропустили ) в конце этой строки p <- ggplot(data = my_data, aes(x = year, y = continuous_var)

Я построил воспроизводимый пример с набором данных ToothGrowth: теперь это должно работать:

library(ggplot2)
my_data <- ToothGrowth

my_data$dose <- as.factor(my_data$dose)

p <- ggplot(data = my_data, aes(x = dose, y = len))+
              geom_violin(fill = "#FF0000", color = "#000000")+
              ylim(0,500)+
              labs(x = "x_label", y = "y_label") +
              theme_bw()
p

введите здесь описание изображения

person TarJae    schedule 18.03.2021
comment
хорошее место, извиняюсь за ошибку копирования-вставки! У меня работает, мне просто интересно, зачем нужен as.factor. Теория Рикардо разумна. - person user237554; 18.03.2021