[R] Graphical table in R

Dan Bolser dmb at mrc-dunn.cam.ac.uk
Tue Jan 11 18:16:52 CET 2005


On Tue, 11 Jan 2005, Marc Schwartz wrote:

>On Tue, 2005-01-11 at 14:59 +0000, Dan Bolser wrote:
>> On 10 Jan 2005, Peter Dalgaard wrote:
>> 
>> >Dan Bolser <dmb at mrc-dunn.cam.ac.uk> writes:
>> >
>> >> Cheers. This is really me just being lazy (as usual). The latex
>> function
>> >> in Hmisc allows me to make a .ps file then grab a screen shot of
>> that ps
>> >> and make a .png file.
>> >> 
>> >> I would just like to use plot so I can wrap it in a png command and
>> not
>> >> have to use the 'screen shot' in between.
>> >
>> >A screen shot of a ps file? That sounds ... weird. If you can view
>> it,
>> >presumably you have Ghostscript and that can do png files.
>> 
>> The thing is the ps file has teh wrong size, so I end up with a small
>> table in the corner of a big white page (using imageMagick convert
>> function).
>> 
>> I havent tried ghostscript (don't know the cmd).
>> 
>> I could set the paper size correctly if I knew the size of my table,
>> but I
>> don't know how to calculate that before hand and feed it into the
>> latex
>> commands (Hmisc).
>> 
>> Seems like I should roll my own table with the plot command and
>> 'primatives' (like the demo(mathplot)) - I just hoped that someone had
>> already done the hard work for me and I could type something like...
>> 
>> plot.xtable(x)
>> 
>> x = any R object that makes sense to have a tabular output.
>> 
>> Seems like such a function done correctly could be usefull for helping
>> people write up (hem) analysis.
>> 
>> Thanks again for the help everyone.
>> 
>> Dan.
>
>Dan,
>
>I think that taking Peter's/Thomas' solution provides a substantial
>level of flexibility in formatting. I wish that I had thought of that
>approach... :-)
>
>For example:
>
>  plot(1:10, type="n")
>
>  txt <- capture.output(ftable(UCBAdmissions))
>
>  par(family = "mono")
>
>  text(4, 8, paste(txt,collapse="\n"))
>
>  text(4, 6, paste(txt,collapse="\n"), cex = 0.75)
>
>  text(4, 4, paste(txt,collapse="\n"), cex = 0.5)
>
>
>Using par(cex) in the call to text() and modifying the x,y coordinates
>will enable you to place the table anywhere within the plot region and
>also adjust the overall size of the table by modifying the font size.
>
>You can also use the 'adj' and 'pos' arguments in the call to text() to
>adjust the placement of the table, so rather than being centered on x,y
>(the default) it could be moved accordingly. See ?text for more
>information.
>
>Finally, you can even put a frame around the table by crudely using
>strwidth() and strheight(). Some additional hints on this would be
>available by reviewing the code for legend()...
>
># Do this for the first table (assumes 'cex = 1'):
>
># Get table width and add 10%
>table.w <- max(strwidth(txt)) * 1.1
>
># Get table height (not including space between rows)
>table.h <- sum(strheight(txt))
>
>rect(4 - (table.w / 2), 8 - (table.h), 
>     4 + (table.w / 2), 8 + (table.h))
>
>
>It would take some work to combine all of this into a single function,
>providing for additional flexibility in positioning, frame line
>types/color/width, adjusting for 'cex' and so on. It could be done
>though...
>
>This is, in effect, taking an entire R character object and plotting it.
>
>Does that help?

It certainly fits the bill. I will give it a go, but I may stick with the
latex() functions in Hmisc.

Thanks for all the help, it is a really elegant solution in the end :)

Dan.


>
>Marc
>
>




More information about the R-help mailing list