Re: Table as Graphics Object?
- To: mathgroup at smc.vnet.net
- Subject: [mg35068] Re: [mg35027] Table as Graphics Object?
- From: Andrzej Kozlowski <andrzej at platon.c.u-tokyo.ac.jp>
- Date: Thu, 20 Jun 2002 23:56:22 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Perhaps it may be useful to make a quick summary of the three approaches
I proposed in answer to this question. The first method creates a bitmap
representation of the table of numbers or symbols, and while it does
scale, it looses quality, as bitmaps do. The second approach produces a
graphic representation of a table that can be scaled to an arbitrary
size and whose font can be changed by setting $DefaultFont to any chosen
font or size. However this method is less flexible: for example I think
one can't create matrix brackets using it. Finally, the last approach
produces a fixed size, fixed font graphic representation of a table.
Andrzej
On Friday, June 21, 2002, at 11:03 AM, Andrzej Kozlowski wrote:
> I just realized that there is another approach to producing a nice
> graphic object representing a table or even a matrix. You need to pay
> attention to the FormatType option in the Text primitive.
>
> Here is another version of the graphic below, thsi time we will
> represent out table as a matrix wiht the usual matrix brackets.
>
> In[1]:=
> ls=Table[Random[Integer,{1,6}],{5},{5}];
>
> In[2]:=
> myTable=Graphics[Text[ls,{0,0},FormatType->TraditionalForm]];
>
> In[3]:=
> myGraphic=ListPlot3D[ls,DisplayFunction->Identity];
>
> In[4]:=
> Show[GraphicsArray[{myGraphic,myTable}]]
>
>
> There are lots of variations onthsi theme you can try and you can of
> course make, if you wish, use of the options available in Text.
>
> Andrzej
>
>
> On Friday, June 21, 2002, at 10:17 AM, Andrzej Kozlowski wrote:
>
>> The method that I described produces only a bitmap graphic so I do not
>> think it will scale well and look good at different image sizes,
>> besides having the other disadvantages. If you really want something
>> that works better, and judging by your message you do, you should make
>> use of the Text primitive. It need not be so hard. Here is one simple
>> example:
>>
>> First we make a table of random number, say between 1 and 6:
>>
>> ls = Table[Random[Integer, {1, 6}], {5}, {5}];
>>
>> Next, we make a graphic "version" of the table. Note that there is no
>> need to bother about the choice of text coordinates for such a simple
>> example:
>>
>> myTable = GraphicsArray[Map[Graphics[Text[#, {0, 0}]] &, ls, {2}]];
>>
>> Let's also make a 3D graphic using list plot and our matrix of values
>> ls,:
>>
>> myGraphic = ListPlot3D[ls, DisplayFunction -> Identity];
>>
>> Now we can display them side by side:
>>
>> Show[GraphicsArray[{myGraphic, myTable}]]
>>
>> This looks fine, will scale properly and can be automated to deal with
>> a large number of different cases. Probably a variant of this approach
>> will also work in your case.
>>
>>
Andrzej Kozlowski
Toyama International University
JAPAN
http://platon.c.u-tokyo.ac.jp/andrzej/
>>
>>
>>
>> On Friday, June 21, 2002, at 03:10 AM, AES wrote:
>>
>>> Thank you, and this is wonderful! -- as a way of demonstrating the
>>> kinds of complex things one can get led into with computers and
>>> graphics, anyway. I have all those tools, and may try this if I ever
>>> need to put a table or something similar into a presentation graphic.
>>>
>>> What I'm currently doing, however, is running a program that takes in
>>> a bunch of parameters and calculates a plot, and I want to run a lot
>>> of cases and produce a single output for each that will include both
>>> the plot and the long list of parameters that produced the plot. What
>>> I'm doing currently is
>>>
>>> --Print a page break
>>> --Print a table of paramters
>>> --Print the plot (size of plot varies)
>>> --Repeat
>>>
>>> The object was to make this a little simpler, and maybe get two cases
>>> per page, without more complex programming.
>>>
>>> So, seriously, I do appreciate your writing, but I don't clearly want
>>> to follow all your steps 50 or 60 times!
>>>
>>> I'd be curious: If you Show your "TableGraphic" several times at
>>> different ImageSizes, do the fonts and characters scale neatly and
>>> look good at different sizes?
>>>
>>> Thanks again, Tony Siegman
>>>
>>>
>>>
>>> At 12:35 AM +0900 6/21/02, Andrzej Kozlowski wrote:
>>>
>>>
>>>> There is a trick you may wish to try. I just did it and it seems to
>>>> work. You will need, besides Mathematica, a graphic program. There
>>>> might be a clever trick that will make it possible to accomplish the
>>>> same thing without one, but I have not found it.
>>>>
>>>> Anyway, this is what I just did under Mac OS X.
>>>>
>>>> First, I created a table with:
>>>>
>>>> Table[Random[Integer], {5}, {5}] // TableForm
>>>>
>>>> I then selected the output and using the Cell/ConvertTo menu
>>>> converted it to PICT, a Macintosh graphic format. (I expect other
>>>> formats will also work). I then copied the graphic and pasted it
>>>> into GraphicConverter, a well known Mac graphic program (any other
>>>> such program will do). I then copied the graphic from
>>>> GraphicConverted and pasted it back into Mathematica. I selected
>>>> the entire cell and chose ConvertTo InputForm. You get a rather
>>>> long expression which describes a graphic object (a RasterArray).
>>>> Evaluate thsi cell, then evaluate myTable= %, and then
>>>> Show[GraphicsArray[{myTable,myPlot}]] will give you just what you
>>>> wanted.
>>>> This does not seem to work without using an external graphic
>>>> program. Merely converting the Table first to a graphic and then
>>>> into InputForm produces merely Mathematica input cell, not the input
>>>> cell for a graphic object. It seems you have to force Mathematica to
>>>> forget that your graphic was created by converting a Mathematica
>>>> output cell.
>>>>
>>>> Of course this gives you a raster graphic, which is not of the
>>>> highest quality and rather large. If you want something better you
>>>> really need to use the Text primitive.
>>>>
>>
>>>>
>>>> On Thursday, June 20, 2002, at 03:13 PM, aes wrote:
>>>>
>>>>> I'd like to include a Table as one of the objects in a
>>>>> GraphicsArray, using a simple syntax like
>>>>>
>>>>> myTable = Table[---] // TableForm
>>>>>
>>>>> myPlot = Plot[---]
>>>>>
>>>>> Show[ GraphicsArray[ {{myTable, myPlot}} ]
>>>>>
>>>>> I know I could built a "psuedo Table" into a Graphics object using
>>>>> the usual Text[---] commands, but at the cost of a lot of work to
>>>>> input and position the various lines.
>>>>>
>>>>> Any other approaches?
>>>>>
>>>>> Thanks, AES
>>>
>>
>