В ggplot2, как сделать так, чтобы граненый участок имел минимальную высоту и имел одинаковые отметки? - PullRequest
2 голосов
/ 18 августа 2011

Я создаю граненый сюжет так:

enter image description here

Это достигается с помощью:

df = data.frame(val=rnorm(2005), class=c(rep(c('a','b'), 1000), rep('c', 5)))
qplot(val, ..count.., data=df, geom='density', fill=I('black')) +
  opts(strip.text.y = theme_text()) +
  # scale_y_continuous(breaks=seq(0, 999, by=50)) +
  facet_grid(class ~ ., scale = "free", space = "free")

Я намеренно хочу, чтобы фасеты имели разные размеры (занимая столько вертикального пространства, сколько необходимо), но сохраняли тот же масштаб.

Теперь есть некоторые проблемы с этим сюжетом:

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

  • В то время как грани имеют одинаковый масштаб, оси Y не имеют одинаковые сетки / отметки. Я могу заставить их использовать одну и ту же сетку, раскомментировав закомментированную строку, но затем я вручную вычисляю это - есть ли способ просто использовать самую грубую сетку среди любых графиков плотности?

Заранее спасибо за любые ответы.

1 Ответ

5 голосов
/ 18 августа 2011

Отредактировано

Я не думаю, что это возможно при использовании элегантного параметра ggplot, но буду рад оказаться ошибочным.

ОднакоВот обходной путь, который имеет желаемый эффект.Идея состоит в том, чтобы добавить невидимый слой на график с единственной точкой, которая достаточно высока на оси Y, чтобы заставить каждую панель иметь минимальный размер.В этом случае я вручную выбрал это значение как 50, но вы должны иметь возможность создать алгоритм, основанный на процентах от максимального количества или аналогичных:

df = data.frame(val=rnorm(2005), class=c(rep(c('a','b'), 1000), rep('c', 5)))
dg <- data.frame(class=c("a","b","c"), value=rep(50,3))
qplot(val, ..count.., data=df, geom='density', fill=I('black')) +
    opts(strip.text.y = theme_text()) +
    facet_grid(class ~ ., scales="free", space="free") + 
    geom_blank(data=dg, aes(x=0, y=value)) 

Редактировать 2 Спасибо @Thierry за подсказку использовать geom_blank вместо geom_point с невидимыми точками.

enter image description here

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