To the best of my knowledge, the reasoning is:
If the data point the graph wants exists, it uses it.
If the data point doesn’t exist, it uses the nearest.
If the data point nearest contains a null value, it uses it.
The catch is, the way it records data is:
The data arrives. If a new value arrives before that one is logged, the first gets overwritten.
If no data arrives before the time comes to log, it records a null value.
So your data should arrive the same as or faster than the logging times in order to not record null values.
What you’re seeing then is if your zoom level happens to land on non-null values, you see data. Otherwise you’re looking at nulls.
So I’d say you need to log every 15 minutes, if that’s the rate at which data comes in. Or 15m 1 s if you want to be sure never to have a null recorded, but the cost is you lose a data point once in a while. Of course, if the incoming data just misses a recording slot, it’s logged as arriving 15 mins later than it actually did.
The cure for that, given the data rate is so slow, may be to use the PHPTimeseries, which stores the time as well as the value for each data item. We normally don’t use that with energy data arriving every 5 or 10 s, because it costs dearly in data storage space, but for your purpose, it might be ideal.