Re: Bug: ListPlot and Tooltip
- To: mathgroup at smc.vnet.net
- Subject: [mg102585] Re: Bug: ListPlot and Tooltip
- From: Jens <noeckel at gmail.com>
- Date: Sat, 15 Aug 2009 05:34:48 -0400 (EDT)
- References: <h5bk30$hja$1@smc.vnet.net> <h5jdkb$1a2$1@smc.vnet.net>
On Aug 14, 3:00 am, dr DanW <dmaxwar... at gmail.com> wrote: > Perhaps calling it a bug was too strong; there is a discrepancy in the > behavior of ListPlot and ListLogPlot. > > In ListLogPlot, Tooltip wraps the entire dataset: > > In[1]: InputForm[ ListLogPlot[ Tooltip[ Range[4], "Data" ] ] ] > > Out[1]: Graphics[{{{}, Tooltip[{Hue[0.67, 0.6, 0.6], Point[{{1., 0.}, > {2., > 0.6931471805599453}, {3., 1.0986122886681098}, {4., > 1.3862943611198906}}]}, "Data"]... > > However, if I use ListPlot instead, I loose Tooltip entirely > > In[2]: InputForm[ ListPlot[ Tooltip[ Range[4], "Data" ] ] ] > > Out[2]: Graphics[{Hue[0.67, 0.6, 0.6], Point[{{1., 1.}, {2., 2.}, {3., > 3.}, {4., 4.}}]}... > > After having successfully used Tooltip with ListLogPlot for many > months, it was quite a surprise to have my tooltips disappear just > because I changed my x-axis scale. > > I have seen several discussions on this group on the nature of the > term "bug", and I don't really want to start another one. I have > learned high standards from Mathematica. One of its basic tenets is > "if it works at all, it works everywhere". This has caused me to > expect that if I see tooltips in ListLogPlot, I should see them in > ListPlot. > > So, I am not looking for a solution here. I'm already aware that I > can map Tooltip onto individual data points. I only posted this "bug" > to let the people who want to use my legend workaround that it is not > going to work with ListPlot. > > Daniel On Aug 14, 3:00 am, dr DanW <dmaxwar... at gmail.com> wrote: > Perhaps calling it a bug was too strong; there is a discrepancy in the > behavior of ListPlot and ListLogPlot. > > In ListLogPlot, Tooltip wraps the entire dataset: > > In[1]: InputForm[ ListLogPlot[ Tooltip[ Range[4], "Data" ] ] ] > > Out[1]: Graphics[{{{}, Tooltip[{Hue[0.67, 0.6, 0.6], Point[{{1., 0.}, > {2., > 0.6931471805599453}, {3., 1.0986122886681098}, {4., > 1.3862943611198906}}]}, "Data"]... > > However, if I use ListPlot instead, I loose Tooltip entirely > > In[2]: InputForm[ ListPlot[ Tooltip[ Range[4], "Data" ] ] ] > > Out[2]: Graphics[{Hue[0.67, 0.6, 0.6], Point[{{1., 1.}, {2., 2.}, {3., > 3.}, {4., 4.}}]}... > > After having successfully used Tooltip with ListLogPlot for many > months, it was quite a surprise to have my tooltips disappear just > because I changed my x-axis scale. > > I have seen several discussions on this group on the nature of the > term "bug", and I don't really want to start another one. I have > learned high standards from Mathematica. One of its basic tenets is > "if it works at all, it works everywhere". This has caused me to > expect that if I see tooltips in ListLogPlot, I should see them in > ListPlot. > > So, I am not looking for a solution here. I'm already aware that I > can map Tooltip onto individual data points. I only posted this "bug" > to let the people who want to use my legend workaround that it is not > going to work with ListPlot. > > Daniel Hi, if it's not a bug, it certainly is an inconsistency from the user's point of view. I use a different approach to make custom legends. The problem of extracting line styles from the plot really only becomes important when you're using the default styles. If the plot defines its own styles then you already have that information somewhere and don't need the Tooltip to extract it. So given that you're using the Mathematica defaults, I make the (empirically tested) additional assumption that these defaults are reproducible and identical for all types of plots (including ListLogPlot). Then I can get a list of these defaults by making the simplest possible plot with the same number of data sets as in the plot of interest, and extract the styles from this simple plot in a hard-coded way. Here is a function to do that: markerSymbols[n_] := Drop[Drop[ ListPlot[Transpose[{Range[n]}], PlotMarkers -> Automatic][[1, 2, 1]], -1] /. Inset[x_, i__] :> Inset[x, {0, 0}], None, -1] It gives you both, the colors and the marker symbols, as a list that can be re-used in all plots without having to be re-evaluated repeatedly. If you don't need the list of markers, just drop them from the list. I have an example of how to use this in plot legends on my notes page: http://www.uoregon.edu/~noeckel/MathematicaGraphics.html#PlotMarkers Regards, Jens