Как создать geom_boxplot с большим количеством непрерывных x-переменных
У меня есть кадр данных, который содержит числовые буферы с осью x и непрерывные данные оси Y по нескольким категориям. Вначале я создал коробку, создав "множители" булавки оси 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 $x < - as.factor(df.m $x)
Мой 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))
Полученный график:
:
Проблема заключается в том, что я не могу использовать числовое расстояние по оси X, потому что ось X классифицируется как фактор, имеющий равное расстояние. Я хочу иметь возможность использовать что-то вроде scale_x_continuous, чтобы манипулировать осевыми разрывами и интервалом, скажем, с интервалом в 2, а не с boxplot каждый 1, но когда я пытаюсь построить данные с осью x "as.numeric", Я просто получаю один квадрат из всех данных:
![plot]()
Любые предложения по способу получения этой непрерывной кривой прямоугольника (первое изображение), все еще способного управлять числовыми свойствами оси x? Спасибо!
Ответы
Ответ 1
Вот способ использования исходных данных, которые вы опубликовали в Google, что на самом деле было гораздо более полезным, IMO.
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, прежде чем он удалил свой ответ (??), вы должны оставить x-variable (CH
) числовым и установить group=CH
в вызове aes(...)
.
С вашими реальными данными есть еще одна проблема. Ваш CH
является более или менее логарифмически разнесенным, поэтому существует примерно столько же очков, 1, так как существует от 1 до 10 и т.д. ggplot
хочет сделать поля одинакового размера, поэтому с линейной осью X ширина окна меньше ширины линии, и вы не видите все. Изменение оси x на логарифмическую шкалу фиксирует это более или менее.
Ответ 2
Не делайте x
фактором. Вам нужно эстетически отобразить a group
, который является фактором, определяющим, с каким полем связано значение, к счастью, после таяния, это то, что вы столбец variable
:
ggplot(df.m, aes(x = x, y = value, group = variable)) +
geom_boxplot()
Поскольку x
по-прежнему является числовым, вы можете дать ему любые значения, которые вы хотите, на определенном уровне variable
, и полевое окно появится в этом месте. Или вы можете преобразовать ось x
и т.д.