2015-08-12 3 views
1

Привет ggplot2 community-добавив пределы категорического boxplot, ggplot2

Я не могу показаться, чтобы выяснить, как решить эту проблему, и я хотел бы ваша помощь!

У меня есть составные данные концентрации, сделанные на отдельных сайтах, и что я хотел бы сделать, это построить коробку, показывающую распределение выборок и локальных ограничений на каждом сайте. Однако в моем наборе данных некоторые сайты имеют ограничения, а другие нет. Я хотел бы разместить горизонтальную линию над моим boxplot, которая показывает локальный предел, но я бы хотел, чтобы строки отображались только на тех сайтах, которые у них есть.

Я столкнулся с ошибками, использующими geom_segment и geom_hline и geom_errorbar и даже geom_crossbar при попытке разместить линию только на нескольких сайтах, а не на всем наборе данных. Я также хотел бы избежать ненужных строк.

Вот несколько примеров данных диафрагмы для работы. Аналогично моей ситуации, я хотел бы добавить горизонтальную линию на длину сепалы = 8, чтобы появиться выше видов «versicolor» и «virginica».

Есть ли способ сделать это?

library(ggplot2) 

sepal_leng<-ggplot(iris, aes(factor(Species), y=Sepal.Length)) 
sepal_leng<-sepal_leng+geom_boxplot() 
sepal_leng 

ответ

3

Я бы сделал это, создав отдельный набор данных, содержащий группы и их пределы.

limdat = data.frame(Species = c("versicolor", "virginica"), limits = 8) 

Вы могли бы использовать этот набор данных, чтобы добавить горизонтальную линию через geom_crossbar или geom_errorbar или что-то. Обратите внимание, что ymax и ymin установлены на y, чтобы линия была горизонтальной.

ggplot(iris, aes(factor(Species), y=Sepal.Length)) + 
    geom_boxplot() + 
    geom_errorbar(data = limdat, aes(y = limits, ymin = ..y.., ymax = ..y..)) 

enter image description here

Вы можете в конечном итоге хочет легенду, чтобы указать, какие линии, которые вы можете сделать отображение постоянной в linetype.

ggplot(iris, aes(factor(Species), y=Sepal.Length)) + 
    geom_boxplot() + 
    geom_errorbar(data = limdat, 
       aes(y = limits, ymin = ..y.., ymax = ..y.., linetype = "Local limit")) + 
    scale_linetype_discrete(name = NULL) 

enter image description here

+0

Эй, спасибо. Я нашел это решение раньше, и я получаю сообщение об ошибке: Ошибка: Эстетика должна быть либо одной, либо такой же длины, как dataProblems: hline, hline, hline, cond – LY27

+0

@ LY27 Получаете ли вы эту ошибку с этим примером? Заметьте, что я не использовал 'hline' в' geom_errorbar'. – aosmith

+0

Решение, которое вы предоставили, работает. Ошибки генерировались из-за несогласованности с заголовками в новом кадре данных, который я создал для моего фактического (не выборочного) набора данных. – LY27

Смежные вопросы