I have 2 datafiles 'target' and 'observed' as shown below (I
will gladly
email these 2 small files to whomever). X25. And X75. Indicate the
value of 25th and 75th-percentile of the target ('what should be') and
the observed ('what is'). The i.value is simply the month.
> target
X i.value X25. X75.
1 one.month 1 10.845225 17.87237
2 one.month 2 12.235813 19.74490
3 one.month 3 14.611749 23.44810
4 one.month 4 17.529332 28.09647
5 one.month 5 19.458738 30.56936
6 one.month 6 15.264505 28.29333
7 one.month 7 12.370369 23.35455
8 one.month 8 12.471224 21.82794
9 one.month 9 9.716685 17.28762
10 one.month 10 6.470568 12.49830
11 one.month 11 6.180560 14.24961
12 one.month 12 9.673738 15.79208
> observed
X i.value X25. X75.
1 one.month 1 19.81000 27.63500
2 one.month 2 23.64062 30.09125
3 one.month 3 26.04865 35.99104
4 one.month 4 32.02625 41.50958
5 one.month 5 34.74479 47.75958
6 one.month 6 37.48885 46.56448
7 one.month 7 30.06740 40.10146
8 one.month 8 26.14917 39.49458
9 one.month 9 14.12521 32.39406
10 one.month 10 11.04125 23.55479
11 one.month 11 13.14917 23.56833
12 one.month 12 17.17938 27.02458
The following plots 4 lines on one graph. The area between the two red
lines represents the target 'zone', and the area between the two black
lines is the observed 'zone'.
with(target, plot(X25.~i.value,ylim=c(0,55),type='l',col='red'))
par(new=T)
with(target, plot(X75.~i.value,ylim=c(0,55),type='l',col='red'))
par(new=T)
with(observed, plot(X25.~i.value,ylim=c(0,55),type='l'))
par(new=T)
with(observed, plot(X75.~i.value,ylim=c(0,55),type='l'))
par(new=F)
Ideally, the target and the observed should overlap in every month -
they don't. The desire is to visually accentuate the amount of overlap
by shading in the area where these two "zones" overlap. How would you
do that? Note, that in some of these characterizations, the overlap
wanders in and out [I already have routines that calculate the percent
of overlap, but I have been requested to find a way to shade the
overlap.]
Hi:
Here's one approach using geom_ribbon() in ggplot2 - the 'overlap'
is
the change in color where the two ribbons intersect. Using your
example data with the same names and the 'one.month' variable removed,
library(ggplot2)
ggplot() +
geom_ribbon(data = target, aes(x = i.value, ymin = X25, ymax = X75,
fill = 'Target'), alpha = 0.4) +
geom_ribbon(data = observed, aes(x = i.value, ymin = X25, ymax = X75,
fill = 'Observed'), alpha = 0.4) +
scale_fill_manual("", c('Target' = 'blue',
'Observed' = 'orange')) +
opts(legend.position = c(0.88, 0.85),
legend.background = theme_rect(colour = 'transparent'),
legend.text = theme_text(size = 12)) +
labs(x = 'Month', y = 'Value')
There is a separate geom_ribbon() for each of target and observed. A
factor variable for fill color is generated on the fly with colors
specified in scale_fill_manual(). The opts() reposition the legend
inside the graphics region (the values represent proportions of the
total graphics area in each direction), make the legend background
transparent and slightly increase the size of the legend labels
(default size = 10 in theme_text).
Alpha transparency is used so that the overlap creates a blend of the
two colors; without it, one overwrites the other.
HTH,
Dennis
On Thu, Jun 2, 2011 at 8:04 AM, Graves, Gregory <ggraves at sfwmd.gov>
wrote:> I have 2 datafiles 'target' and 'observed' as shown below
(I will gladly
> email these 2 small files to whomever). ?X25. And X75. Indicate the
> value of 25th and 75th-percentile of the target ('what should be')
and
> the observed ('what is'). ?The i.value is simply the month.
>
>> target
> ? ? ? ?X ? ? ? ?i.value ? ?X25. ? ? X75.
> 1 ?one.month ? ? ? 1 10.845225 17.87237
> 2 ?one.month ? ? ? 2 12.235813 19.74490
> 3 ?one.month ? ? ? 3 14.611749 23.44810
> 4 ?one.month ? ? ? 4 17.529332 28.09647
> 5 ?one.month ? ? ? 5 19.458738 30.56936
> 6 ?one.month ? ? ? 6 15.264505 28.29333
> 7 ?one.month ? ? ? 7 12.370369 23.35455
> 8 ?one.month ? ? ? 8 12.471224 21.82794
> 9 ?one.month ? ? ? 9 ?9.716685 17.28762
> 10 one.month ? ? ?10 ?6.470568 12.49830
> 11 one.month ? ? ?11 ?6.180560 14.24961
> 12 one.month ? ? ?12 ?9.673738 15.79208
>
>> observed
> ? ? X ? ? ? ? i.value ? X25. ? ? X75.
> 1 ?one.month ? ? ? 1 19.81000 27.63500
> 2 ?one.month ? ? ? 2 23.64062 30.09125
> 3 ?one.month ? ? ? 3 26.04865 35.99104
> 4 ?one.month ? ? ? 4 32.02625 41.50958
> 5 ?one.month ? ? ? 5 34.74479 47.75958
> 6 ?one.month ? ? ? 6 37.48885 46.56448
> 7 ?one.month ? ? ? 7 30.06740 40.10146
> 8 ?one.month ? ? ? 8 26.14917 39.49458
> 9 ?one.month ? ? ? 9 14.12521 32.39406
> 10 one.month ? ? ?10 11.04125 23.55479
> 11 one.month ? ? ?11 13.14917 23.56833
> 12 one.month ? ? ?12 17.17938 27.02458
>
> The following plots 4 lines on one graph. ?The area between the two red
> lines represents the target 'zone', and the area between the two
black
> lines is the observed 'zone'.
>
> with(target,
plot(X25.~i.value,ylim=c(0,55),type='l',col='red'))
> par(new=T)
> with(target,
plot(X75.~i.value,ylim=c(0,55),type='l',col='red'))
> par(new=T)
> with(observed, plot(X25.~i.value,ylim=c(0,55),type='l'))
> par(new=T)
> with(observed, plot(X75.~i.value,ylim=c(0,55),type='l'))
> par(new=F)
>
> Ideally, the target and the observed should overlap in every month -
> they don't. ?The desire is to visually accentuate the amount of overlap
> by shading in the area where these two "zones" overlap. ?How
would you
> do that? ?Note, that in some of these characterizations, the overlap
> wanders in and out [I already have routines that calculate the percent
> of overlap, but I have been requested to find a way to shade the
> overlap.]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
(1) For crying out loud don't muck about with par(new=TRUE)
like that. Use points() and lines() (and other plot functions) to
add graphical constructs to existing plots. (And use "TRUE"
not "T" --- it's a lot safer.)
(2) In general for shading in regions between two lines
on a plot, use polygon().
cheers,
Rolf Turner
On 03/06/11 03:04, Graves, Gregory wrote:> I have 2 datafiles 'target' and 'observed' as shown below
(I will gladly
> email these 2 small files to whomever). X25. And X75. Indicate the
> value of 25th and 75th-percentile of the target ('what should be')
and
> the observed ('what is'). The i.value is simply the month.
>
>> target
> X i.value X25. X75.
> 1 one.month 1 10.845225 17.87237
> 2 one.month 2 12.235813 19.74490
> 3 one.month 3 14.611749 23.44810
> 4 one.month 4 17.529332 28.09647
> 5 one.month 5 19.458738 30.56936
> 6 one.month 6 15.264505 28.29333
> 7 one.month 7 12.370369 23.35455
> 8 one.month 8 12.471224 21.82794
> 9 one.month 9 9.716685 17.28762
> 10 one.month 10 6.470568 12.49830
> 11 one.month 11 6.180560 14.24961
> 12 one.month 12 9.673738 15.79208
>
>> observed
> X i.value X25. X75.
> 1 one.month 1 19.81000 27.63500
> 2 one.month 2 23.64062 30.09125
> 3 one.month 3 26.04865 35.99104
> 4 one.month 4 32.02625 41.50958
> 5 one.month 5 34.74479 47.75958
> 6 one.month 6 37.48885 46.56448
> 7 one.month 7 30.06740 40.10146
> 8 one.month 8 26.14917 39.49458
> 9 one.month 9 14.12521 32.39406
> 10 one.month 10 11.04125 23.55479
> 11 one.month 11 13.14917 23.56833
> 12 one.month 12 17.17938 27.02458
>
> The following plots 4 lines on one graph. The area between the two red
> lines represents the target 'zone', and the area between the two
black
> lines is the observed 'zone'.
>
> with(target,
plot(X25.~i.value,ylim=c(0,55),type='l',col='red'))
> par(new=T)
> with(target,
plot(X75.~i.value,ylim=c(0,55),type='l',col='red'))
> par(new=T)
> with(observed, plot(X25.~i.value,ylim=c(0,55),type='l'))
> par(new=T)
> with(observed, plot(X75.~i.value,ylim=c(0,55),type='l'))
> par(new=F)
>
> Ideally, the target and the observed should overlap in every month -
> they don't. The desire is to visually accentuate the amount of overlap
> by shading in the area where these two "zones" overlap. How
would you
> do that? Note, that in some of these characterizations, the overlap
> wanders in and out [I already have routines that calculate the percent
> of overlap, but I have been requested to find a way to shade the
> overlap.]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>