tensorflow / tensorboard

TensorFlow's Visualization Toolkit
Apache License 2.0
6.71k stars 1.66k forks source link

Allow ad-hoc color changing #893

Open martinpopel opened 6 years ago

martinpopel commented 6 years ago

As discussed in #288 and #449, it is difficult to choose one color palette that suits everyone in all situations. If there are many runs and I select just some of them (with a regex or toggling individual runs), I quite often end up with e.g., red, red, orange, red and I cannot distinguish the runs especially if the curves are crossing each other. I suggest to add a drop-down color picker (e.g. using http://jscolor.com/) to choose a color for each run. I plan to use this especially before posting TensorBoard screenshots to my colleagues.

wchargin commented 4 years ago

Is the consensus that we need to use the URL?

I was imagining that we wanted this to be in the URL because people will share links and expect the colors to be shared as well, to avoid confusion when discussing the charts. But I could be convinced otherwise, and I could also be convinced to start with it in local storage and see if that works for people. It’s true that that gives more flexibility about the representation.

it seems to be BSD

BSD 3-Clause is okay: https://opensource.google/docs/thirdparty/licenses/#notice

So here's the new plan. […]

This sounds fine to me.

How would we feel about a "dynamic" palette which would simply choose the n most divergent colors where n is the number of runs?

One problem with this is that the number of runs grows over time, so this would mean that as new data loads the colors for existing runs change. We currently go to some lengths to avoid this: e.g., we sort runs in order of start time, rather than alphabetically, so that the ordering is time-stable. Any ideas on how to address this?

dgrahn commented 4 years ago

The dynamic palette would change colors as runs change. We don't have to include that, but it could be a useful feature.

Sounds like we have a path forward. Has the migration been completed?

manivaradarajan commented 4 years ago

No, the migration hasn't completed yet, though we've made very good, substantial progress. We'll keep you posted.

martinpopel commented 4 years ago

I think that by default the color of any run should not change when the number of runs has changed (when new runs were added, or when some runs were deleted) or when the number of selected runs has changed (by editing the regex or clicking on checkboxes). Thus I don't like the "dynamic palette" as the default option and personally I don't need it at all.

Usually, I have hundreds of runs, so coloring them with n>200 most divergent colors does not make sense (there will be many pairs of colors indistinguishable for me). Usually, I select (via regex or checkboxes) up to about 10 runs to be shown, but I change the selected subset often and I don't want any color to be changed automatically when changing the selection (I want to change the colors manually ad hoc, which is what this issue is about).

Usually, I have several browser tabs open with different subsets of runs selected in TensorBoard. Sometimes, there is an overlap between the subsets, ie. the same run is shown in multiple browser tabs. Sometimes, I share the TensorBoard server with my colleagues. Originally, I thought the simplest implementation will be client-side only, ie. changing the run color in one browser tab won't affect the color in other tabs (and other browsers of my colleagues). However, the other option (the color is stored on the server side and changed everywhere) is also acceptable for me. Both options have some pros and cons depending on the various use cases.

stephanwlee commented 4 years ago

@dgrahn The Polymer migration is done and we can now take in all the changes. Thanks for waiting.

sharvil commented 3 years ago

@wchargin @stephanwlee until this issue is fixed, what you do you recommend users do when two or more runs that need to be compared end up with the same color?

martinpopel commented 3 years ago

@sharvil: see my list of workarounds above - https://github.com/tensorflow/tensorboard/issues/893#issuecomment-377132932

stephanwlee commented 3 years ago

We have some update to this bug.

background: We were not too happy with the state of things with current platform and we have been eager to upgrade our framework to Angular. As you might have noticed, there was a whole infra upgrade to Angular recently and, on the side, we have been working on a new plugin called Time Series which tries to combine all time series metric based plugins into one view (it is currently arbitrary divided). The new plugin was available in tb-nightly for some time so you may have noticed that

image

