{"id":1632,"date":"2014-01-12T16:40:21","date_gmt":"2014-01-12T21:40:21","guid":{"rendered":"http:\/\/lukemiller.org\/?p=1632"},"modified":"2014-01-26T18:20:44","modified_gmt":"2014-01-26T23:20:44","slug":"make-your-r-figures-legible-in-powerpointkeynote-presentations","status":"publish","type":"post","link":"https:\/\/lukemiller.org\/index.php\/2014\/01\/make-your-r-figures-legible-in-powerpointkeynote-presentations\/","title":{"rendered":"Make your R figures legible in Powerpoint\/Keynote presentations"},"content":{"rendered":"<p>Having just returned from the <a href=\"http:\/\/sicb.org\/\" target=\"_blank\">SICB<\/a> 2014 meetings, the appearance of many people&#8217;s Powerpoint figures is fresh on my mind. The sheer number of tiny figure labels (tick marks, axis titles, legend text etc) is disappointing. If we want to point fingers, MATLAB users are clearly the worst offenders because of the microscopic default label sizes in that program, but there are plenty of illegible R and matplotlib figures out there as well. Excel is obviously its own special class of terrible, but we will speak of it no more. The default settings in most of these programs are designed for print display, where small font sizes are usually fine. But when you try to put that print-optimized figure up on a low resolution projector on a small screen in a large meeting room, text becomes unreadable very quickly.<\/p>\n<p>What follows below are some simple examples of how to expand the figure labels on R plots generated using the base plot() command. In my typical workflow these days, I&#8217;m writing all my R code inside a <a href=\"http:\/\/yihui.name\/knitr\/?utm_source=dlvr.it&amp;utm_medium=facebook\" target=\"_blank\">knitr<\/a> file to generate TeX and pdf files for distributing to collaborators. As usual, the defaults here are tailored for printed material, so when I decide I need a figure for a slide presentation, I modify one of my existing plotting code sections to scale up the font sizes and output as a 1024&#215;768-pixel PNG graphic file (similar to a JPEG, if you&#8217;re unfamiliar with PNG). The PNG file is nice because the memory size is tiny, it doesn&#8217;t introduce ugly artifacts like JPEG does, and Powerpoint or Keynote can&#8217;t screw up the scaling of the contents of the figure like they might with a vector format. Furthermore, a raster image format such as PNG will transfer back and forth between Mac and PC versions of presentation software without changing. Even if the PC in the meeting room destroys the rest of your fancy PowerPoint animations and text sizing and whatever other visual abominations you&#8217;ve created, the PNG figures will just work. The majority of slide projectors are still 1024&#215;768 resolution or lower, so you know a PNG file at that resolution will fill the frame and look good, and you can always click-and-drag to shrink the image down to fit inside the rest of your existing slide design. Eventually high-def projectors (1920&#215;1080) will become more common, in which case it will be useful to bump up the size of the PNG that R is outputting to match that higher resolution. The primary downside to using PNG figures in your presentation is that you can&#8217;t tweak individual elements of the figure after it&#8217;s made. Instead you need to go back to your R code, tweak there, and generate a new version of the PNG file.<\/p>\n<p>Let&#8217;s start by making up some fake data and placing it in a data frame called <code>df<\/code>.<\/p>\n<p>[code lang=&#8221;r&#8221;]<br \/>\ndf = data.frame(x = rnorm(30), y = runif(30,min = 10,max = 10000),<br \/>\n        dates = seq(as.Date(&#8216;2013-12-01&#8217;),(as.Date(&#8216;2013-12-01&#8217;)+29), by = 1))<br \/>\n[\/code]<\/p>\n<p>Then make a basic plot of the x and y data. The plot command is preceded by the <code>png()<\/code><br \/>\nfunction that opens and begins writing plot data to a new png file, and is followed by the <code>dev.off()<\/code> function to close and save the png file. Note that the arguments for the png file include the width and height of the output file in pixels. The png output file will be saved to your current R working directory in this case. R will not produce an on-screen version of the figure in this case since it writes the figure directly to disk.<\/p>\n<p>[code lang=&#8221;r&#8221;]<br \/>\n# The default plot might be fine on screen and in print, but is too small<br \/>\n# for a slide presentation<br \/>\npng(file = &#8216;pngtest1.png&#8217;, width = 1024, height = 768, units = &quot;px&quot;)<br \/>\nplot(y~x, data = df, las = 1)<br \/>\ndev.off() # close plot and save to disk<br \/>\n[\/code]<\/p>\n<p>&nbsp;<\/p>\n<figure id=\"attachment_1646\" aria-describedby=\"caption-attachment-1646\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-1646\" alt=\"The default plot. Good luck reading this from across the room.\" src=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest1-300x225.png\" width=\"300\" height=\"225\" srcset=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest1-300x225.png 300w, https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest1.png 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-1646\" class=\"wp-caption-text\">The default plot. Good luck reading this from across the room.<\/figcaption><\/figure>\n<p>That is roughly where most people stop when they make a plot for a presentation, but clearly things are far too small to read from the back of the room in a meeting. So we&#8217;ll use the <code>cex<\/code> argument inside the plot command to increase the size of the plotted points and the <code>cex.axis<\/code> argument to increase the size of the numbers on both axes labels. You could also include a <code>cex.lab<\/code> argument to increase the size of the axis titles.<\/p>\n<p>[code lang=&#8221;r&#8221;]<br \/>\npng(file = &#8216;pngtest2.png&#8217;, width = 1024, height = 768, units = &quot;px&quot;)<br \/>\nplot(y~x, data = df, las = 1,<br \/>\n\t\tcex = 2,\t# expand data point size<br \/>\n\t\tcex.axis = 2.5) # expand axis tick labels<br \/>\ndev.off() # close plot and save to disk<br \/>\n[\/code]<\/p>\n<p>&nbsp;<\/p>\n<figure id=\"attachment_1647\" aria-describedby=\"caption-attachment-1647\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-1647\" alt=\"The x and y axis labels have been expanded using the cex argument, but they don't quite fit here. \" src=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest2-300x225.png\" width=\"300\" height=\"225\" srcset=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest2-300x225.png 300w, https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest2.png 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-1647\" class=\"wp-caption-text\">The x and y axis labels have been expanded using the cex argument, but they don&#8217;t quite fit here.<\/figcaption><\/figure>\n<p>For a lot of figures that slight modification to the plot command might be sufficient, but I&#8217;ve purposely made the y-axis values too large to fit inside the default margin. To fix this, before we submit the <code>plot()<\/code> command, we&#8217;ll issue a <code>par()<\/code> command to modify the default margins.<\/p>\n<p>[code lang=&#8221;r&#8221;]<br \/>\npng(file = &#8216;pngtest3.png&#8217;, width = 1024, height = 768, units = &quot;px&quot;)<br \/>\npar(mar = c(5,10,1,1))<br \/>\nplot(y~x, data = df, las = 1,<br \/>\n\t\tcex = 2,\t# expand data point size<br \/>\n\t\tcex.axis = 2.5) # expand axis tick labels<br \/>\ndev.off() # close plot and save to disk<br \/>\n[\/code]<\/p>\n<p>&nbsp;<\/p>\n<figure id=\"attachment_1648\" aria-describedby=\"caption-attachment-1648\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-1648\" alt=\"Changing the margin sizes with the par() function gives room for the y-axis labels to fit. \" src=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest3-300x225.png\" width=\"300\" height=\"225\" srcset=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest3-300x225.png 300w, https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest3.png 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-1648\" class=\"wp-caption-text\">Changing the margin sizes with the par() function gives room for the y-axis labels to fit.<\/figcaption><\/figure>\n<p>Now the axis values fit inside the figure dimensions, but the axis titles are still tiny and in the wrong place. We&#8217;ll fix the y-axis title by blanking it out inside the <code>plot()<\/code> and then manually inserting it with the <code>mtext()<\/code> function. The same could be done with the x-axis title if you want to customize its size and placement. For the <code>mtext()<\/code> function, the arguments include <code>side = 2<\/code> to put the text on the 2nd (y) axis, <code>line = 7<\/code> to move the text out to the 7th line of the 10 lines of space we created with the <code>par()<\/code> function earlier, and <code>cex = 3<\/code> to make the text large and readable.<\/p>\n<p>[code lang=&#8221;r&#8221;]<br \/>\npng(file = &#8216;pngtest4.png&#8217;, width = 1024, height = 768, units = &quot;px&quot;)<br \/>\npar(mar = c(5,10,1,1))<br \/>\nplot(y~x, data = df, las = 1,<br \/>\n\t\tcex = 2,\t# expand data point size<br \/>\n\t\tcex.axis = 2.5, # expand axis tick labels,<br \/>\n\t\tylab = &#8221;) # blank y axis label<br \/>\n# create y label<br \/>\nmyYlabel = &quot;Some response variable&quot;<br \/>\n# print y label on current plot<br \/>\nmtext(myYlabel, side = 2, line = 7, cex = 3) # side = 2 puts label on the y-axis<br \/>\ndev.off() # close plot and save to disk<br \/>\n[\/code]<\/p>\n<figure id=\"attachment_1649\" aria-describedby=\"caption-attachment-1649\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest4.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-1649\" alt=\"Inserting a large y-axis title. \" src=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest4-300x225.png\" width=\"300\" height=\"225\" srcset=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest4-300x225.png 300w, https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest4.png 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-1649\" class=\"wp-caption-text\">Inserting a large y-axis title.<\/figcaption><\/figure>\n<p>Next I&#8217;ll change the x-axis data to use the dates stored in the data frame. Because the <code>dates<\/code> column is of the Date type, R will properly interpret the values as dates and use appropriate x-axis tick mark values.<\/p>\n<p>[code lang=&#8221;r&#8221;]<br \/>\n# Switch to plotting dates on x axis<br \/>\npng(file = &#8216;pngtest5.png&#8217;, width = 1024, height = 768, units = &quot;px&quot;)<br \/>\npar(mar = c(5,10,1,1))<br \/>\nplot(y~dates, data = df, las = 1,<br \/>\n\t\tcex = 2,\t# expand data point size<br \/>\n\t\tcex.axis = 2.5, # expand axis tick labels,<br \/>\n\t\tylab = &#8221;,  # blank y axis label<br \/>\n\t\tcex.lab = 2.5) # Expand axis titles (only x axis title is visible)<br \/>\n# create y label<br \/>\nmyYlabel = &quot;Some response variable&quot;<br \/>\n# print y label on current plot<br \/>\nmtext(myYlabel, side = 2, line = 7, cex = 3)<br \/>\ndev.off() # close plot and save to disk<br \/>\n[\/code]<\/p>\n<figure id=\"attachment_1650\" aria-describedby=\"caption-attachment-1650\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest5.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-1650\" alt=\"The x-axis data now come from the dates column of the data frame. \" src=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest5-300x225.png\" width=\"300\" height=\"225\" srcset=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest5-300x225.png 300w, https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest5.png 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-1650\" class=\"wp-caption-text\">The x-axis data now come from the dates column of the data frame.<\/figcaption><\/figure>\n<p>What if you don&#8217;t like the Dec 02 style of labeling on the x-axis? You can blank out the x-axis tick marks and labels inside the <code>plot()<\/code> command and place them manually with the <code>axis()<\/code> and <code>mtext()<\/code> functions.<\/p>\n<p>[code lang=&#8221;r&#8221;]<br \/>\n# Manually plot x axis dates with custom formatting<br \/>\npng(file = &#8216;pngtest6.png&#8217;, width = 1024, height = 768, units = &quot;px&quot;)<br \/>\npar(mar = c(8,10,1,1)) # expand figure margins to fit the large axis titles<br \/>\nplot(y~dates, data = df, las = 1,<br \/>\n\t\tcex = 2,\t# expand data point size<br \/>\n\t\tcex.axis = 2.5, # expand axis tick labels,<br \/>\n\t\tylab = &#8221;,  # blank y axis label<br \/>\n\t\txlab = &#8221;,  # blank x axis label<br \/>\n\t\txaxt = &#8216;n&#8217;) # blank x axis tick marks<br \/>\n# create y label<br \/>\nmyYlabel = &quot;Some response variable&quot;<br \/>\n# print y axis title on current plot<br \/>\nmtext(myYlabel, side = 2, line = 7, cex = 3)<br \/>\n# print x axis tick marks<br \/>\naxis.Date(side = 1, # side 1 is the x axis, side 2 is the y axis<br \/>\n\t\tat = pretty(df$dates), # pretty() chooses nicely spaced tick marks<br \/>\n\t\tformat = &quot;%b %d&quot;, # axis.Date accepts a date formatting argument<br \/>\n\t\tcex.axis = 2.5, # increase date label size<br \/>\n\t\tpadj = 1) # shift labels down away from axis slightly<br \/>\n# create x label<br \/>\nmyXlabel = &quot;Sample dates, 2013&quot;<br \/>\n# print x axis title on current plot<br \/>\nmtext(myXlabel, side = 1, line = 6.5, cex = 3)<br \/>\ndev.off() # close plot and save to disk<br \/>\n[\/code]<\/p>\n<figure id=\"attachment_1651\" aria-describedby=\"caption-attachment-1651\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest6.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-1651\" alt=\"The x-axis tick labels are now plotted with the axis.Date() function so they can be custom-formatted. \" src=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest6-300x225.png\" width=\"300\" height=\"225\" srcset=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest6-300x225.png 300w, https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest6.png 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-1651\" class=\"wp-caption-text\">The x-axis tick labels are now plotted with the axis.Date() function so they can be custom-formatted.<\/figcaption><\/figure>\n<p>What if you want more date values plotted on the x-axis? You can force the <code>pretty()<\/code> function to produce a minimum number of tick marks.<\/p>\n<p>[code lang=&#8221;r&#8221;]<br \/>\n# Manually plot x axis dates with custom formatting<br \/>\n# Force more x tick marks to appear, which squeezes tick mark labels and may<br \/>\n# leave out some labels<br \/>\npng(file = &#8216;pngtest7.png&#8217;, width = 1024, height = 768, units = &quot;px&quot;)<br \/>\npar(mar = c(8,10,1,1)) # expand figure margins to fit the large axis titles<br \/>\nplot(y~dates, data = df, las = 1,<br \/>\n\t\tcex = 2,\t# expand data point size<br \/>\n\t\tcex.axis = 2.5, # expand axis tick labels,<br \/>\n\t\tylab = &#8221;,  # blank y axis label<br \/>\n\t\txlab = &#8221;,  # blank x axis label<br \/>\n\t\txaxt = &#8216;n&#8217;) # blank x axis tick marks<br \/>\n# create y label<br \/>\nmyYlabel = &quot;Some response variable&quot;<br \/>\n# print y axis title on current plot<br \/>\nmtext(myYlabel, side = 2, line = 7, cex = 3)<br \/>\n# print x axis tick marks<br \/>\n# print x axis tick marks<br \/>\naxis.Date(side = 1, # side 1 is the x axis, side 2 is the y axis<br \/>\n\t\tat = pretty(df$dates, min.n = 6), # force at least 6 tick marks<br \/>\n\t\tformat = &quot;%b %d&quot;, # axis.Date accepts a date formatting argument<br \/>\n\t\tcex.axis = 2.5, # increase date label size<br \/>\n\t\tpadj = 1) # shift labels down away from axis slightly<br \/>\n# create x label<br \/>\nmyXlabel = &#8216;Sample dates, 2013&#8217;<br \/>\n# print x axis title on current plot<br \/>\nmtext(myXlabel, side = 1, line = 6.5, cex = 3)<br \/>\ndev.off() # close plot and save to disk<br \/>\n[\/code]<\/p>\n<p>&nbsp;<\/p>\n<figure id=\"attachment_1652\" aria-describedby=\"caption-attachment-1652\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest7.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-1652\" alt=\"Trying to shove more tick marks into the x-axis means that some labels get dropped. \" src=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest7-300x225.png\" width=\"300\" height=\"225\" srcset=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest7-300x225.png 300w, https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest7.png 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-1652\" class=\"wp-caption-text\">Trying to shove more tick marks into the x-axis means that some labels get dropped.<\/figcaption><\/figure>\n<p>The downside to this attempt is that R can&#8217;t properly fit all of the tick mark labels in there because we&#8217;ve increased the text size, so it drops many of the labels. One solution is to not let <code>axis()<\/code> place the text labels, and instead use the <code>text()<\/code> function to rotate and place the text labels on the x-axis.<\/p>\n<p>[code lang=&#8221;r&#8221;]<br \/>\n# Rotate x-axis tick labels so they fit better.<br \/>\npng(file = &#8216;pngtest8.png&#8217;, width = 1024, height = 768, units = &quot;px&quot;)<br \/>\npar(mar = c(8,10,1,1)) # expand figure margins to fit the large axis titles<br \/>\nplot(y~dates, data = df, las = 1,<br \/>\n\t\tcex = 2,\t# expand data point size<br \/>\n\t\tcex.axis = 2.5, # expand axis tick labels,<br \/>\n\t\tylab = &#8221;,  # blank y axis label<br \/>\n\t\txlab = &#8221;,  # blank x axis label<br \/>\n\t\txaxt = &#8216;n&#8217;) # blank x axis tick marks<br \/>\n# create y label<br \/>\nmyYlabel = &quot;Some response variable&quot;<br \/>\n# print y axis title on current plot<br \/>\nmtext(myYlabel, side = 2, line = 7, cex = 3)<br \/>\n# print x axis tick marks, but leave labels blank<br \/>\naxis.Date(side = 1, at = pretty(df$dates, min.n = 6), labels = FALSE,<br \/>\n\t\tcex.axis = 2)<br \/>\n# We&#8217;ll use the text() function to print the rotated labels, but first we need<br \/>\n# to figure out where the lower limit of the y-axis is so that we can draw<br \/>\n# text below it<br \/>\nxlow = par()$usr[3] # 3rd value is minimum y value<br \/>\nop = par(xpd = NA) # turn off clipping<br \/>\ntext(x = pretty(df$dates, min.n = 6), # specify location of labels relative to x<br \/>\n\t\ty = xlow, # specify location of labels relative to y-axis<br \/>\n\t\tlabels = strftime(pretty(df$dates, min.n = 6), format = &#8216;%b %d&#8217;),<br \/>\n\t\tsrt = 45, # rotate text 45 degrees<br \/>\n\t\tcex = 2, # enlarge labels<br \/>\n\t\tadj = c(1.1,1.2)) # move label position to line up under tick marks<br \/>\n# Using the adj argument to move rotated tick labels is weird. If the value is<br \/>\n# (0,0), the base of the first letter\/number will sit just above the tick<br \/>\n# mark. Adjusting the first value to adj = c(1,0) will move the label so the<br \/>\n# end of the last character of the label is to the left and below the tick mark.<br \/>\n# You&#8217;ll still want to move the label down a bit further, and probably move it<br \/>\n# to the right in the process, so play with both values of adj = c(1.1,1.2)<br \/>\npar = op # reset plotting options to turn on masking<br \/>\n# Place a x-axis title<br \/>\nmtext(&#8216;Sample dates, 2013&#8217;, side = 1, line = 6.5, cex = 3)<br \/>\ndev.off() # close plot and save to disk<br \/>\n[\/code]<\/p>\n<p>&nbsp;<\/p>\n<figure id=\"attachment_1653\" aria-describedby=\"caption-attachment-1653\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest8.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-1653\" alt=\"Rotating the labels allows you to fit every label on the x-axis. \" src=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest8-300x225.png\" width=\"300\" height=\"225\" srcset=\"https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest8-300x225.png 300w, https:\/\/lukemiller.org\/wp-content\/uploads\/2014\/01\/pngtest8.png 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-1653\" class=\"wp-caption-text\">Rotating the labels allows you to fit every label on the x-axis.<\/figcaption><\/figure>\n<p>Hopefully that gives you some indication of how to customize your basic plots to make them legible on a projector screen. If you want to learn about the various <code>cex<\/code> arguments, enter <code>?par<\/code> at the R command line to open the help file for the <code>par()<\/code> function. The majority of the <code>cex<\/code> arguments listed there work within the <code>plot()<\/code> functions.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Having just returned from the SICB 2014 meetings, the appearance of many people&#8217;s Powerpoint figures is fresh on my mind. The sheer number of tiny figure labels (tick marks, axis titles, legend text etc) is disappointing. If we want to point fingers, MATLAB users are clearly the worst offenders because of the microscopic default label [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[218],"tags":[172,175,176,174,58,173],"class_list":["post-1632","post","type-post","status-publish","format-standard","hentry","category-r-project","tag-figure-labels","tag-keynote","tag-png","tag-powerpoint","tag-r-project","tag-text-size"],"_links":{"self":[{"href":"https:\/\/lukemiller.org\/index.php\/wp-json\/wp\/v2\/posts\/1632","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lukemiller.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lukemiller.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lukemiller.org\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/lukemiller.org\/index.php\/wp-json\/wp\/v2\/comments?post=1632"}],"version-history":[{"count":25,"href":"https:\/\/lukemiller.org\/index.php\/wp-json\/wp\/v2\/posts\/1632\/revisions"}],"predecessor-version":[{"id":1695,"href":"https:\/\/lukemiller.org\/index.php\/wp-json\/wp\/v2\/posts\/1632\/revisions\/1695"}],"wp:attachment":[{"href":"https:\/\/lukemiller.org\/index.php\/wp-json\/wp\/v2\/media?parent=1632"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lukemiller.org\/index.php\/wp-json\/wp\/v2\/categories?post=1632"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lukemiller.org\/index.php\/wp-json\/wp\/v2\/tags?post=1632"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}