Source code for trixi.util.extravisdom

import numpy as np
from visdom import Visdom, _assert_opts, _opts2layout


[docs]class ExtraVisdom(Visdom):
[docs] def histogram_3d(self, X, win=None, env=None, opts=None): """ Given an array it plots the histrograms of the entries. Args: X : An array of at least 2 dimensions, where the first dimensions gives the number of histograms. win: Window name. env: Env name. opts: dict with options, especially opts['numbins'] (number of histogram bins) and opts['mutiplier'] ( factor to stretch / queeze the values on the x axis) should be considered. Returns: The send result. """ opts = {} if opts is None else opts _assert_opts(opts) X = np.asarray(X) assert X.ndim >= 2, 'X must have atleast 2 dimensions' opts['numbins'] = opts.get('numbins', min(30, len(X[0]))) opts['mutiplier'] = opts.get('numbins', 100) traces = [] for i, array in enumerate(X): array = array.flatten() bins, intervals = np.histogram(array, bins=opts['numbins']) x = [] y = [] z = [] prev_interv = 0. for b, iv in zip(bins, intervals): interval_middle = float((prev_interv + iv) / 2.) * opts['mutiplier'] z.append([float(b), float(b)]) y.append([interval_middle, interval_middle]) x.append([i * 2, i * 2 + 0.5]) prev_interv = float(iv) traces.append(dict( z=z, x=x, y=y, # colorscale=[[i, 'rgb(%d,%d,255)' % (ci, ci)] for i in np.arange(0, 1.1, 0.1)], # autocolorscale=True, showscale=False, type='surface', )) return self._send({ 'data': traces, 'win': win, 'eid': env, 'layout': _opts2layout(opts), 'opts': opts, })