Python plotly.subplots.make_subplots() Examples
The following are 12
code examples of plotly.subplots.make_subplots().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
plotly.subplots
, or try the search function
.
Example #1
Source File: app.py From CrypTen with MIT License | 6 votes |
def update_error_diff(start_date, end_date, funcs): if type(funcs) is str: funcs = [funcs] start_df = func_df[func_df["date"] == start_date] end_df = func_df[func_df["date"] == end_date] fig = make_subplots( rows=len(funcs), cols=1, specs=[[{"type": "domain"}] for _ in range(len(funcs))] ) for i, func in enumerate(funcs): error = end_df[end_df["function"] == func]["total abs error"] error_prev = start_df[start_df["function"] == func]["total abs error"] func_text = func.capitalize() fig.add_trace( go.Indicator( mode="number+delta", value=float(error), title={ "text": f"{func_text}<br><span style='font-size:0.8em;color:gray'>" + "total abs error</span><br>" }, delta={ "reference": float(error_prev), "relative": True, "increasing": {"color": "#ff4236"}, "decreasing": {"color": "#008000"}, }, ), row=i + 1, col=1, ) fig.update_layout(height=300 * len(funcs)) return fig
Example #2
Source File: plotly_stock_chart.py From tensortrade with Apache License 2.0 | 5 votes |
def _create_figure(self, performance_keys): fig = make_subplots( rows=4, cols=1, shared_xaxes=True, vertical_spacing=0.03, row_heights=[0.55, 0.15, 0.15, 0.15], ) fig.add_trace(go.Candlestick(name='Price', xaxis='x1', yaxis='y1', showlegend=False), row=1, col=1) fig.update_layout(xaxis_rangeslider_visible=False) fig.add_trace(go.Bar(name='Volume', showlegend=False, marker={'color': 'DodgerBlue'}), row=2, col=1) for k in performance_keys: fig.add_trace(go.Scatter(mode='lines', name=k), row=3, col=1) fig.add_trace(go.Scatter(mode='lines', name='Net Worth', marker={ 'color': 'DarkGreen' }), row=4, col=1) fig.update_xaxes(linecolor='Grey', gridcolor='Gainsboro') fig.update_yaxes(linecolor='Grey', gridcolor='Gainsboro') fig.update_xaxes(title_text='Price', row=1) fig.update_xaxes(title_text='Volume', row=2) fig.update_xaxes(title_text='Performance', row=3) fig.update_xaxes(title_text='Net Worth', row=4) fig.update_xaxes(title_standoff=7, title_font=dict(size=12)) self.fig = go.FigureWidget(fig) self._price_chart = self.fig.data[0] self._volume_chart = self.fig.data[1] self._performance_chart = self.fig.data[2] self._net_worth_chart = self.fig.data[-1] self.fig.update_annotations({'font': {'size': 12}}) self.fig.update_layout(template='plotly_white', height=self._height, margin=dict(t=50)) self._base_annotations = self.fig.layout.annotations
Example #3
Source File: pycoQC_plot.py From pycoQC with GNU General Public License v3.0 | 5 votes |
def alignment_reads_status (self, colors:list=["#f44f39","#fc8161","#fcaf94","#828282"], width:int= None, height:int=500, plot_title:str="Summary of reads alignment status"): """ Plot a basic alignment summary * colors List of colors (hex, rgb, rgba, hsl, hsv or any CSS named colors https://www.w3.org/TR/css-color-3/#svg-color * width With of the plotting area in pixel * height height of the plotting area in pixel * plot_title Title to display on top of the plot """ # Verify that alignemnt information are available if not self.has_alignment: raise pycoQCError ("No Alignment information available") self.logger.info ("\t\tComputing plot") df = self.alignments_df # Create empty multiplot figure fig = make_subplots(rows=1, cols=2, column_widths=[0.4, 0.6], specs=[[{"type": "table"},{"type": "pie"}]]) # plot Table data = go.Table( columnwidth = [3,2,2], header = {"values":list(df.columns), "align":"center", "fill_color":"grey", "font_size":14, "font_color":"white", "height":40}, cells = {"values":df.values.T , "align":"center", "fill_color":"whitesmoke", "font_size":12, "height":30}) fig.add_trace (data, row=1, col=1) # plot Pie plot data = go.Pie ( labels=df["Alignments"], values=df["Counts"], sort=False, marker={"colors":colors}, name="Pie plot", textinfo='label+percent') fig.add_trace (data, row=1, col=2) # Change the layout fig.update_layout( width = width, height = height, title = {"text":plot_title, "xref":"paper" ,"x":0.5, "xanchor":"center"}) return fig #~~~~~~~ALIGNMENT RATE METHOD AND HELPER~~~~~~~#
Example #4
Source File: result.py From arche with MIT License | 5 votes |
def build_box_subplots(stat: pd.DataFrame) -> go.Figure: """Create a figure with box subplots showing fields coverages for jobs. Args: stat: a dataframe with field coverages Returns: A figure with box subplots """ stat = stat.drop(columns=["std", "mean", "target deviation"]) traces = [ go.Box( y=row[1], name=row[0], boxpoints="all", jitter=0.3, boxmean="sd", hoverinfo="y", ) for row in stat.iterrows() ] cols = 4 rows = math.ceil(len(stat) / cols) fig = make_subplots(rows=rows, cols=cols) x = 0 for i, j in itertools.product(range(1, rows + 1), range(1, cols + 1)): if x == len(traces): break fig.append_trace(traces[x], i, j) x += 1 fig.update_layout(height=rows * 300 + 200, width=cols * 300, showlegend=False) fig.update_yaxes(tickformat=".4p") return fig
Example #5
Source File: plot.py From sound_field_analysis-py with MIT License | 5 votes |
def plot3Dgrid(rows, cols, viz_data, style, normalize=True, title=None): if len(viz_data) > rows * cols: raise ValueError('Number of plot data is more than the specified rows and columns.') fig = subplots.make_subplots(rows, cols, specs=[[{'is_3d': True}] * cols] * rows, print_grid=False) if style == 'flat': layout_3D = dict( xaxis=dict(range=[0, 360]), yaxis=dict(range=[0, 181]), aspectmode='manual', aspectratio=dict(x=3.6, y=1.81, z=1) ) else: layout_3D = dict( xaxis=dict(range=[-1, 1]), yaxis=dict(range=[-1, 1]), zaxis=dict(range=[-1, 1]), aspectmode='cube' ) rows, cols = _np.mgrid[1:rows + 1, 1: cols + 1] rows = rows.flatten() cols = cols.flatten() for IDX in range(0, len(viz_data)): cur_row = int(rows[IDX]) cur_col = int(cols[IDX]) fig.add_trace(genVisual(viz_data[IDX], style=style, normalize=normalize), cur_row, cur_col) fig.layout[f'scene{IDX + 1:d}'].update(layout_3D) if title is not None: fig.layout.update(title=title) filename = f'{title}.html' else: filename = f'{current_time()}.html' if env_info() == 'jupyter_notebook': plotly_off.iplot(fig) else: plotly_off.plot(fig, filename=filename)
Example #6
Source File: viz.py From SLM-Lab with MIT License | 5 votes |
def plot_experiment(experiment_spec, experiment_df, metrics_cols): ''' Plot the metrics vs. specs parameters of an experiment, where each point is a trial. ref colors: https://plot.ly/python/heatmaps-contours-and-2dhistograms-tutorial/#plotlys-predefined-color-scales ''' y_cols = metrics_cols x_cols = ps.difference(experiment_df.columns.tolist(), y_cols + ['trial']) fig = subplots.make_subplots(rows=len(y_cols), cols=len(x_cols), shared_xaxes=True, shared_yaxes=True, print_grid=False) strength_sr = experiment_df['strength'] min_strength, max_strength = strength_sr.min(), strength_sr.max() for row_idx, y in enumerate(y_cols): for col_idx, x in enumerate(x_cols): x_sr = experiment_df[x] guard_cat_x = x_sr.astype(str) if x_sr.dtype == 'object' else x_sr trace = go.Scatter( y=experiment_df[y], yaxis=f'y{row_idx+1}', x=guard_cat_x, xaxis=f'x{col_idx+1}', showlegend=False, mode='markers', marker={ 'symbol': 'circle-open-dot', 'color': strength_sr, 'opacity': 0.5, # dump first portion of colorscale that is too bright 'cmin': min_strength - 0.5 * (max_strength - min_strength), 'cmax': max_strength, 'colorscale': 'YlGnBu', 'reversescale': False }, ) fig.add_trace(trace, row_idx + 1, col_idx + 1) fig.update_xaxes(title_text='<br>'.join(ps.chunk(x, 20)), zerolinewidth=1, categoryarray=sorted(guard_cat_x.unique()), row=len(y_cols), col=col_idx+1) fig.update_yaxes(title_text=y, rangemode='tozero', row=row_idx+1, col=1) fig.layout.update( title=f'experiment graph: {experiment_spec["name"]}', width=100 + 300 * len(x_cols), height=200 + 300 * len(y_cols)) plot(fig) graph_prepath = experiment_spec['meta']['graph_prepath'] save_image(fig, f'{graph_prepath}_experiment_graph.png') # save important graphs in prepath directly prepath = experiment_spec['meta']['prepath'] save_image(fig, f'{prepath}_experiment_graph.png') return fig
Example #7
Source File: plot.py From prophet with MIT License | 4 votes |
def plot_components_plotly( m, fcst, uncertainty=True, plot_cap=True, figsize=(900, 200)): """Plot the Prophet forecast components using Plotly. See plot_plotly() for Plotly setup instructions Will plot whichever are available of: trend, holidays, weekly seasonality, yearly seasonality, and additive and multiplicative extra regressors. Parameters ---------- m: Prophet model. fcst: pd.DataFrame output of m.predict. uncertainty: Optional boolean to plot uncertainty intervals, which will only be done if m.uncertainty_samples > 0. plot_cap: Optional boolean indicating if the capacity should be shown in the figure, if available. figsize: Set the size for the subplots (in px). Returns ------- A Plotly Figure. """ # Identify components to plot and get their Plotly props components = {} components['trend'] = get_forecast_component_plotly_props( m, fcst, 'trend', uncertainty, plot_cap) if m.train_holiday_names is not None and 'holidays' in fcst: components['holidays'] = get_forecast_component_plotly_props( m, fcst, 'holidays', uncertainty) regressors = {'additive': False, 'multiplicative': False} for name, props in m.extra_regressors.items(): regressors[props['mode']] = True for mode in ['additive', 'multiplicative']: if regressors[mode] and 'extra_regressors_{}'.format(mode) in fcst: components['extra_regressors_{}'.format(mode)] = get_forecast_component_plotly_props( m, fcst, 'extra_regressors_{}'.format(mode)) for seasonality in m.seasonalities: components[seasonality] = get_seasonality_plotly_props(m, seasonality) # Create Plotly subplot figure and add the components to it fig = make_subplots(rows=len(components), cols=1, print_grid=False) fig['layout'].update(go.Layout( showlegend=False, width=figsize[0], height=figsize[1] * len(components) )) for i, name in enumerate(components): if i == 0: xaxis = fig['layout']['xaxis'] yaxis = fig['layout']['yaxis'] else: xaxis = fig['layout']['xaxis{}'.format(i + 1)] yaxis = fig['layout']['yaxis{}'.format(i + 1)] xaxis.update(components[name]['xaxis']) yaxis.update(components[name]['yaxis']) for trace in components[name]['traces']: fig.append_trace(trace, i + 1, 1) return fig
Example #8
Source File: app.py From CrypTen with MIT License | 4 votes |
def update_runtime_diff(start_date, end_date, funcs): if type(funcs) is str: funcs = [funcs] start_df = func_df[func_df["date"] == start_date] end_df = func_df[func_df["date"] == end_date] fig = make_subplots( rows=len(funcs), cols=1, specs=[[{"type": "domain"}] for _ in range(len(funcs))] ) for i, func in enumerate(funcs): runtime = end_df[end_df["function"] == func]["runtime crypten"] runtime_prev = start_df[start_df["function"] == func]["runtime crypten"] func_text = func.capitalize() fig.add_trace( go.Indicator( mode="number+delta", value=float(runtime), title={ "text": f"{func_text}<br><span style='font-size:0.8em;color:gray'>" + "runtime in seconds</span><br>" }, delta={ "reference": float(runtime_prev), "relative": True, "increasing": {"color": "#ff4236"}, "decreasing": {"color": "#008000"}, }, ), row=i + 1, col=1, ) fig.update_layout(height=300 * len(funcs)) return fig
Example #9
Source File: xsection.py From webviz-subsurface with GNU General Public License v3.0 | 4 votes |
def __init__( self, zmin=None, zmax=None, well=None, surfaces=None, sampling=5, nextend=5, zonelogshift=0, surfacenames=None, surfacecolors=None, cube=None, grid=None, gridproperty=None, zunit="", show_marginal=False, ): self._data = [] self._figure = make_subplots( rows=2 if show_marginal else 1, cols=1, shared_xaxes=True, vertical_spacing=0, row_heights=[0.05, 0.95] if show_marginal else [1], ) self._zmin = zmin if zmin else well.dataframe["Z_TVDSS"].min() self._zmax = zmax if zmax else well.dataframe["Z_TVDSS"].max() self._well = well self._nextend = nextend self._sampling = sampling self._surfaces = surfaces self._surfacenames = surfacenames self._surfacecolors = ( surfacecolors if surfacecolors is not None else [ "#1f77b4", # muted blue "#ff7f0e", # safety orange "#2ca02c", # cooked asparagus green "#d62728", # brick red "#9467bd", # muted purple "#8c564b", # chestnut brown "#e377c2", # raspberry yogurt pink "#7f7f7f", # middle gray "#bcbd22", # curry yellow-green "#17becf", # blue-teal ] ) self.zunit = zunit self.show_marginal = show_marginal self.main_trace_row = 2 if show_marginal else 1 self._cube = cube self._grid = grid self._gridproperty = gridproperty self._zonelogshift = zonelogshift self._fence = None
Example #10
Source File: _parameter_response_correlation.py From webviz-subsurface with GNU General Public License v3.0 | 4 votes |
def make_distribution_plot(df, parameter, response, theme): """Make plotly traces for scatterplot and histograms for selected response and input parameter""" real_text = [f"Realization:{r}" for r in df["REAL"]] fig = make_subplots( rows=4, cols=2, specs=[ [{"colspan": 2, "rowspan": 2}, None], [None, None], [{"rowspan": 2}, {"rowspan": 2}], [None, None], ], ) fig.add_trace( { "type": "scatter", "showlegend": False, "mode": "markers", "x": df[parameter], "y": df[response], "text": real_text, }, 1, 1, ) fig.add_trace( {"type": "histogram", "x": df[parameter], "showlegend": False,}, 3, 1, ) fig.add_trace( {"type": "histogram", "x": df[response], "showlegend": False,}, 3, 2, ) fig["layout"].update( theme_layout( theme, { "height": 800, "bargap": 0.05, "xaxis": {"title": parameter,}, "yaxis": {"title": response}, "xaxis2": {"title": parameter}, "xaxis3": {"title": response}, "title": f"Distribution of {response} and {parameter}", }, ) ) fig["layout"]["font"].update({"size": 8}) return fig
Example #11
Source File: returns_chart.py From spectre with Apache License 2.0 | 4 votes |
def plot_cumulative_returns(returns, positions, transactions, benchmark, annual_risk_free): from ..trading import turnover, sharpe_ratio, drawdown, annual_volatility import plotly.graph_objects as go import plotly.subplots as subplots fig = subplots.make_subplots(specs=[[{"secondary_y": True}]]) cum_ret = (returns + 1).cumprod() fig.add_trace(go.Scatter(x=cum_ret.index, y=cum_ret.values * 100 - 100, name='portfolio', hovertemplate='<b>Date</b>:%{x}<br><b>Return</b>: %{y:.3f}%')) fig.add_shape(go.layout.Shape(y0=0, y1=0, x0=cum_ret.index[0], x1=cum_ret.index[-1], type="line", line=dict(width=1))) if benchmark is not None: cum_bench = (benchmark + 1).cumprod() fig.add_trace(go.Scatter(x=cum_bench.index, y=cum_bench.values * 100 - 100, name='benchmark', line=dict(width=0.5))) fig.add_shape(go.layout.Shape( type="rect", xref="x", yref="paper", opacity=0.5, line_width=0, fillcolor="LightGoldenrodYellow", layer="below", y0=0, y1=1, x0=cum_ret.idxmax(), x1=cum_ret[cum_ret.idxmax():].idxmin(), )) to = turnover(positions, transactions) * 100 resample = int(len(to) / 126) if resample > 0: to = to.fillna(0).rolling(resample).mean()[::resample] fig.add_trace(go.Bar(x=to.index, y=to.values, opacity=0.2, name='turnover'), secondary_y=True) sr = sharpe_ratio(returns, annual_risk_free) dd, ddd = drawdown(cum_ret) mdd = abs(dd.min()) mdd_dur = ddd.max() vol = annual_volatility(returns) * 100 if benchmark is not None: bench_sr = sharpe_ratio(benchmark, annual_risk_free) bench_vol = annual_volatility(benchmark) * 100 else: bench_sr = 0 bench_vol = 0 ann = go.layout.Annotation( x=0.01, y=0.98, xref="paper", yref="paper", showarrow=False, borderwidth=1, bordercolor='black', align='left', text="<b>Overall</b> (portfolio/benchmark)<br>" "SharpeRatio: {:.3f}/{:.3f}<br>" "MaxDrawDown: {:.2f}%, {} Days<br>" "AnnualVolatility: {:.2f}%/{:.2f}%</b>" .format(sr, bench_sr, mdd * 100, mdd_dur, vol, bench_vol), ) fig.update_layout(height=400, annotations=[ann], margin={'t': 50}) fig.update_xaxes(tickformat='%Y-%m-%d') fig.update_yaxes(title_text='cumulative return', ticksuffix='%', secondary_y=False) fig.update_yaxes(title_text='turnover', ticksuffix='%', secondary_y=True) fig.show()
Example #12
Source File: st_results.py From ross with MIT License | 3 votes |
def plot(self, percentile=[], conf_interval=[], *args, **kwargs): """Plot Campbell Diagram. This method plots Campbell Diagram. Parameters ---------- percentile : list, optional Sequence of percentiles to compute, which must be between 0 and 100 inclusive. conf_interval : list, optional Sequence of confidence intervals to compute, which must be between 0 and 100 inclusive. args: optional harmonics : list, optional List with the harmonics to be plotted. The default is to plot 1x. kwargs : optional Additional key word arguments can be passed to change the plot (e.g. line=dict(width=4.0, color="royalblue"), opacity=1.0, ...) *See Plotly Python Figure Reference for more information. Returns ------- subplots : Plotly graph_objects.make_subplots() Plotly figure with diagrams for frequency and log dec. """ fig0 = self.plot_nat_freq(percentile, conf_interval, *args, **kwargs) default_values = dict(showlegend=False) for k, v in default_values.items(): kwargs.setdefault(k, v) fig1 = self.plot_log_dec(percentile, conf_interval, *args, **kwargs) subplots = make_subplots(rows=1, cols=2) for data in fig0["data"]: subplots.add_trace(data, 1, 1) for data in fig1["data"]: subplots.add_trace(data, 1, 2) subplots.update_xaxes(fig0.layout.xaxis, row=1, col=1) subplots.update_yaxes(fig1.layout.yaxis, row=1, col=1) subplots.update_xaxes(fig0.layout.xaxis, row=1, col=2) subplots.update_yaxes(fig1.layout.yaxis, row=1, col=2) subplots.update_layout( plot_bgcolor="white", width=1800, height=900, legend=dict( font=dict(family="sans-serif", size=14), bgcolor="white", bordercolor="black", borderwidth=2, ), ) return subplots