Re: listplot and legend (again)
- To: mathgroup at smc.vnet.net
- Subject: [mg80231] Re: [mg80193] listplot and legend (again)
- From: Stern <nycstern at gmail.com>
- Date: Wed, 15 Aug 2007 04:19:22 -0400 (EDT)
- References: <200708141113.HAA09965@smc.vnet.net>
Personally, I like the way ShowLegend works now; I often take advantage of the flexibility. However, I agree that it might have been nice had Wolfram provided some more sample code. You may find the following useful. You pass the following function two arguments -- a list of coordinate lists, and a list of captions. The default colorlist has 15 members; if you want to pass a larger number of coordinate lists than that, you'll need to create and pass a longer colorlist as well. If it's not clear how that works, let me know and I'll post more detailed examples. The optional parameter ls can be set to change the legend's size, while the optional parameter lp can be set to change its position. In[]:= Needs["PlotLegends`"] In[]:=Options[withlegend] = {lp -> {1, .25}, ls -> Automatic, colorlist -> ColorData[1, "ColorList"]}; In[]:= withlegend[listoflists_, listofnames_, OptionsPattern[]] := Module[{graph, legend}, graph = Show[ Map[ListPlot[#[[1]], Mesh -> Full, MeshStyle -> #[[3]], Joined -> True, PlotStyle -> {PointSize[0.03], #[[3]]}, PlotRange -> All, Frame -> False, DisplayFunction -> Identity] &, Transpose[{listoflists, listofnames, Take[OptionValue[colorlist], Length[listoflists]]}]]]; legend = {(({Graphics[{#1, Thick, Line[{{0.05, 0.7}, {1, .7}}]}], Style[#2, FontSize -> 10]} &) @@ #1 &) /@ Transpose[{Take[OptionValue[colorlist], Length[listoflists]], listofnames}], LegendPosition -> OptionValue[lp], LegendSize -> OptionValue[ls], LegendShadow -> {0, 0}}; ShowLegend[graph, legend]] Try the following to see it in action: In[]:= list1 = {{1, .2}, {2, .4}, {3, .343}, {4.1, .3321}}; In[]:= list2 = {{1, .21}, {2, .34}, {3, .43}, {4, .1}}; In[]:= list3 = {{1, .12}, {2, .34}, {3, .56343}, {4.1, .13321}}; In[]:= withlegend[{list1, list2, list3}, {"one", "two", "three"}] You can customize the design of the graphs and legend as much as you like. In my "production" version of this function, it is possible to pass most of the optional arguments one can send to ListPlot (AxesOrigin, etc.), as well as adjusting the appearance of the legend in many ways at runtime. My production version takes lists of data objects as variables, rather than lists of coordinate lists, as above. Each data object has a header which includes the object's name, obviating the need to pass the separate list of captions, as I have done above. Also, as I work almost exclusively with financial data, my production version is based around DateListPlot rather than ListPlot. These changes are minor, however, once you are comfortable with the code. I hope that helps. -stern On 8/14/07, Arkadiusz.Majka at gmail.com <Arkadiusz.Majka at gmail.com> wrote: > Hi, > > I know that there has been at least one post on this topic but I > still can't draw legend inside ListPlot. > > When i plot several curves, colors for them are chosen automaticaly > by Mathematica. How can I plot a legend for them? > > May I ask for an example, please? Why quite good solution existed in > MultipleListPlot in Mathv5.2 just vanished???? > > Arek > > >
- References:
- listplot and legend (again)
- From: Arkadiusz.Majka@gmail.com
- listplot and legend (again)