Как создать 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))

Полученный график: The resulting plot:

Проблема заключается в том, что я не могу использовать числовое расстояние по оси 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 и т.д.