Re: PlotMarkers and DateListPlot
- To: mathgroup at smc.vnet.net
- Subject: [mg110196] Re: PlotMarkers and DateListPlot
- From: "David Park" <djmpark at comcast.net>
- Date: Mon, 7 Jun 2010 08:07:50 -0400 (EDT)
The problem is that a single PlotMarker is being used for each data set and you are plotting only one basic data set. The solution is to add the disks as extra items in the plot. Although this can probably be done with regular Mathematica, perhaps using Prolog, I find it easiest to use the Presentations package that is designed in part to more easily make custom graphics. Needs["Presentations`Master`"] HourlyAverageCost = {186.8235294117647, 153.28722772277229, 148.25412844036697, 147.67576719576721, 148.1043396226415, 147.34375, 142.72424242424245, 141.44635627530366, 152.81413333333333, 151.30989583333334, 153.04958677685951, 153.12459893048128, 163.7921212121212, 184.74429223744292, 177.25316455696202, 140.55072463768116, 215.27272727272728, 149.90322580645162, 138.625, 94.0, 0, 140.0625, 142.44230769230768}; HourlyDataPointCount = {17, 101, 109, 189, 159, 160, 231, 494, 375, 384, 242, 187, 165, 219, 158, 69, 11, 31, 8, 1, 0, 16, 52}; Hours = Map[DateString[{2010, 1, 1, #, 0, 0}] &, Array[# &, 23]]; point[i_] := Module[ {t = AbsoluteTime[{2010, 1, 1, i, 0}], y = Part[HourlyAverageCost, i], count = Part[HourlyDataPointCount, i], maxcount = Max[HourlyDataPointCount], radius}, radius = 20.0 Sqrt[count/maxcount]; Tooltip[{AbsoluteThickness[1], If[radius > 1, CirclePoint[{t, y}, radius, Black, Orange], CirclePoint[{t, y}, 4, Black, White]], Black, AbsolutePointSize[3], Point[{t, y}]}, count] ] dateticks = CustomDateTicks[{DateString[{2010, 1, 1, 0, 0}], DateString[{2010, 1, 1, 23, 0}], {3, "Hour"}, 3}, DateString[#, {"Hour12Short", " ", "AMPM"}] &]; Draw2D[ {Table[point[i], {i, 1, 23}], AbsoluteThickness[1], DateListDraw[Transpose[{Hours, HourlyAverageCost}], Joined -> True, PlotRange -> All] }, AspectRatio -> .3, PlotRange -> {-10, 250}, Frame -> True, FrameLabel -> {"Time of Day", "Average Cost"}, FrameTicks -> {{Automatic, Automatic}, {dateticks, dateticks // NoTickLabels}}, PlotLabel -> "Example of a Weighted DateListPlot", ImageSize -> 400] Peter Lindsay at the School of Mathematics and Statistics at the University of St Andrews [ http://www.mcs.st-and.ac.uk/ ] kindly helps me keep an archive of Presentation solutions to MathGroup questions. These are available in both notebook and PDF form at: http://blackbook.mcs.st-and.ac.uk/~Peter/djmpark/html/ This should appear there within a day or two as Weighted DateListPlot. David Park djmpark at comcast.net http://home.comcast.net/~djmpark/ From: Dan Loewenherz [mailto:dloewenherz at gmail.com] Hi all, I'm trying to use some Graphics elements as markers for data points in my DateListPlot. I'm running into an issue where the first element of the PlotMarker list is being superimposed on every point in the plot. Here is the code which returns similarly undesired behavior. Instead of letters, I'm using points. Nonetheless, the problem is the same. The desired behavior is for the points to scale to the values of HourlyDataPointCount. --------8<-------- HourlyAverageCost = {186.8235294117647, 153.28722772277229, 148.25412844036697, 147.67576719576721, 148.1043396226415, 147.34375, 142.72424242424245, 141.44635627530366, 152.81413333333333, 151.30989583333334, 153.04958677685951, 153.12459893048128, 163.7921212121212, 184.74429223744292, 177.25316455696202, 140.55072463768116, 215.27272727272728, 149.90322580645162, 138.625, 94.0, 0, 140.0625, 142.44230769230768}; HourlyDataPointCount = {17, 101, 109, 189, 159, 160, 231, 494, 375, 384, 242, 187, 165, 219, 158, 69, 11, 31, 8, 1, 0, 16, 52}; Hours = Map[DateString[{2010, 1, 1, #, 0, 0}] &, Array[# &, 23]]; Points = Map[ Graphics[{PointSize[Log[#/10 + 0.001]], Point[{0, 0}]}] &, HourlyDataPointCount] DateListPlot[Transpose[{Hours, HourlyAverageCost}], ImageSize -> 600, LabelStyle -> Directive[FontFamily -> "Helvetica", "Medium"], DateTicksFormat -> {"HourShort", " ", "AMPM"}, PlotStyle -> {{Thick, RGBColor[0, 0, 0]}}, Joined -> True, Frame -> False, PlotRange -> {Automatic, {0, 350}}, PlotMarkers -> Points] -------->8-------- Thanks in advance, Dan