I have a diagram to be included in latex, where all my figures are .eps
graphics (so pdflatex is not an
option) and I want to achieve something
like the following: three concentric filled circles varying in lightness
or saturation. It is easiest to do this using
transparency, but in my test using the postscript driver, the
transparent color fills do not appear. Is it
correct that postscript() does not support transparency?
circle <-function (radius = 1, segments=61) {
angles <- (0:segments)*2*pi/segments
radius * cbind( cos(angles), sin(angles))
}
plot(1:5, 1:5, type='n', xlim=c(-1,5), ylim=c(-1,5), xlab='', ylab='',
asp=1, xaxt="n", yaxt="n")
#clrs <- trans.colors("lightblue", alpha=c(.2, .4, .6)) ## from heplots
package
clrs <- c("#ADD8E633", "#ADD8E666", "#ADD8E699")
c1 <- circle(3)
polygon( c1, col=clrs[1], border="lightblue")
polygon(.67*c1, col=clrs[2], border="lightblue")
polygon(.33*c1, col=clrs[3], border="lightblue")
arrows(-1, 0, 5, 0, angle=10, length=.2, lwd=2, col="darkgray")
arrows( 0, -1, 0, 5, angle=10, length=.2, lwd=2, col="darkgray")
One alternative that sort of works is to use the png() driver, and then
convert fig.png fig.eps
but I need very high resolution to make the real diagram legible.
It might suffice to use hcl() colors to approximate what I've done with
transparency,
but I don't know how to start with a given color ("lightblue") and
achieve roughly
similar resuts.
Michael Friendly Email: friendly AT yorku DOT ca
Professor, Psychology Dept.
York University Voice: 416 736-5115 x66249 Fax: 416 736-5814
4700 Keele Street Web: http://www.datavis.ca
Toronto, ONT M3J 1P3 CANADA
I have a diagram to be included in latex, where all my figures are .eps
graphics (so pdflatex is not an
option) and I want to achieve something
like the following: three concentric filled circles varying in lightness
or saturation. It is easiest to do this using
transparency, but in my test using the postscript driver, the
transparent color fills do not appear. Is it
correct that postscript() does not support transparency?
circle <-function (radius = 1, segments=61) {
angles <- (0:segments)*2*pi/segments
radius * cbind( cos(angles), sin(angles))
}
plot(1:5, 1:5, type='n', xlim=c(-1,5), ylim=c(-1,5), xlab='', ylab='',
asp=1, xaxt="n", yaxt="n")
#clrs <- trans.colors("lightblue", alpha=c(.2, .4, .6)) ## from heplots
package
clrs <- c("#ADD8E633", "#ADD8E666", "#ADD8E699")
c1 <- circle(3)
polygon( c1, col=clrs[1], border="lightblue")
polygon(.67*c1, col=clrs[2], border="lightblue")
polygon(.33*c1, col=clrs[3], border="lightblue")
arrows(-1, 0, 5, 0, angle=10, length=.2, lwd=2, col="darkgray")
arrows( 0, -1, 0, 5, angle=10, length=.2, lwd=2, col="darkgray")
One alternative that sort of works is to use the png() driver, and then
convert fig.png fig.eps
but I need very high resolution to make the real diagram legible.
It might suffice to use hcl() colors to approximate what I've done with
transparency,
but I don't know how to start with a given color ("lightblue") and
achieve roughly
similar resuts.
If you really only want to lighten a specified colour (rather
than overlaying multiple colours), then something like this ought
to do the trick:
testfun <- function(clrs=c("#ADD8E633", "#ADD8E666", "#ADD8E699")) {
plot(1:5, 1:5, type='n', xlim=c(-1,5), ylim=c(-1,5), xlab='', ylab='',
asp=1, xaxt="n", yaxt="n")
c1 <- circle(3)
polygon( c1, col=clrs[1], border="lightblue")
polygon(.67*c1, col=clrs[2], border="lightblue")
polygon(.33*c1, col=clrs[3], border="lightblue")
arrows(-1, 0, 5, 0, angle=10, length=.2, lwd=2, col="darkgray")
arrows( 0, -1, 0, 5, angle=10, length=.2, lwd=2, col="darkgray")
}
postscript("testalpha1.ps")
testfun()
dev.off()
lblue <- "#ADD8E6"
alphafy <- function(col,alpha=1) {
rr <- 1-alpha*(1-c(col2rgb(col)/255))
rgb(rr[1],rr[2],rr[3])
}
alphafy("#ADD8E6")
alphafy("#ADD8E6",alpha=0)
postscript("testalpha2.ps")
testfun(clrs=c(alphafy(lblue,0.2),alphafy(lblue,0.4),alphafy(lblue,0.6)))
dev.off()
On Thu, Apr 14, 2011 at 5:30 AM, Michael Friendly <friendly at yorku.ca> wrote:
I have a diagram to be included in latex, where all my figures are .eps
graphics (so pdflatex is not an
option)
You could use the pdf() device and then use pdf2ps to convert to PostScript.
and I want to achieve something
like the following: three concentric filled circles varying in lightness or
saturation. ?It is easiest to do this using
transparency, but in my test using the postscript driver, the transparent
color fills do not appear. ?Is it
correct that postscript() does not support transparency?
circle <-function (radius = 1, segments=61) {
? ? ? ?angles <- (0:segments)*2*pi/segments
? ? ? ?radius * cbind( cos(angles), sin(angles))
}
plot(1:5, 1:5, type='n', xlim=c(-1,5), ylim=c(-1,5), xlab='', ylab='',
? ? ? ?asp=1, xaxt="n", yaxt="n")
#clrs <- trans.colors("lightblue", alpha=c(.2, .4, .6)) ?## from heplots
There's now an adjustcolor() function in base R to do this.
package
clrs <- c("#ADD8E633", "#ADD8E666", "#ADD8E699")
c1 <- circle(3)
polygon( ? ?c1, col=clrs[1], border="lightblue")
polygon(.67*c1, col=clrs[2], border="lightblue")
polygon(.33*c1, col=clrs[3], border="lightblue")
arrows(-1, ?0, 5, 0, angle=10, length=.2, lwd=2, col="darkgray")
arrows( 0, -1, 0, 5, angle=10, length=.2, lwd=2, col="darkgray")
One alternative that sort of works is to use the png() driver, and then
convert fig.png fig.eps
but I need very high resolution to make the real diagram legible.
It might suffice to use hcl() colors to approximate what I've done with
transparency,
but I don't know how to start with a given color ("lightblue") and achieve
roughly
similar resuts.
It would be useful to have an alpha-blending function for this sort of
purpose, but I don't think we have one.
-thomas
Thomas Lumley
Professor of Biostatistics
University of Auckland
I have a diagram to be included in latex, where all my figures are .eps
graphics (so pdflatex is not an
option) and I want to achieve something
like the following: three concentric filled circles varying in lightness
or saturation. It is easiest to do this using
transparency, but in my test using the postscript driver, the
transparent color fills do not appear. Is it
correct that postscript() does not support transparency?
circle <-function (radius = 1, segments=61) {
angles <- (0:segments)*2*pi/segments
radius * cbind( cos(angles), sin(angles))
}
plot(1:5, 1:5, type='n', xlim=c(-1,5), ylim=c(-1,5), xlab='', ylab='',
asp=1, xaxt="n", yaxt="n")
#clrs <- trans.colors("lightblue", alpha=c(.2, .4, .6)) ## from heplots
package
clrs <- c("#ADD8E633", "#ADD8E666", "#ADD8E699")
c1 <- circle(3)
polygon( c1, col=clrs[1], border="lightblue")
polygon(.67*c1, col=clrs[2], border="lightblue")
polygon(.33*c1, col=clrs[3], border="lightblue")
arrows(-1, 0, 5, 0, angle=10, length=.2, lwd=2, col="darkgray")
arrows( 0, -1, 0, 5, angle=10, length=.2, lwd=2, col="darkgray")
One alternative that sort of works is to use the png() driver, and then
convert fig.png fig.eps
but I need very high resolution to make the real diagram legible.
It might suffice to use hcl() colors to approximate what I've done with
transparency,
but I don't know how to start with a given color ("lightblue") and
achieve roughly
similar resuts.
Hi Michael,
For a "one off" job, I would probably do the transparent overlays in the
pdf device, open the result in xpdf or Acrobat and then use the GIMP to
identify the resulting colors from a screen shot. Then redo the plot in
the postscript device using the opaque colors. This is only an
approximation, of course, but it gets the job done.
Jim