Подтвердить что ты не робот

Ggplot2 - зона тени между двумя вертикальными линиями

Я использую ggplot2 для создания довольно простых диаграмм рассеяния. В настоящее время у меня есть две простые вертикальные линии:

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

Для этого может быть еще проще использовать 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)

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