Message Boards Message Boards

0
|
9148 Views
|
8 Replies
|
0 Total Likes
View groups...
Share
Share this post:
GROUPS:

DateListPlot Databin fails to scale

Posted 9 years ago
POSTED BY: Eric Lieser
8 Replies

I have a similar scenario. I'm just trying to get a simple visualization of logged temperatures. I use

data = Normal[TimeSeries[Databin["91DkM20b"]]["temp"]]

Then I see a list of dates/temp values like you would expect ( pretty sure they are numbers not strings) :

{{December 16, 2015 2:46 pmGMT-8.,32.0625},{December 16, 2015 2:46 pmGMT-8.,32.125},{...etc...

But when I use DateListPlot on data, I still get a plot that is scaled from 0.0 to 1.0 on the Y axis and 00:00:00 to 00:00:01 on the X axis, as originally described by this question asker. Any ideas?

POSTED BY: Brook Nichols

Can you take on the pairs of data and then run InputForm on it?

What does your data look like?

POSTED BY: Sean Clarke

Ah, I guess that helps explain it I get :

{DateObject[{2015, 12, 16}, TimeObject[{14, 46, 56.76739978790283}, TimeZone -> -8.], TimeZone -> -8.], "32.0625"}
POSTED BY: Brook Nichols

Mathematica does a lot of formatting to make code more readable, but it's sometimes confusing at first. You can think of InputForm as a function that shows you what your code "actually" looks like.

Databin by default will make strings. You have to ask it to interpret it's input as anything else.

To fix your code, let's make a function that takes a pair of values and runs "ToExpression" on the last part. ToExpression in this case will take a string of a number and turn it into a number:

fixPair[{a_, b_}] := {a, ToExpression[b]}

We can then Map this function onto your data:

fixedData = Map[fixPair, data]
POSTED BY: Sean Clarke

Hmm, I'm getting a $Failed output. With a data output saying {"mydata"} is protected.

POSTED BY: Brook Nichols

DateListPlot should just plot your data. If it shows your values being betwen 0 and 1 then it is probably because the data you are giving it is between 0 and 1.

Can you give a small snippet of your data? Or something to help us reproduce the problem?

One thing you can do is to run Normal on the dataset. This will turn it into a list, which is easier to copy.

POSTED BY: Sean Clarke
Posted 9 years ago

Can you access the data directly? It's in a public data bin. I'm accessing with:

DateListPlot[Databin["7j5P9Pz2"]]

POSTED BY: Eric Lieser

Let's look at the first set and the first value.

First[Normal[TimeSeries[Databin["7j5P9Pz2"]]["temp1"]]]

To see what the actual value is, use InputForm. This will show you exactly what the first element is.

{{2015, 10, 3, 21, 29, 30.087313175201416}, "74.20"}

When you make a Databin, it will assume everything is a string unless you specify some kind of type, like "Number". Here is how work aroudn the current problem:

(* get the data as a simple list of values *)
data = Normal[TimeSeries[Databin["7j5P9Pz2"]]["temp1"]]

(* turn the temps from strings into numbers *)
data = data /. {date_, temp_} :> {date, ToExpression@temp}

(* alternatively you could turn the temps from strings into numbers this way *)
data = MapAt[ToExpression, data, {All, 2}]

DateListPlot will now work with the variable "data".

POSTED BY: Sean Clarke
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard

Group Abstract Group Abstract