<div dir="ltr"><div>Folks,</div><div><br></div><div>Notes from today's phone call.  There are 3 things left for 2.1.1: categorical changes, 'fuzzy' images when mostly invalid, and the appevyor cleanup</div><div><br></div><div>Tom</div><div><br></div><div>Ryan May, Eric Firing, Thomas Caswell</div><div><br></div><div>** categorical</div><div><br></div><div> - everyone on board with not sorting categorical values</div><div> - everyone on board with only accepting strings as categories</div><div> - some concern about supporting `np.nan`</div><div>   - if the first entry in `nan`, will miss units</div><div>   - do not want a python loop that chceks until it finds a not-nan</div><div>   - defer nan handling</div><div><br></div><div>Tom's job to get all of the PRs collected an into one</div><div><br></div><div>Plan going forward to support mixed types, missing data, and explicit</div><div>ordering between categories:</div><div> - write a category class</div><div> - write a handler for pandas categorical</div><div><br></div><div>** Tom's pre-meeting notes </div><div><br></div><div>*** do not sort values</div><div><br></div><div>On one hand, sorting the values make sense as </div><div><br></div><div>#+BEGIN_SRC python</div><div>  fig, (ax1, ax2) = plt.subplots(2, 1)</div><div>  ax1.scatter([1, 2], [1, 2])</div><div>  ax2.scatter([2, 1], [2, 1])</div><div><br></div><div>#+END_SRC</div><div><br></div><div>should produce visually identical plots so Tom thinks</div><div><br></div><div><br></div><div>#+BEGIN_SRC python</div><div>  fig, (ax1, ax2) = plt.subplots(2, 1)</div><div>  ax1.scatter(['a', 'b'], [1, 2])</div><div>  ax2.scatter(['b', 'a'], [2, 1])</div><div><br></div><div>#+END_SRC</div><div><br></div><div>should as well (but Tom is wrong).</div><div><br></div><div>On the other hand, user may expect that there is some semantics in the</div><div>order they pass the data in in</div><div><br></div><div>#+BEGIN_SRC python</div><div>  plt.bar(['first', 'second', 'third'], [1, 2, 3])</div><div><br></div><div>#+END_SRC</div><div><br></div><div>and blindly sorting alphabetically gives them no escape hatch.</div><div><br></div><div>practicality over purity, drop the sorting.</div><div><br></div><div>*** supporting non-string values</div><div><br></div><div>In the original implementation a cast through numpy was used which</div><div>converted all non-string values to strings so things like</div><div><br></div><div>#+BEGIN_SRC python</div><div>  plt.bar([1, 2, 'apple'], [1, 2, 3])</div><div><br></div><div>#+END_SRC</div><div><br></div><div>would work.  However this lead to the =2= and ='2'= being treated as</div><div>the same (which seems less than great).  Supporting them as different</div><div>is possible, but is a fair bit of work because a number of places the</div><div>unit framework assumes that 'plain' numbers will pass through</div><div>un-changed.</div><div><br></div><div>A more worrying concern is that</div><div><br></div><div>#+BEGIN_SRC python</div><div>  x = [52, 32, 'a', 'b']</div><div>  y = [0, 1, 2, 3]</div><div><br></div><div>  fig, (ax1, ax2) = plt.subplots()</div><div>  ax1.plot(x, y, 'o')</div><div>  ax2.plot(x[:2], y[:2], 'x')</div><div><br></div><div>#+END_SRC</div><div><br></div><div>in the first case the ints are treated as categoricals and in the</div><div>second they are not.  If we want to support mixed types like this then</div><div>we need to make a special class (or use pandas categorical) which does</div><div>not have to guess the type on the fly.</div><div><br></div><div>requiring if the categorical unit handling is triggered, then all of the values</div><div>must be string-like seems like the safest approach.  </div><div><br></div><div>*** support for nan</div><div><br></div><div>Most of matptollib accepts `np.nan` as 'missing' data which is then</div><div>dropped as part of the draw process.  This makes less sense with `bar` but makes</div><div>lots of sense with `scatter`.</div><div><br></div><div>We should special-case allowing `np.nan` in as a 'string' and map it</div><div>map it to it's self.</div><div><br></div><div>*** special containers </div><div><br></div><div>It was proposed to look for objects arrays as a marker for catagorical</div><div>instead of the type of the data.  Do not think we should do this as we try to</div><div>be as agnostic about the container as possible everywhere else.</div><div><br></div><div><br></div><div>** appveyor</div><div> - drop building conda package</div><div> - remove conda recipe from the repo</div><div><br></div><div>Ryan is taking care of this</div><div><br></div><div>** set_theta_grid(frac)</div><div> - merged, improvement over current behavior, raising seems too</div><div>   aggressive</div><div><br></div><div>** #8947</div><div> - ringing with lots of nans</div><div><br></div><div>this is Tom's job to investigate</div><div><br></div><div>** talked about traits / traitlets and friends</div><div><br></div><div>** major funding</div><div> - get mplot3D 'right'</div><div>   - same interface</div><div>   - uses real 3D tools</div></div>