Now, in the new plugin, we added an ability to click on the fob and override the color there and it is available in yesterday's release https://github.com/tensorflow/tensorboard/releases/tag/2.4.0. I know it does not solve everyone's problem and it is still a bit painful to use. Namely:

However, do know that we will be adding features to the new plugin and we hope to be a lot more robust with it.

liusida commented 3 years ago

We have some update to this bug.

background: We were not too happy with the state of things with current platform and we have been eager to upgrade our framework to Angular. As you might have noticed, there was a whole infra upgrade to Angular recently and, on the side, we have been working on a new plugin called Time Series which tries to combine all time series metric based plugins into one view (it is currently arbitrary divided). The new plugin was available in tb-nightly for some time so you may have noticed that

image

Now, in the new plugin, we added an ability to click on the fob and override the color there and it is available in yesterday's release https://github.com/tensorflow/tensorboard/releases/tag/2.4.0. I know it does not solve everyone's problem and it is still a bit painful to use. Namely:

  • color override information gets lost when refreshed
  • color palette is still limited to handful of colors.

However, do know that we will be adding features to the new plugin and we hope to be a lot more robust with it.

The new "Time Series" option is great! Thanks! image

I can manually pick colors for each run.

I wonder, why not decouple the Website and the backend, so people might be able to create Websites with different styles! I guess it is quite hard for a web designer to use Bazel to compile source code.

Thanks.

psybuzz commented 3 years ago

@liusida, glad to hear that the Time Series dashboard is usable for you.

it is quite hard for a web designer to use Bazel to compile source code.

For anyone interested in extending the web frontend of TensorBoard for their own purpose, one option that the team maintains is a path to building custom frontend plugins. In case you have not seen before, here is an example [1] with code that shows how to reuse the scalars backend data and write your own dashboard with custom styles in HTML, CSS, JS. Custom plugins that users create can be published and shared on PyPI as well. More details can be found at [2]. If this interests you, please feel free to request features and ask more questions!

[1] https://github.com/tensorflow/tensorboard/tree/javascript/tensorboard/examples/plugins/example_raw_scalars [2] https://github.com/tensorflow/tensorboard/blob/javascript/ADDING_A_PLUGIN.md

jettero commented 3 years ago

Too many options are generally not a good idea because (1) it is more flow/code to maintain and (2) more complex user's mental model. In this case, I will not make that judgement.

I'm reading this as, "I don't have this problem, so if we provide these options and people use them to fix readability problems they're having; it's a giant waste of time because I'm not having this problem."

I can't think of another way to interpret it.

TevenLeScao commented 2 years ago

Is there currently any way to keep a set color scheme after refreshing/reloading the page?

pierre-nedelec commented 2 years ago

We have some update to this bug.

background: We were not too happy with the state of things with current platform and we have been eager to upgrade our framework to Angular. As you might have noticed, there was a whole infra upgrade to Angular recently and, on the side, we have been working on a new plugin called Time Series which tries to combine all time series metric based plugins into one view (it is currently arbitrary divided). The new plugin was available in tb-nightly for some time so you may have noticed that

image

Now, in the new plugin, we added an ability to click on the fob and override the color there and it is available in yesterday's release https://github.com/tensorflow/tensorboard/releases/tag/2.4.0. I know it does not solve everyone's problem and it is still a bit painful to use. Namely:

  • color override information gets lost when refreshed
  • color palette is still limited to handful of colors.

However, do know that we will be adding features to the new plugin and we hope to be a lot more robust with it.

This is great work, thank you! especially the new option to color runs by regex, this is awesome.

One next step could be to be able to choose the color assigned to each group on this page, wouldn't it? Currently colors are automatically assigned to each group and we can't change them. Like this if we have many groups we could create something that has more visual meaning. It sounds similar to what was described above, being able to click on the fob to pick the color.

image

drmeerkat commented 1 year ago

What is the current status of this request? I would really love to see colors being persistent after refresh.