nim-plotly icon indicating copy to clipboard operation
nim-plotly copied to clipboard

Support string types (datetimes) in Trace x or y axis

Open jrenner opened this issue 6 years ago • 3 comments

currently they are restricted to one type of SomeNumber. I hacked together a version that adds a second generic type to Trace, not restricted to SomeNumber, and use that for the x axis, and I was able to make a nice looking datetimes plot. Here is what it looked like:

  Trace*[T: SomeNumber, R] = ref object                                                                                 
    xs*: seq[R]                                                                                                         
    ys*: seq[T]                                                                                                         
    xs_err*: ErrorBar[R]                                                                                                
    ys_err*: ErrorBar[T]                                                                                                
    marker*: Marker[T]                                                                                                  
    text*: seq[string]                                                                                                  
    opacity*: float                                                                                                     
    mode*: PlotMode                                                                                                     
    `type`*: PlotType                                                                                                   
    fill*: PlotFill                                                                                                     
    name*: string                                                                                                       
    yaxis*: string  

It makes the code a bit uglier and I had to modify the Plot type and functions as well. it Also doesn't allow for strings in the y-axis.

jrenner avatar May 25 '18 21:05 jrenner

I tried to support this but there is a bug that limits having multiple generic types in some cases, e.g.: https://github.com/nim-lang/Nim/issues/7794

You can get around this by not setting xs and setting text instead. E.g. this works:

import plotly

var t = Trace[int](text: @["a", "b", "c"], ys: @[5, 10, 2],  `type`: PlotType.Bar)
Plot[int](traces: @[t]).show()

This is cheating since you may want the text to be a longer phrase for the hover.

Maybe your setup works because you don't have a type constraint on R which I guess is fine. I don't like having to specify, e.g. Plot[int,string](), but I guess that might be the best way forward. Thoughts?

brentp avatar May 26 '18 02:05 brentp

I would also like this to be supported, in my case I want a times on the y axis and dates on the x axis, which I'm guessing is not possible right now.

Stromberg90 avatar Jun 27 '18 17:06 Stromberg90

anyone want to make a PR for this?

brentp avatar Jun 28 '18 16:06 brentp