#r #ggplot2
#r #ggplot2
Вопрос:
Мой набор данных выглядит следующим образом:
df = tibble (
gender = rep(c("fem","mal"),each=10),
C = rep(rep(c(0,1), each=5),2),
r = rep(c(0,1,2,3,4),4),
value = rnorm(n = 20,mean = 5,sd = 1)
)
И у меня возникла проблема при построении ее с:
df %>% ggplot() geom_boxplot(aes(x=C,y=value,fill=gender))
Поскольку графики не разделены значениями моей переменной C, я полагаю, потому, что она имеет тип double. На самом деле, если я напишу aes(x=factor(C), ...)
, проблема исчезнет.
Я спрашиваю, потому что мне интересно, могу ли я сохранить эту переменную как double в эстетике и по-прежнему разделять графики по их значению. Этот подход более удобен для последующего использования scale_x_continuous
с пользовательскими разрывами.
Комментарии:
1. Проблема с
scale_x_discrete
заключается в том, что, например, для более широкого диапазона значений моей переменной,x=C
если я ее установлюbreaks=c(0.0,0.5,1.0)
, она не получит полный диапазон (фактически она показывает только «0.5» по оси x). Возможно, более естественно решить эту проблему в том же масштабе, в каком должна быть исходная переменная2. В комментарии я имел в виду «более широкий диапазон значений моей переменной
x=C
«. Данные в исходном сообщении призваны воспроизвести проблему, но реальные данные, конечно, имеют больше значений, включая значения для переменной по этой оси.3. Вы можете добавить
group = interaction(gender, C)
в свойaes
4. @kath На самом деле это работает так, как ожидалось, хотя я не знаю, что именно делает. Если вы можете сформулировать это в виде ответа, я приму его. Спасибо!
Ответ №1:
Добавление группы в вашу эстетику решает проблему. Я добавил scale_x_continuous
— вызов, чтобы продемонстрировать, что это работает, а также показать, как вы можете захотеть управлять шириной ваших коробочных графиков с помощью width
и position_dodge
.
ggplot(df)
geom_boxplot(aes(x = C, y = value, fill = gender, group = interaction(gender, C)),
position = position_dodge(0.1), width = 0.1)
scale_x_continuous(breaks = seq(0, 1, 0.2))
Что такое interaction(gender, C)
и почему это работает?
interaction
создает специальную множительную переменную, вставляя значения gender и C вместе. Мы можем видеть, как это работает, если представить его как fill
эстетичный:
ggplot(my.df)
geom_boxplot(aes(x = C, y = value, fill = interaction(gender, C)))
Когда она добавляется как group
эстетическая, она сообщает ggplot, какие группы boxplot вы хотели бы иметь.