Examples: query, "exact match", wildcard*, wild?ard, wild*rd
Fuzzy search: cake~ (finds cakes, bake)
Term boost: "red velvet"^4, chocolate^2
Field grouping: tags:(+work -"fun-stuff")
Escaping: Escape characters +-&|!(){}[]^"~*?:\ with \, e.g. \+
Range search: properties.timestamp:[1587729413488 TO *] (inclusive), properties.title:{A TO Z}(excluding A and Z)
Combinations: chocolate AND vanilla, chocolate OR vanilla, (chocolate OR vanilla) NOT "vanilla pudding"
Field search: properties.title:"The Title" AND text
Answered
I'M Using

I'm using pytorch_lightning.loggers.Tensorboard.experiment.add_histogram . However, the plot is displayed under plots as a 3d plots (instead of a 2d histogram) (see screenshot). I'm guessing clearml is trying to unify the histograms for each iteration, but the result is in this case not useful. Two questions: is there a way to ungroup the result by iteration, and, is it possible to group it by something else (e.g. the tags of the two plots displayed below side by side).

  
  
Posted 3 years ago
Votes Newest

Answers 7


Hi WittyOwl57

I'm guessing clearml is trying to unify the histograms for each iteration, but the result is in this case not useful.

I think you are correct, the TB histograms are actually a 3d histograms (i.e. 2d histograms over time, which would be the default for kernel;/bias etc.)

is there a way to ungroup the result by iteration, and, is it possible to group it by something else (e.g. the tags of the two plots displayed below side by side).

Can you provide a toy example, to play with? (somehow we need to separate the two use cases...)

  
  
Posted 3 years ago

Hi AgitatedDove14
this is how our calls look like:
` from pytorch_lightning.loggers import TensorBoardLogger
logger = TensorBoardLogger(save_dir=".", name="debug plotting", 1)

logger.experiment.add_histogram(f"A", data[data.by == 0])
logger.experiment.add_histogram(f"B", data[data.by == 1]) `the result of which is shown in my post above.

This is some test data, and how we'd like things to look:
` def make_data(size: int=10000, n: int=5) -> pd.DataFrame:
x = np.abs(np.random.normal(size=size))
y = (3 + 0.5*np.random.normal(size=size))

data = pd.DataFrame(dict(x=x, y=y))

chunk_size = size // n
for i in range(n):
    data["x"][i * chunk_size: (i + 1) * chunk_size] += 0.1 * np.random.random() * np.sqrt(i)
    data["y"][i * chunk_size: (i + 1) * chunk_size] += 0.5 * np.random.random() * np.sqrt(i)

data["by"] = np.concatenate([np.full(chunk_size, i) for i in range(1, n + 1)])
return data

import joypy
n = 20
data = make_data(n=n)
labels = [i if i % 2 == 0 else None for i in range(n)]
fig, axes = joypy.joyplot(data, by="by", column=["x", "y"], fade=True, labels=labels, grid="y",
linewidth=0.5, legend=False, figsize=(6,5), title="histogram test",
colormap=plt.cm.autumn_r, alpha=0.1) `

  
  
Posted 3 years ago

WittyOwl57 are you aware of any equivalent to the joypy plot in plotly?

  
  
Posted 3 years ago

Unfortunately there doesn't seem to be any out-of-the-box functionality for ridgeline plots (joyplots) in plotly. They are certainly doable ( https://www.python-graph-gallery.com/ridgeline-graph-plotly , or https://chart-studio.plotly.com/~empet/14632/plotly-joyplotridgelines/#/ ) but I'd guess this won't happen any time soon 🤭 . We'd be happy with also having functionality similar to the one from the Scalars tab: first isolating one iteration (the latest by default) and grouping together by the prefix.

  
  
Posted 3 years ago

Hmm, I really like this one:
https://chart-studio.plotly.com/~empet/14632/plotly-joyplotridgelines/#plot
What I'm thinking is a global setting basically telling the TB binding layer to always do ridgeline instead of 3d surface.
wdyt?

  
  
Posted 3 years ago

Well, of course, that would be ideal, provided someone implements the ridgeline 😊

  
  
Posted 3 years ago

Let me check what we can do 😉

  
  
Posted 3 years ago
1K Views
7 Answers
3 years ago
one year ago
Tags