# Extract data from DateListPlot, limited by PlotRange

Extracting the points from a line in a ListPlot in this answer uses

points = Cases[Normal@plot, Line[pts_] :> pts, Infinity];


This works in DateListPlot (provided Joined->True) (example below, using Last to get the y-axis data only)

Clear[test,plot,points];
test={{"2010",1},{"2011",2},{"2012",3},{"2014",4},{"2015",5},{"2016",6}};
plot=DateListPlot[test,Joined->True]
points=Last/@Flatten[Cases[Normal@plot,Line[pts_]:>pts,Infinity],1]


(*OUTPUT
{1.,2.,3.,4.,5.,6.}


However, when the plot is limited by PlotRange using date values (lower plot), the function returns the entire list of points.

plot2=DateListPlot[test,Joined->True,PlotRange->{{"2012","2015"},{0,6}}]
points2=Last/@Flatten[Cases[Normal@plot2,Line[pts_]:>pts,Infinity],1]


(*OUTPUT
{1.,2.,3.,4.,5.,6.}


Is there a function, like points which can return only the points displayed on the plot in DateListPlot under 'PlotRange ?

-
You can just use Select on the result with conditions similar to those in PlotRange. –  Kuba Jun 9 at 23:27
Related –  rasher Jun 9 at 23:33
@Kuba Appreciated. Pickett is along those lines too and delves into the plot function to retrieve the bounds –  PlaysDice Jun 9 at 23:41
@rasher Thanks. The linked answer is a serious Module indeed! –  PlaysDice Jun 9 at 23:51

This should do it:

points2 =
With[{range = Part[PlotRange /. Options[plot2], 1]},
Select[Flatten[Cases[Normal@plot2, Line[pts_] :> pts, Infinity], 1],
First@range <= First@# && First@# <= Last@range &][[All, 2]]]


With plot2 as in your example:

{3., 4., 5.}

-
Yes! I was hoping someone could retrieve the values with Options magic. –  PlaysDice Jun 9 at 23:40
I worked through what you did. Using the Options to make a set of replace rules and PlotRange` as the "target of those replace rules" is very neat. I learned something new (again). –  PlaysDice Jun 10 at 2:20
@PlaysDice I'm glad you liked it! :) –  Pickett Jun 10 at 2:27