[R] Graphs for scientific publication ?

Ista Zahn istazahn at gmail.com
Mon May 4 22:59:25 CEST 2015


Hi Jeremy,

On Mon, May 4, 2015 at 6:13 AM, Jeremy Clark <jeremyclarkbio at gmail.com>
wrote:
> Dear All,
>
> Many thanks for your very comprehensive replies. Here I provide some
> coding which on my system has the following effects:
> 1) The italic R is not rendered by CairoX11, but is rendered by quartz.

I don't have a Mac available, but it works as expected here on Linux. You
may wish to ask on the r-sig-mac mailing list.

> 2) Both geom_smooth and geom_abline here give stepped lines (I've
> realised the angle of the line makes quite a difference to this). I
> presume that these are not "anti-aliased" - so I was hoping that Cairo
> would change this. Unfortunately the command Cairo() does not open any
> device,

Are you sure about that? It opens a png device by default here. See ?Cairo
especially the type argument.

and the CairoX11 device gives similar lines to that from
> quartz.

Generally graphics that you wish to publish or otherwise disseminate will
be written to a png, pdf, or similar. How does

png("tst.png", width=5, height=5, units = "in", res=300)
q3
dev.off()

look?

> 3) As I must turn off general clipping (because I need to add some
> text which overlaps the plot edge) it would be useful to be able to
> clip particular lines to the plot edge - although this is not a
> catastrophe as I can create a new truncated dataframe and plot the
> lines from this.

It would have been nice to have a reproducible example of what you are
trying to accomplish by turning off clipping. There may be an easier way,
but it's hard to say for sure without knowing what the goal is.

Best,
Ista
>
> My system is MacBook Air, with all Xcode recently updated including
> IOS 8.2, OS X 10.10, Xcode 6.2. I previously, and fairly recently,
> installed X11 (and Xquartz), and also updated R and R Cairo, but none
> of this has affected the above behaviour.
>
> Any advice gratefully received.
>
> Yours sincerely,
>
> Jeremy Clark
>
> library(ggplot2)
> library(grid)
> library(Cairo)
>
> theme_jack <- function (base_size = 16, base_family = "") {
> theme_classic(base_size = base_size, base_family = base_family) %+replace%
> theme(
> plot.title = element_text(size=15, vjust=3),
> axis.text = element_text(colour = "black", family="Times",
> face=c('bold'), size = 18),
> axis.title.x = element_text(colour = "black",
> family="Times", face=c('bold'), vjust = -1, size =
> 20),
> axis.title.y = element_text(colour = "black",
> family="Times", angle=90, face=c('bold'), vjust= 2, size = 20),
> panel.background = element_rect(fill="white"),
> panel.grid.minor = element_blank(),
> panel.grid.major = element_blank(),
> plot.background = element_rect(fill="white"),
> panel.border = element_blank(),
> panel.background = element_blank(),
> plot.margin=unit(c(1,1.5,1.3,1.3),"cm")
> )
> }
> theme_set(theme_jack())
>
> DataX <- seq(1, 40, by = 1)
> DataY <- seq(1, 40, by = 1)
> Datadf <- data.frame(DataX, DataY)
>
> ## replace "quartz" with "CairoX11" or "X11" for various effects:
>
> quartz(width = 6 , height = 6) ## quartz renders the italic R correctly
> p1 <- ggplot() + ggtitle("Title") + coord_cartesian(xlim = c(1, 40),
> ylim = c(0, 40)) + scale_y_continuous(breaks = c(0, 10, 20, 30),
> labels = c("0", "10", "20", "30"), expand = c(0, 0)) + ylab("Y-axis")
> + scale_x_continuous(breaks = c(10, 20, 30, 40), expand = c(0, 0)) +
> geom_point(data = Datadf, aes(x = DataX, y = DataY)) + xlab("X-axis")
>
> predy <- as.integer(c(38, 25, 20, 14, 8))
> predx <- as.integer(c(20, 21, 22, 24, 25))
> datapreddf <- as.data.frame(predx, predy)
> myplm <- lm(predy ~ predx, data = datapreddf)
> lmxrange <- data.frame(predx = seq(from = 20, to = 30, by = 0.01))
> lmyrange <- predict.lm(myplm, newdata <- lmxrange)
> lmdataframe <- data.frame(lmxrange, lmyrange)
> p2 <- p1 + geom_smooth(data = lmdataframe, aes(x = predx, y =
> lmyrange), method=lm, se=FALSE, color = "black") +
> geom_abline(aes(intercept = as.vector(coefficients(myplm)[1]),
> slope=as.vector(coefficients(myplm)[2]+2)), data=lmdataframe) ## both
> give stepped lines in both quartz and CairoX11
>
> rsquaredlm = NULL
> rsquaredlm[[6]] <- 3 ## false value
> listr2 <- list(r2 = rsquaredlm[[6]])
> eq1 <- substitute(italic(R)^2 == r2, listr2)
> eqstr1 <- as.character(as.expression(eq1))
> q3 <- p2 + annotate(geom = "text", x = 20, y = 30, label = eqstr1,
> parse = TRUE, vjust = 1)
> gt <- ggplot_gtable(ggplot_build(q3))
>
> gt$layout$clip[gt$layout$name=="panel"] <- "off" ## (necessary to
> allow additional text
> ## overlap - not shown) - clipping of lines can be done with other
> coding - although it
> ##would be nice to be able to do this more efficiently
> grid.draw(gt)
>
> ## _____________________________________________
>
> Cairo() ## doesn't open any device
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.

	[[alternative HTML version deleted]]



More information about the R-help mailing list