2014-01-07 3 views
3

Я хотел бы изменить цвет фона только для части графика. Это возможно?Изменить цвет фона только на одну область графика

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

Более конкретно, я хотел бы наложить прозрачный розовый прямоугольник, который простирается от 2 до 4 по оси x и охватывает всю область оси y.

Как бы это закодировать?

p <- ggplot(mtcars, aes(wt, mpg)) 
p + geom_point() 

ответ

11

Прямоугольник легко использовать geom_rect (documentation). Вам просто нужно указать его размеры в вызове aes geom_rect. Чтобы изменить прозрачность альфа в коде ниже.

require(ggplot2) 
p <- ggplot(mtcars, aes(wt, mpg)) 
p + geom_point() + 
    geom_rect(aes(xmin = 2, xmax = 4, ymin = -Inf, ymax = Inf), 
        fill = "pink", alpha = 0.03)) 

Это что-то похожее на то, что вы после?

Figure attempt

+1

PS есть способ, чтобы сказать, что это просто покрыть всю ось Y, в отличие от определения пределов Y? – Megan

+0

Видимо, да, используя Inf для ymin/ymax. См. Мое редактирование, которое должно помочь. –

3

Хотя это работает, я заметил, что он строит столько прямоугольников в качестве точек данных, которые могли бы быть проблемой, особенно с facetting, где число точек изменения между гранями. Это отражается на очень низкой альфа, чтобы получить прозрачность всего лишь на 50%. Я думаю, это потому, что он использует data.frame и эстетику, вызванную из ggplot().

Один из способов избежать этого может быть вызван aes() в geom_point() и создать data.frame специально для прямоугольников. Обратите внимание, что альфа намного больше, но эффект подобен.

require(ggplot2) 
ggplot(mtcars) + geom_point(aes(wt, mpg)) + 
geom_rect(data=data.frame(xmin = 2, xmax = 4, ymin = -Inf, ymax = Inf), 
    aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax), fill="pink", alpha=0.5) 

Result enter image description here

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