2014-11-20 2 views
10

У меня есть кадр данных, который содержит числовые буферы x и непрерывные данные оси Y по нескольким категориям. Вначале я создал коробку, создав «множители» булавки оси x и выполнив квадратную форму расплавленных данных. Воспроизводимые данные:Как создать geom_boxplot с большим количеством непрерывных x-переменных

x <- seq(1,10,by=1) 
y1 <- rnorm(10, mean=3) 
y2 <- rnorm(10, mean=10) 
y3<- rnorm(10, mean=1) 
y4<- rnorm(10, mean=8) 
y5<- rnorm(10, mean=12) 
df <- data.frame(x,y1,y2,y3,y4,y5) 
df.m <- melt(df, id="x") 

Мой код для создания данных по оси X в качестве фактора:

df.m $ х < - as.factor (df.m $ х)

Мой ggplot:

ggplot(df.m, aes(x=x, y=value))+ 
geom_boxplot(notch=FALSE, outlier.shape=NA, fill="red", alpha=0.1)+ 
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) 

Полученный участок: The resulting plot:

Проблема заключается в том, что я не могу использовать числовое расстояние по оси X, потому что ось X классифицируется как фактор, имеющий равное расстояние. Я хочу иметь возможность использовать что-то вроде scale_x_continuous, чтобы манипулировать осевыми разрывами и интервалом, скажем, с интервалом в 2, а не с boxplot каждый 1, но когда я пытаюсь построить данные с осью x «as.numeric »Я просто получить один boxplot всех данных:

plot

Любые предложения по пути, чтобы получить этот непрерывный вид boxplot кривой (первое изображение) в то время как еще в состоянии контролировать числовые свойства ось х? Благодаря!

+0

@Henrik Не работает ли ссылка на Google диск в этом вопросе? Это должен быть кадр данных для этого примера. Спасибо, что снова появился и помог мне! Это был проблемный день в мире R ... – AndMan21

+0

@Henrik Gotcha, извините за это.Теперь работа над редактированием – AndMan21

ответ

16

Вот способ использования исходных данных, которые вы опубликовали в Google, что на самом деле было намного более полезным, ИМО.

ggplot(df, aes(x=CH, y=value,group=CH))+ 
    geom_boxplot(notch=FALSE, outlier.shape=NA, fill="red", alpha=0.2)+ 
    scale_x_log10() 

Так что, как @BenBolker сказал, прежде чем он удалил свой ответ (??), вы должны оставить й-переменную (CH) как числовые, и установить group=CH в вызове aes(...).

С вашими настоящими данными есть еще одна проблема. Ваш CH более или менее логарифмически разнесен, поэтому существует примерно столько же очков < 1, сколько существует между 1 - 10 и т. Д. ggplot хочет сделать коробки одинакового размера, поэтому с линейной осью X ширина окна равна меньше ширины линии, и вы не видите эти поля. Изменение оси x на логарифмическую шкалу фиксирует это, более или менее.

0

Не делайте x Фактор. Вы должны эстетично отобразить group, что является фактором, определяющим которой поле значение связано с, к счастью, после плавления, это то, что вы variable колонка:

ggplot(df.m, aes(x = x, y = value, group = variable)) + 
    geom_boxplot() 

Как x еще числовыми, вы можете дать ему любые значения, которые вы хотите в пределах определенного уровня variable, и полевое окно появится в этом месте. Или вы можете преобразовать ось x и т. Д.

+0

Проблема заключается в следующем: я расплавил исходные данные, в основном, чтобы получить данные от тонны столбцов до одного столбца. Я действительно не хочу сопоставлять по переменной, но хочу отображать по x-значению. – AndMan21

+1

Затем установите 'group = x', как сказал @BenBolker (слишком плохо он удалил свой ответ). – jlhoward