2015-03-12 2 views
4

Я хочу ограничить видимый диапазон y моего участка. Чтобы сохранить значения, выходящие за пределы этого диапазона, мне нужно установить oob (за пределы) до rescale_none, и это хорошо работает.Клип линии для построения участка и отображения текста за пределами участка

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

Есть ли какой-либо текст для печати текста в полях и значения кликов для участка участка?

# Data 
set.seed(1) 
df <- data.frame(x=1:100,y=rnorm(100,mean=1,sd=1)) 
# Basic plot 

library(ggplot2) 
library(scales) 
library(grid) 

g <- ggplot(df)+ 
geom_line(aes(x,y)) 


# Values exceeding scale limits are dropped 
g1 <- g + scale_y_continuous(limits = c(0,2)) 

OOB values dropped

# This is what I want 
g2 <- g + scale_y_continuous(limits = c(0,2) , oob = rescale_none) 

enter image description here

# ...But, I would like to plot some text outside the plotting region 
# and need to turn off clipping to get the text to display... 
g3 <- g + scale_y_continuous(limits = c(0,2) , oob = rescale_none) + 
    # Some text to sit above the plot 
    geom_text(aes(label = "Nonsense", y = Inf, x = 0), hjust = 0, vjust = -1) + 
    # Add some space for the text 
    theme(plot.margin = unit(c(2,1,1,1), "lines")) 

# Turning off clipping makes geom_line also go outside plot area... 
# See here for clipping... http://stackoverflow.com/a/12417481/1478381 
g4 <- ggplot_gtable(ggplot_build(g3)) 
g4$layout$clip[g4$layout$name == "panel"] <- "off" 

grid.draw(g4) 

enter image description here

+0

не coord_cartesian + отсечение сделать это – rawr

+0

@rawr нет. Та же проблема. –

+1

hm, единственное, что я сделал, это создать еще один сюжет с текстом и видом стека вместе. Я уверен, что волшебник @baptiste знал бы о чем-то – rawr

ответ

4

С подходом от here, вот мое решение:

library(gtable) 
gg <- ggplotGrob(g2) 
gg <- gtable_add_grob(gg, textGrob("Nonsense", x=0, hjust=0), t=1, l=4) 
grid.draw(gg) 

enter image description here

+1

Спасибо! Это работает точно так, как предполагалось. :-) –

+0

Добро пожаловать! – tonytonov

+0

Я столкнулся с тем же вопросом, кроме того, что моя «глупость» должна быть посередине, которую я понял, изменяя значения t и l. Однако мне нужно, чтобы это была другая цветовая форма ORIGINAL title !! Вот что меня озадачивает – zazu

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