-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
html repr of xarray object (for the notebook) #1627
Comments
OMG this is so cool! |
OMG indeed this looks fantastic! We should test this on more examples, but I already love it. The underline is a great way to illustrate which variables are dimensions.
Agreed. Notebook viewers tend to sanitize out JavaScript, especially if originating from an unknown source.
This would also be awesome, if possible with pure CSS. I don't know, but I'm going to bug my colleague who does JavaScript visualization. |
OK, so bad news is that it not possible to select elements other than siblings or descendant tags with CSS. So selecting "cousin" tags like a dimension name at multiple locations in the repr is out. But we could potentially add JavaScript for fancy hover effects. Even if it gets stripped out in many cases (for untrusted notebooks), it should degrade gracefully to the HTML only repr. My main concern would annoying prompts in the notebook interface that ask a user if they want to trust outputs or not. |
Wow, great job @benbovy! With the upcoming move towards Jupyter Lab and a better infrastructure for custom plugins, could this serve as the basis for a "NetCDF Extension" for Jupyter Lab? It would be great if double clicking on a NetCDF file in the JLab file explorer could open up this sort of information, or even a quick and dirty ncview-like plotter. |
Thanks for the feedback! Here are a few more ideas: https://jsfiddle.net/9ab4c3tr/48/
We might use drop-downs to display other useful information as well, such as the type of array (e.g., dask-array, in-memory numpy.array, etc...) Fancy hover effects would be awesome indeed, although my concern is that too much hover effect would be a source of distraction. A jupyterlab NetCDF viewer extension would be awesome too! It might also leverage phosphor's datagrid (phosphorjs/phosphor#285) to explore the raw data values. |
Although this could clearly be made more fancy and complicated, I think
what you have here would already be a great addition. I love the drop-down
attributes (those are missing from the standard repr).
Don't hesitate to start a PR! More fanciness could always be added in the
future based on user feedback.
…On Thu, Oct 12, 2017 at 9:01 AM, Benoit Bovy ***@***.***> wrote:
Thanks for the feedback!
Here is a few more ideas: https://jsfiddle.net/9ab4c3tr/48/
- main sections titles are colored so that these are more detached
from the content (not sure I really like it, though),
- subtle shade variations, notably for displaying the first values for
each variable,
- drop-downs for displaying attributes per variable if any (collapsed
by default).
- hover-effect for dimensions: highlight all variables having the
hovered dimension (uses Javascript)
We might use drop-downs to display other useful information as well, such
as the type of array (e.g., dask-array, in-memory numpy.array, etc...)
Fancy hover effects would be awesome indeed, although my concern is that
too much hover effect would be a source of distraction.
A jupyterlab NetCDF viewer extension would be awesome too! It might also
leverage phosphor's datagrid (phosphorjs/phosphor#285
<phosphorjs/phosphor#285>) to explore the raw
data values.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#1627 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/ABJFJrhyjDbEVEz5AqUN6l2ppExwE3xiks5srg2MgaJpZM4P2LOr>
.
|
As long as we're nit-picking style....
I slightly prefer the grayscale you had before -- the section titles are already well detached.
Love it!
It is wonderful to expose this information! I have a slight concern that the
For highlighting, maybe something a little more subtle would work well, either:
|
Before starting a PR on this, I'd like to get the design right (at least the static part) and also to clarify the repr of other xarray objects such as For For
|
Maybe putting the
Changing font-weight instead of background-color works better IMO (same link above). |
I think this is probably our best option. My main suggestion is it should be possible to click somewhere (maybe on top |
Now it just looks a little out of place :). I liked it better closer to the variable name.
Hmm, I'm not sure. I find text that moves very distracting -- I like changing background colors. |
See https://jsfiddle.net/43z4v2wt/3/
Indeed, I agree now, it's annoying. |
One more trick we could add for the Dataset repr:
|
That would be nice, although I guess that it would require javascript. Alternatively, we can imagine two drop-downs per variable, one for the attributes and one for the full array values (numpy or dask repr). Each would be shown/hidden by two distinct symbols or links, perhaps both located on the right after the preview-values so that we avoid confusion with symbol In the |
A comment regarding the use of javascript: after reading this discussion (bokeh/bokeh#6700) I'm not sure that maintaining a javascript-based repr that works with both jupyterlab and the classic notebook is worth the few fancy features it would provide. I'd rather stick with a pure html/css solution here. It might still co-exist with a full-featured jupyterlab extension for viewing NetCDF files. |
Yes, I like that. Possibly clicking on the array values would show the larger preview. I did play around a little with a hover drop down, but the positioning is a little hacky: |
Note that the At least in the notebook, this change would make it obsolete. |
New version for
|
And for |
This is wonderful! Is it reasonable to add a drop down in the attribute section if there are too many items there? My data sometimes have a long list of attributes and important information about coordinate and data_vars are not seen without scrolling back the page. |
In the examples above, you can click on the Given your case, maybe it would be nice to add a rule to show the attribute section collapsed when the number of attributes is too long. If we allow that, then maybe it would be nice to also show the number of items in the section titles, e.g., |
I have a slight proposed tweak on the
Yes, but let's keep it -- it have a nice pure text format (from ncdump) which works especially well with copy & paste.
Yes, I like this general idea -- though we might only show the number when it is collapsed, e.g., |
I like this idea. Looking forward to having it. |
Good idea!
Agreed.
The good (or bad?) thing with the marker "a" to the very left is that it is aligned with the drop-down symbols of the main sections, but to me either way is fine. Let's summarize all suggestions so far: Dataset: https://jsfiddle.net/tay08cn9/2/ I think that we're getting close to something good! I'll wait a bit before starting a PR (maybe sometime next week), in case other feedbacks or suggestions come up. |
ditto wow I can't wait for this to be in! |
@benbovy it seems like that discussion has stalled out... are you ready to put together that PR? :) Personally, I'm very happy with your current version. You might even convince me to hold off on the v0.10 release to include it! |
Sorry for my late reply @shoyer ! Yes I'm happy with this version too, I'll open asap a PR! Unfortunately I hadn't much time to work on this these last two weeks, but I want to put this in my priorities next week. I guess that it is a bit late for v0.10 release which is already on track? I still don't exactly know how much time I'll need to implement this. I haven't thought yet about all implementation details (e.g., how to calculate the width of the variable name column? potential issues with jupyter notebook / jupyterlab...). It might also require some refactoring and/or new public API (e.g., |
Yes, probably at this point. But hopefully we can do a shorter release cycle for v0.11. Also, though this is a big visual change, I'm not sure it's actually a breaking change, per se. Only notebook output will change, not programmatic use of |
Yes, but once it's there I'm sure that we'll get bug reports right away if it doesn't work well, because this is a very visual change. Therefore I am almost in favor of pushing this forward as fast as possible and see how it goes, maybe followed by a quick 0.10.1 But since I'm not the one doing the job I'm not allowed to say anything more here ;) |
I started working on a new PR (not yet submitted), but before continuing the work I really need to know how best we can include the CSS code in rich outputs for the notebook (e.g., inline CSS or using the It is not really clear to me if it is even supported so I opened an issue on the jupyterlab side (see reference above). |
So we have different options regarding the tools to use for implementing these rich representations:
I'd like to know what are your thoughts. Should we go with |
I am OK adding new (optional) Python dependencies like vdom or Jinja2 if that makes implementing and maintaining this easier. If we can solve the problem of generating HTML from vdom as a fallback (nteract/vdom#43) and the vdom developers are supportive for various issues that come up, that could easily be the best option. I would be reluctant to only support vdom output, because there are a lot of legacy notebook viewing interfaces (including various IDEs, cloud hosted notebook environments and rendering on GitHub) that could take a while (years?) to support it. |
The other thing to watch out for is if the vdom Python API is still immature and likely to lead to additional works when it changes in the future. This is somewhat of a judgment call. My sense is that they are taking a careful design to the project but it is still in the early days so it's hard to say for sure. |
Yes good points. One part of me (the one that loves every cool, new package) says "let's use |
Yeah I really need to continue the work in #1820, this PR has stalled for too long! Last time I worked on this I was struggling a bit on good column auto-sizing and alignment with a pure CSS implementation (i.e., using CSS grid, Another option would be to write a jupyterlab mime render extension. This narrows the supported front-ends, but I guess the issue of front-end theme integration will be easier to solve. Also, it will be possible to add more fancy features later. Did you were at SciPy? I hope you had a great time! I wanted to attend the conference this year but finally I couldn't make it, unfortunately. |
Agreed. I think that is something we can work on over time. A jupyterlab extension would be cool too but, as you say, it would have a smaller footprint in the shor-term. Also, yeah, Scipy was great. I think I'll go back. |
Thought I'd bump this (hopefully no one minds). I think that this is great! |
🎉 🍰 🍾 🏆 🏅 |
Edit: preview for
Dataset
andDataArray
(pure html/css)Dataset
: https://jsfiddle.net/tay08cn9/4/DataArray
: https://jsfiddle.net/43z4v2wt/9/I started to think a bit more deeply about how could look like a more rich, html-based representation of xarray objects that we would see, e.g., in jupyter notebooks.
Here are some ideas for
Dataset
: https://jsfiddle.net/9ab4c3tr/35/Some notes:
pandas.Dataframe
repr as it is shown in jupyterlab.It is still, of course, some preliminary thoughts. Any feedback/suggestion is welcome, even opinions about whether an html repr is really needed or not!
The text was updated successfully, but these errors were encountered: