A nested circle diagram, where the circle area is proportional to the data could look as follows. It would take a sorted list or array of data and optionally the respective labels as input and plot a couple of circles.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import PatchCollection
def nested_circles[data, labels=None, c=None, ax=None,
cmap=None, norm=None, textkw={}]:
ax = ax or plt.gca[]
data = np.array[data]
R = np.sqrt[data/data.max[]]
p = [plt.Circle[[0,r], radius=r] for r in R[::-1]]
arr = data[::-1] if c is None else np.array[c[::-1]]
col = PatchCollection[p, cmap=cmap, norm=norm, array=arr]
ax.add_collection[col]
ax.axis["off"]
ax.set_aspect["equal"]
ax.autoscale[]
if labels is not None:
kw = dict[color="white", va="center", ha="center"]
kw.update[textkw]
ax.text[0, R[0], labels[0], **kw]
for i in range[1, len[R]]:
ax.text[0, R[i]+R[i-1], labels[i], **kw]
return col
Usage might look like
data = [1,3,4,5,6]
labels = list["ABCDE"]
nested_circles[data, labels=labels, cmap="copper", textkw=dict[fontsize=14]]
plt.show[]
If you want a different
colorcoding, take the c
argument and supply another list of values, e.g.
data = [1,3,4,5,6]
labels = list["ABCDE"]
codes = [5,3,1,4,2]
circles = nested_circles[data, labels=labels, c=codes, cmap="plasma",
textkw=dict[color="black", fontsize=14]]
plt.colorbar[circles, label="Codes"]
plt.title["Diagram"]
plt.show[]
This example shows how to fill the area enclosed by traces.
Filled area plot with plotly.express¶
Plotly Express is the easy-to-use, high-level interface to Plotly, which operates on a variety of types of data and produces easy-to-style figures.
px.area
creates a stacked area plot. Each filled area corresponds to one value of the column given by the line_group
parameter.
In [1]:
import plotly.express as px df = px.data.gapminder[] fig = px.area[df, x="year", y="pop", color="continent", line_group="country"] fig.show[]
Filled area plot in Dash¶
Dash is the best way to build analytical apps in Python using Plotly figures. To run the app below, run pip install dash
, click "Download" to get the code and run python app.py
.
Get started with the official Dash docs and learn how to effortlessly style & deploy apps like this with Dash Enterprise.
In [3]:
import plotly.express as px df = px.data.medals_long[] fig = px.area[df, x="medal", y="count", color="nation", pattern_shape="nation", pattern_shape_sequence=[".", "x", "+"]] fig.show[]
Filled area chart with plotly.graph_objects¶
Basic Overlaid Area Chart¶
In [4]:
import plotly.graph_objects as go fig = go.Figure[] fig.add_trace[go.Scatter[x=[1, 2, 3, 4], y=[0, 2, 3, 5], fill='tozeroy']] # fill down to xaxis fig.add_trace[go.Scatter[x=[1, 2, 3, 4], y=[3, 5, 1, 7], fill='tonexty']] # fill to trace0 y fig.show[]
Overlaid Area Chart Without Boundary Lines¶
In [5]:
import plotly.graph_objects as go fig = go.Figure[] fig.add_trace[go.Scatter[x=[1, 2, 3, 4], y=[0, 2, 3, 5], fill='tozeroy', mode='none' # override default markers+lines ]] fig.add_trace[go.Scatter[x=[1, 2, 3, 4], y=[3, 5, 1, 7], fill='tonexty', mode= 'none']] fig.show[]
Interior Filling for Area Chart¶
In [6]:
import plotly.graph_objects as go fig = go.Figure[] fig.add_trace[go.Scatter[x=[1, 2, 3, 4], y=[3, 4, 8, 3], fill=None, mode='lines', line_color='indigo', ]] fig.add_trace[go.Scatter[ x=[1, 2, 3, 4], y=[1, 6, 2, 6], fill='tonexty', # fill area between trace0 and trace1 mode='lines', line_color='indigo']] fig.show[]
Stacked Area Chart¶
The stackgroup
parameter is used to add the y
values of the different traces in the same group. Traces in the same group fill up to the next trace of the group.
In [7]:
import plotly.graph_objects as go x=['Winter', 'Spring', 'Summer', 'Fall'] fig = go.Figure[] fig.add_trace[go.Scatter[ x=x, y=[40, 60, 40, 10], hoverinfo='x+y', mode='lines', line=dict[width=0.5, color='rgb[131, 90, 241]'], stackgroup='one' # define stack group ]] fig.add_trace[go.Scatter[ x=x, y=[20, 10, 10, 60], hoverinfo='x+y', mode='lines', line=dict[width=0.5, color='rgb[111, 231, 219]'], stackgroup='one' ]] fig.add_trace[go.Scatter[ x=x, y=[40, 30, 50, 30], hoverinfo='x+y', mode='lines', line=dict[width=0.5, color='rgb[184, 247, 212]'], stackgroup='one' ]] fig.update_layout[yaxis_range=[0, 100]] fig.show[]
Stacked Area Chart with Normalized Values¶
In [8]:
import plotly.graph_objects as go x=['Winter', 'Spring', 'Summer', 'Fall'] fig = go.Figure[] fig.add_trace[go.Scatter[ x=x, y=[40, 20, 30, 40], mode='lines', line=dict[width=0.5, color='rgb[184, 247, 212]'], stackgroup='one', groupnorm='percent' # sets the normalization for the sum of the stackgroup ]] fig.add_trace[go.Scatter[ x=x, y=[50, 70, 40, 60], mode='lines', line=dict[width=0.5, color='rgb[111, 231, 219]'], stackgroup='one' ]] fig.add_trace[go.Scatter[ x=x, y=[70, 80, 60, 70], mode='lines', line=dict[width=0.5, color='rgb[127, 166, 238]'], stackgroup='one' ]] fig.add_trace[go.Scatter[ x=x, y=[100, 100, 100, 100], mode='lines', line=dict[width=0.5, color='rgb[131, 90, 241]'], stackgroup='one' ]] fig.update_layout[ showlegend=True, xaxis_type='category', yaxis=dict[ type='linear', range=[1, 100], ticksuffix='%']] fig.show[]
Select Hover Points¶
In [9]:
import plotly.graph_objects as go fig = go.Figure[] fig.add_trace[go.Scatter[x=[0,0.5,1,1.5,2], y=[0,1,2,1,0], fill='toself', fillcolor='darkviolet', hoveron = 'points+fills', # select where hover is active line_color='darkviolet', text="Points + Fills", hoverinfo = 'text+x+y']] fig.add_trace[go.Scatter[x=[3,3.5,4,4.5,5], y=[0,1,2,1,0], fill='toself', fillcolor = 'violet', hoveron='points', line_color='violet', text="Points only", hoverinfo='text+x+y']] fig.update_layout[ title = "hover on points or fill", xaxis_range = [0,5.2], yaxis_range = [0,3] ] fig.show[]
What About Dash?¶
Dash is an open-source framework for building analytical applications, with no Javascript required, and it is tightly integrated with the Plotly graphing library.
Learn about how to install Dash at //dash.plot.ly/installation.
Everywhere in this page that you
see fig.show[]
, you can display the same figure in a Dash application by passing it to the figure
argument of the Graph
component from the built-in dash_core_components
package like this:
import plotly.graph_objects as go # or plotly.express as px fig = go.Figure[] # or any Plotly Express function e.g. px.bar[...] # fig.add_trace[ ... ] # fig.update_layout[ ... ] import dash import dash_core_components as dcc import dash_html_components as html app = dash.Dash[] app.layout = html.Div[[ dcc.Graph[figure=fig] ]] app.run_server[debug=True, use_reloader=False] # Turn off reloader if inside Jupyter