2016-08-24 3 views
2

Я пытаюсь построить CDF для отображения данных качества воды относительно стандартов качества воды.настройка фона в сюжете()

Чтобы сделать стандарты качества воды очевидными, я использую rect(), чтобы указать, какие части участка не соответствуют установленным стандартам.

Я использую плотность в пределах rect(), чтобы создать хэшированную заливку, чтобы она работала лучше при печати в черно-белом режиме (и, я думаю, она выглядит лучше).

Это прекрасно работает, когда у меня есть только одна области сюжета я хочу использовать rect():

one_rect() in plot

Когда у меня есть два отдельных rect() вызовов в сюжете первого rect(), кажется, игнорирует аргумент плотности и использует сплошную заливку:

two_rect in plot

Вот пример кода, который я использовал, чтобы сделать это:

Данные по рН
data<-rnorm(30, mean = 7, sd = 1) 
участок для рН
data.ecdf<-ecdf(data) 
plot(data.ecdf, verticals = TRUE, do.points = FALSE, xaxs = "i", yaxs = "i", xlim=c(5,10), panel.first = rect(5, -0.02, 6, 1.04, density = 20, border = "258", col = "258")) 

plot(data.ecdf, verticals = TRUE, do.points = FALSE, xaxs = "i", yaxs = "i", xlim=c(5,10), panel.first = rect(5, -0.02, 6, 1.04, density = 20, border = "258", col = "258", rect(9,-0.02,10,1.04, density = 20, border = "258", col = "258"))) 

Я также попытался сделать это в ggplot2, но это, кажется, становится заливка Хешированное гораздо сложнее, чем в графике.

Любые мысли или идеи о том, как я могу получить и rect() в фоновом режиме для отображения с хеш-заполнителем (density = 20), будут оценены.

Спасибо!

ответ

0

Не знаю, почему это происходит, но вы можете вызвать оба прямоугольника сразу в panel.first арг:

plot(data.ecdf, verticals = TRUE, do.points = FALSE, xaxs = "i", yaxs = "i", xlim=c(5,10), panel.first = c(
    rect(9,-0.02,10,1.04, density = 20, border = "258", col = "258"), 
    rect(5, -0.02, 6, 1.04, density = 20, border = "258", col = "258") 
)) 

В качестве альтернативы, попробуйте вызвать прямоугольники самостоятельно в качестве слоев:

plot(data.ecdf, verticals = TRUE, do.points = FALSE, xaxs = "i", yaxs = "i", xlim=c(5,10), lty='n') 
rect(9,-0.02,10,1.04, density = 20, border = "258", col = "258") 
rect(5, -0.02, 6, 1.04, density = 20, border = "258", col = "258") 
lines(data.ecdf, verticals = TRUE, do.points = FALSE, xaxs = "i", yaxs = "i", xlim=c(5,10)) 

enter image description here