2014-01-12 3 views
0

Это вопрос по моему вопросу на ggplot2: Adding secondary transformed x-axis on top of plot, где я использую ось из одного графика в качестве верхней оси на другом участке. Проблема заключается в том, что тики и сетки этих двух графиков не выравниваются друг с другом, поэтому использование оси (и соответствующей сетки и данных) одного графика сверху другого означает, что нижняя ось не соответствует сетке ,ggplot2: линии сетки, которые не соответствуют тикам, или добавление настраиваемой сетки?

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

Я понимаю, что сетка и отметки должны выравниваться в ggplot, но я столкнулся с другим сообщением в How can I add a background grid using ggplot2?, которое дает решение, которое очень близко к тому, что мне нужно.

После этого решения, я могу удалить сетку и использовать geom_segment для построения «сетки»:

pts <- data.frame(x=c(170, 170, 170, 170, 177.5, 185), 
       y=c(-35, -25, -15, -35, -35, -35), 
       xend=c(185, 185, 185, 170, 177.5, 185), 
       yend=c(-35, -25, -15, -15, -15, -15)) 
ggplot(quakes, aes(long, lat)) + geom_point(shape = 1) + 
    geom_segment(data=pts, aes(x, y, xend=xend, yend=yend), color="white") + 
    theme(panel.grid.minor = element_blank(), 
     panel.grid.major = element_blank()) 

Однако в этом примере создаются линии сетки не похожи на реальную сетку, потому что они надевают 't простираются до края участка. Чтобы они выглядели как настоящие линии сетки, мне нужно было, чтобы они простирались до края сюжета. Я думал, что могу определить pts, которые лежат вне сюжета, чтобы линии, проведенные между pts, распространялись до края. Например,

pts <- data.frame(x=c(170, 170, 170, 170, 177.5, 185), 
       y=c(-35, -25, -15, -35, -35, -35), 
       xend=c(185, 185, 185, 170, 177.5, 185), 
       yend=c(-35, -25, -15, -15, -15, -15)) 
ggplot(quakes, aes(long, lat)) + geom_point(shape = 1) + scale_x_continuous(limits=c(172.5, 182.5)) + 
    scale_y_continuous(limits=c(-30, -20)) + 
    geom_segment(data=pts, aes(x, y, xend=xend, yend=yend), color="white") + 
    theme(panel.grid.minor = element_blank(), 
     panel.grid.major = element_blank()) 

Однако, поскольку точки находятся за пределами участка, ggplot удаляет недостающие значения и не печатает линии. Может ли кто-нибудь сказать мне, есть ли способ сделать эту работу? Или, может ли кто-нибудь сказать мне, есть ли лучший способ сделать то, что я пытаюсь сделать?

Спасибо !!!

ответ

1

Для того, чтобы точки вне черчения области не удаляются установить пределы сюжета внутри coord_cartesian() (что будет «увеличить» вы сюжет), а не внутри scale_..() функций (что сельхозкультуры всех данных за пределами региона)

ggplot(quakes, aes(long, lat)) + geom_point(shape = 1) + 
    geom_segment(data=pts, aes(x, y, xend=xend, yend=yend), color="white") + 
    theme(panel.grid.minor = element_blank(), 
     panel.grid.major = element_blank())+ 
    coord_cartesian(xlim=c(172.5, 182.5),ylim=c(-30, -20)) 

enter image description here

+0

Дидзисом, вы знаете, как я могу получить новые линии сетки позади точек (а не на вершине)? Я бы хотел, чтобы эти строки появлялись за очками, как обычная сетка. благодаря! – Thomas

+0

Просто измените порядок geom_point() и geom_segment() (точки и сегменты добавляются в график в том порядке, в котором они используются в коде) –

Смежные вопросы