Re: ShowLegend....

*To*: mathgroup at smc.vnet.net*Subject*: [mg53659] Re: [mg53617] ShowLegend....*From*: "David Annetts" <davidannetts at ihug.com.au>*Date*: Fri, 21 Jan 2005 06:37:27 -0500 (EST)*Sender*: owner-wri-mathgroup at wolfram.com

Hi Peter, > There has to be an easier way to do this.... > > I was trying to figure out how to use showlegend, and here's > what I came out with.... > > (* plot2 and plot3 are two different plots *) > > plotX = Show[ {plot2 , plot3}, PlotRange -> {{ -0.4, 0.4}, {-1, 10}}] > > legend = ShadowBox[ {-0.4, 6}, {0.3, 3}, ShadowBackground -> > GrayLevel[ 0.5], ShadowOffset -> {0.025, -0.5}]; > > showlegend = Show[ plotX, Graphics[{legend , { Text["Normal - > solid", {-.375, 6.775}, {-1.0, 0}], Text["Data - dashed", > {-.375, 7.775}, {-1.0, 0}] } } ] ] > > That is way to much code to just add a legend to a graph. You can use the Graphics`Legend package, to place legend on graphs, but, IMHO, it's just as messy! This package is loaded when (if?) you load Graphics`MultipleListPlot. > Is there a faster/easier way to do this? > Is there a way that the legend also includes an example of > the line / linestyle? Look at the code below. Define SetOptions[MultipleListPlot, PlotRange -> {{-1, 2.5}, {-1, 5}}, SymbolStyle -> None, SymbolShape -> None, DisplayFunction -> Identity, FrameTicks -> {LogScale, LogScale, None, None} ]; cmp = {8, 9, 2, 16, 1}; col = {Black, Red, Green, Blue, Cyan, Magenta}; titl = { "Dykes only", "East dyke only", "Full (Trg @ 138 m)", "Full (Trg @ 188 m)", "Full (Trg @ 238 m)", "Full (Trg @ 288 m)", "Full (Trg @ 338 m)", "Full model", "Target only", "Target @ 138 m", "Target @ 188 m", "Target @ 238 m", "Target @ 288 m", "Target @ 338 m", "Target @ ???", "West dyke only"}; Then we can define a legend like so ... ltxt = titl[[cmp[[#]]]] & /@ Range[Length@cmp]; llin = Graphics[{col[[#]], Thickness[.1], Line[{{-1, 0}, {0, 0}}]}] & /@ Range[Length@cmp]; lgnd = {Transpose[{llin, ltxt}], LegendShadow -> None, LegendPosition -> {.3, .05}, LegendSize -> {.7, .5} }; After scaling our data, we can use the legend as below ... tmp = aztrg[[cmp[[#]]]] & /@ Range[Length@cmp]; plt = MultipleListPlot[Log[10, tmp[[#]]], PlotStyle -> { ccol[[#]]}] & /@ Range[Length@cmp]; plta = Show[plt, PlotLabel -> "Model comparison over orebody"]; pltb = ShowLegend[plta, lgnd]; Where aztrg are the actual data, in this case, a {time, response} pair. Regards, Dave. -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.300 / Virus Database: 265.7.1 - Release Date: 19/01/2005