Обмежте осі ggplot2, не виймаючи дані (зовнішні межі): збільшення


106

Якщо в ggplot вказати межі осі, то віддалені точки видаляються. Це добре для очок, але ви, можливо, захочете побудувати лінії, що перетинаються із заданим діапазоном, але ggplot rangeабо xlim/ylimметоди усувають їх. Чи є інший спосіб визначити діапазон осі ділянки без вилучення зовнішніх даних?

напр

require(ggplot2)
d = data.frame(x=c(1,4,7,2,9,7), y=c(2,5,4,10,5,3), grp=c('a','a','b','b','c','c'))
ggplot(d, aes(x, y, group=grp)) + geom_line()
ggplot(d, aes(x, y, group=grp)) + geom_line() + scale_y_continuous(limits=c(0,7))
ggplot(d, aes(x, y, group=grp)) + geom_line() + ylim(0,7)

Відповіді:


168

Хедлі пояснює це на стор 99; 133 його книги ggplot2 (1-е видання) , або стор. 160 - 161, якщо у вас є друге видання .

Проблема полягає в тому, що, як ви кажете, limitsвсередині масштабу або налаштування ylim()спричиняє викидання даних, оскільки вони обмежують дані. Для справжнього масштабування (зберігайте всі дані) потрібно встановити межі всередині декартової системи координат (або інших систем координат https://ggplot2.tidyverse.org/reference/#section-coordinate-systems ). Докладніше див: http://docs.ggplot2.org/current/coord_cartesian.html

ggplot(d, aes(x, y, group=grp)) + 
    geom_line() + 
    coord_cartesian(ylim=c(0, 7))

введіть тут опис зображення


2
Що робити, якщо координат_картезіан не є варіантом, тому що я використовую geom_boxplot?
Everettss

3
coord_cartesianяк і раніше варіант з geom_boxplotабо іншими геомами.
eipi10

Так, але не можу зрозуміти, як робити горизонтальні коробки, оскільки це вимагає, coord_flipі ви не можете мати два координати.
jtr13

2
Неважливо, ви можете встановити ylim's coord_flipзамість coord_cartesianцього випадку.
jtr13
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.