перекрывающиеся y-масштабы в фасете (масштаб = свободный)

Я изучаю ggplot за последние несколько недель. В общем, я делаю вещи (хотя и медленно), но сейчас я застрял. Я создал следующий фасеточный график: http://dl.dropbox.com/u/7752237/example_bad_y_scales.pdf

Огранка выполняется

pl <- pl + facet_wrap(~sci_name,ncol=1,scale="free")

Проблема: числа на шкале Y выглядят не очень хорошо, особенно шкалы от 0 до 70 (числа перекрываются). Я хотел бы как-то изменить количество перерывов по шкале Y (скажем, только 1 или 2 перерыва). Может быть, у кого-нибудь есть идея, как это сделать? Любая помощь будет очень высоко ценится. :)

PS: я не включил минимальный пример, потому что думаю, что это не сильно поможет решить эту конкретную проблему.

Изменить после ответа Kohskes:

Привет Kohske, Вау, это был очень быстрый ответ, спасибо! Однако я думаю, что это не очень хорошо работает с гранеными сюжетами. смотреть на

p <- ggplot(mtcars, aes(wt, mpg))
p <- p + geom_point()
p <- p + facet_wrap(~gear,ncol=1,scale="free")

По шкале Y это дает 3 разрыва на среднем графике и 8 разрывов на нижнем графике… не очень последовательно (но, по крайней мере, не перекрывая друг друга, как в моем примере).

p2 <- p + scale_y_continuous(breaks=c(15,30),minor_breaks=c(10,20,25))

тоже не очень хорошо: две основные галочки на нижних графиках, только по одной на среднем и верхнем графиках. При наличии масштабов с большей разницей, чем в mtcars, результат будет еще менее удовлетворительным. Любые другие идеи? ;)

Редактировать после редактирования Kohskes:

Привет, я не вижу, как это реализовать. Поиск ggplot и input_break в гугле дал всего 10 результатов, ни один из них не помог. Я старался

p <- ggplot(mtcars, aes(wt, mpg))
p <- p + geom_point()
p <- p + facet_wrap(~gear,ncol=1,scale="free")
p$input_breaks<-function(., range) {
    pretty(range, n=3)
}
print(p)

Однако я не вижу никаких эффектов на графике (пробовал для n=1, 3, 15). Не могли бы вы описать, как это реализовать на примере mtcars? Спасибо!


person donodarazao    schedule 10.08.2010    source источник


Ответы (1)


p ‹- ggplot(mtcars, aes(wt, mpg)) p ‹- p + geom_point()

dev.new(height=1)
print(p)
dev.new(height=1)
p <- p + scale_y_continuous(breaks=c(15,30),minor_breaks=c(10,20,25))
print(p)

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

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

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

Trans$input_breaks<-function(., range) {
    pretty(range, n=3)
}
print(p)

изменение «n = 3» дает другую красоту.

снова отредактировано:

вот полный пример:

library(ggplot2)
p <- ggplot(mtcars, aes(wt, mpg))+geom_point()
Trans$input_breaks<-function(., range) {
    pretty(range, n=100)
}
print(p)

в этом случае, вероятно, вы можете увидеть сотню тиков. изменив n=100, вы можете настроить его.

обратите внимание, что это имеет побочный эффект. все графики после этого имеют одинаковое количество тиков, а также оси x и y имеют одинаковое количество тиков.

person kohske    schedule 10.08.2010
comment
Превосходно! Теперь он работает нормально, интервалы на граненых участках гораздо менее «переполнены». И время по оси абсцисс никак не влияет. Большое спасибо! - person donodarazao; 10.08.2010
comment
хорошо. и причина, по которой время на оси X не влияет, заключается в том, что шкалы даты, времени и т. д. имеют разные расчеты для перерывов. вероятно, будет затронута только непрерывная шкала. - person kohske; 11.08.2010
comment
Я предполагаю, что Trans$input_breaks не применяется для новейшей версии ggplot2 (я получаю сообщение об ошибке object 'Trans' not found). Любая идея, как это сделать в более новых версиях? - person Mikko; 21.01.2014