2012-02-07 6 views
24

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

... + geom_vline(xintercept=159684.186,linetype="dotted",size=0.6)+ 
geom_vline(xintercept=159683.438,linetype="dotted",size=0.6)+ ... 

Может кто-нибудь сказать мне, как тень область между этими двумя линиями от верхней оси Y к оси X?

ответ

36

Вы можете использовать geom_rect.

... + geom_rect(aes(xmin=159683.438, xmax=159684.186, ymin=0, ymax=Inf)) 

Два значения х приходят из ваших geom_vline вызовов. с использованием ymin=0 переносит его на 0; ymax=Inf доставит все это до вершины оси. Если вы хотите, чтобы он прошел весь путь до оси x, а не 0, вы можете использовать ymin=-Inf.

Некоторые примечания:

Это работает лучше всего, если это в начале порядка геометрий, так что он получает обращено первый/ниже других частей (особенно данных диаграммы рассеяния).

Вы можете установить цвет заливки (fill эстетический) за пределами aes на фиксированное значение. Я бы также установил прозрачность (alpha) на что-то вроде 0,5, так что все остальное (линии сетки, скорее всего, если вы ставите ее как первую геометрию) все еще можно увидеть.

+0

говорят, что xaxis - это годы, и вы хотите затенять 1 год на 2. Как это сделать? aes не поддерживает списки для ymin, xmax, ymax-атрибутов – tagoma

+0

Спасибо. Обратите внимание, что '' fill'' NOT '' color'' является ключевым словом здесь! – PatrickT

+0

@PatrickT Спасибо. Уточнил это в ответе. –

10

Для этого вам может быть проще использовать annotate(), если вам известны координаты, для которых вы хотите затенять. У меня были некоторые странные проблемы с обработкой, когда я пытался использовать geom_rect().

library(ggplot2) 
data(mtcars) 

ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point() + 
    annotate("rect", xmin = 3, xmax = 4.2, ymin = 12, ymax = 21, 
     alpha = .2) 

Я знаю, что это по сути то же самое; Я только что наткнулся на этот лакомый кусочек от here.

+0

Мне очень нравится этот подход, поскольку он позволяет мне иметь цветные и размерные шкалы. – Chef1075

+0

Отличный подход. Разрешено несколько операторов 'annotate'. Как сказано, аргументы 'color' и' fill' легко контролируются. Аргумент прозрачности 'alpha' дает приятный внешний вид. –

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