Re: Completely omit NaNs from line plot [message #93271 is a reply to message #93270] |
Thu, 26 May 2016 02:30  |
dg86
Messages: 118 Registered: September 2012
|
Senior Member |
|
|
On Thursday, May 26, 2016 at 4:39:12 AM UTC-4, Markus Schmassmann wrote:
> On 05/25/2016 08:48 PM, David Grier wrote:
>> On Wednesday, May 25, 2016 at 4:05:33 AM UTC-4, Mats Löfdahl wrote:
>>> Den onsdag 25 maj 2016 kl. 02:19:40 UTC+2 skrev
>>> laura...@gmail.com:
>>>> I have some solar irradiance data. All the nighttime values are
>>>> set to NaN so that they won't be used in any calculations. I
>>>> would like to plot a section of the time series but not include
>>>> any of the points that are NaNs. That is, normally plot won't
>>>> make any mark for the time when there is a NaN, but I want to
>>>> completely skip these points because they just make the plot
>>>> twice as long as necessary. Is there any way to do this other
>>>> than creating a new array without those points?
>>> If you plot with time on the horizontal axis, the plot will be the
>>> same length whether you remove the NaNs or not, right? If you don't
>>> care about the time axis, you could always do something like
>> plot, data[where(finite(data))]
> Mats' solution with David's better notation probably does what you want,
> although it does create an array without those points.
>
> Id you really want to avoid that, try this:
>
> time=make_array(n_elements(data),/ulong)
> wf=where(finite(data),cnt)
> time[wf]=ulindgen(cnt)
> p=plot(time, data)
>
> This also uses the plot function instead of plot procedure, the latter i
> would no longer use.
If the goal is to omit the NANs without leaving gaps in the plot, then the
solution would be
time = findgen(n_elements(data))
w = where(finite(data))
p = plot(time[w], data[w])
This uses the indexes of the finite data points to select points from the
time array that correspond to the valid data points.
Markus' proposed solution creates a time array consisting of consecutive times,
which might not be what you want.
A simpler version of Markus' solution is
w = where(finite(data), count)
time = findgen(count)
p = plot(time, data[w])
All the best,
David
|
|
|