RE: one question about draw graph in frame
- To: mathgroup at smc.vnet.net
- Subject: [mg49028] RE: [mg49001] one question about draw graph in frame
- From: "David Park" <djmp at earthlink.net>
- Date: Tue, 29 Jun 2004 04:50:00 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Daohua, I don't think I completely understand your question, especially given your example. Are you trying to obtain tick labels at a set of irregular values, or are you trying to obtain different scales on the top and right of the frame? (For example you may want to label in meters on the bottom and in feet on the top.) In any case, you will have to specify the tick values that you want, either by a Table or by a list of values. In the Graphics`Graphics` package there are the functions: LinearScale, LogScale, PiScale and UnitScale that are useful for automatically generating tick values - but not for the example you give. I agree that it is a chore to completely specify the ticks for a full frame in detail. One of the problems is getting the unlabeled ticks as well as the labeled ones. If you are using the same scale up-down and/or left-right then you want the same tick marks but unlabeled up and right. The DrawGraphics package at my web site below has a command CustomTicks that will generate tick marks. It allows you to use scales that are a function of the actual plot scale so you could have different scales up-down or left-right. You can generate linear, log and databased tick values. Via options you can specify the look of the tick marks and the form of the labels. Here is your plot using databased CustomTicks. The scale function in this case is Identity since we are using the actual plot values. The up and right ticks use a null string to format the values, which means they are left blank. We need to specify the up and right ticks so they match up-down and right-left. (Automatic would use the regular Mathematica ticks that would not match.) Needs["DrawGraphics`DrawingMaster`"] Draw2D[ {Draw[x^2, {x, 0, 1}]}, Frame -> True, FrameTicks -> { CustomTicks[Identity, databased[{0, 0.5, 0.7, 1}]], CustomTicks[Identity, databased[{0, 0.5, 1}]], CustomTicks[Identity, databased[{0, 0.5, 0.7, 1}], CTNumberFunction -> ("" &)], CustomTicks[Identity, databased[{0, 0.5, 1}], CTNumberFunction -> ("" &)]}, ImageSize -> 500]; Making a nice graph is as much a work of art as a science. If you don't want to go with the set-piece plots you will have to tend to the details. But you could define a plot function that has all the custom work in it and all you do is feed in the data for each separate plot. David Park djmp at earthlink.net http://home.earthlink.net/~djmp/ From: Daohua Song [mailto:ds2081 at columbia.edu] To: mathgroup at smc.vnet.net Dear group, i draw a graph in frame model and can use framticks to let the upper and right have some scale you want. My question is that if it is possible to let the mathematics to do it automatically? you know, to write down every ticks is annoying. e.g \!\(Plot[x\^2, {x, 0, 1}, Frame -> True, FrameTicks -> {{0, .5, .7, 1}, {0, .5, 1}}]\) Any suggestion will be appreciated! daohua