Skip to content

[MRG] Candlestick andothers #11

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 13 commits into from
Jun 21, 2019
501 changes: 239 additions & 262 deletions notebooks/box-plots.md

Large diffs are not rendered by default.

274 changes: 94 additions & 180 deletions notebooks/bubble-charts.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,26 @@
---
jupyter:
jupytext:
notebook_metadata_filter: all
text_representation:
extension: .md
format_name: markdown
format_version: '1.1'
jupytext_version: 1.1.1
kernelspec:
display_name: Python 2
display_name: Python 3
language: python
name: python2
name: python3
language_info:
codemirror_mode:
name: ipython
version: 3
file_extension: .py
mimetype: text/x-python
name: python
nbconvert_exporter: python
pygments_lexer: ipython3
version: 3.6.7
plotly:
description: How to make bubble charts in Python with Plotly.
display_as: basic
Expand All @@ -24,59 +35,60 @@ jupyter:
redirect_from: python/bubble-charts-tutorial/
thumbnail: thumbnail/bubble.jpg
title: Bubble Charts | plotly
v4upgrade: true
---

#### New to Plotly?
Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
#### Version Check
Plotly's python package is updated frequently. Run `pip install plotly --upgrade` to use the latest version.
## Bubble chart with plotly.express

A [bubble chart](https://en.wikipedia.org/wiki/Bubble_chart) is a scatter plot in which a third dimension of the data is shown through the size of markers. For other types of scatter plot, see the [line and scatter page](https://plot.ly/python/line-and-scatter/).

We first show a bubble chart example using plotly express. Plotly express functions take as argument a tidy [pandas DataFrame](https://pandas.pydata.org/pandas-docs/stable/getting_started/10min.html). The size of markers is set from the dataframe column given as the `size` parameter.

```python
import plotly
plotly.__version__
import plotly.express as px
gapminder = px.data.gapminder()

fig = px.scatter(gapminder.query("year==2007"), x="gdpPercap", y="lifeExp",
size="pop", color="continent",
hover_name="country", log_x=True, size_max=60)
fig.show()
```

## Bubble Chart with plotly.graph_objects

When data are not available as tidy dataframes, it is also possible to use the more generic `go.Scatter` from `plotly.graph_objects`, and define the size of markers to create a bubble chart. All of the available options are described in the scatter section of the reference page: https://plot.ly/python/reference#scatter.

### Simple Bubble Chart

```python
import plotly.plotly as py
import plotly.graph_objs as go
import plotly.graph_objects as go

trace0 = go.Scatter(
x=[1, 2, 3, 4],
y=[10, 11, 12, 13],
fig = go.Figure(data=[go.Scatter(
x=[1, 2, 3, 4], y=[10, 11, 12, 13],
mode='markers',
marker=dict(
size=[40, 60, 80, 100],
)
)

data = [trace0]
py.iplot(data, filename='bubblechart-size')
marker_size=[40, 60, 80, 100])
])

fig.show()
```

### Setting Marker Size and Color

```python
import plotly.plotly as py
import plotly.graph_objs as go
import plotly.graph_objects as go

trace0 = go.Scatter(
x=[1, 2, 3, 4],
y=[10, 11, 12, 13],
fig = go.Figure(data=[go.Scatter(
x=[1, 2, 3, 4], y=[10, 11, 12, 13],
mode='markers',
marker=dict(
color=['rgb(93, 164, 214)', 'rgb(255, 144, 14)',
'rgb(44, 160, 101)', 'rgb(255, 65, 54)'],
opacity=[1, 0.8, 0.6, 0.4],
size=[40, 60, 80, 100],
)
)
)])

data = [trace0]
py.iplot(data, filename='bubblechart-color')
fig.show()
```

### Scaling the Size of Bubble Charts
Expand All @@ -86,11 +98,10 @@ Note that setting 'sizeref' to a value greater than 1, decreases the rendered ma
Additionally, we recommend setting the sizemode attribute: https://plot.ly/python/reference/#scatter-marker-sizemode to area.

```python
import plotly.plotly as py
import plotly.graph_objs as go
import plotly.graph_objects as go

size = [20, 40, 60, 80, 100, 80, 60, 40, 20, 40]
trace0 = go.Scatter(
fig = go.Figure(data=[go.Scatter(
x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
y=[11, 12, 10, 11, 12, 11, 12, 13, 12, 11],
mode='markers',
Expand All @@ -100,68 +111,61 @@ trace0 = go.Scatter(
sizeref=2.*max(size)/(40.**2),
sizemin=4
)
)
)])

data = [trace0]
py.iplot(data, filename='bubblechart-size-ref')
fig.show()
```

### Hover Text with Bubble Charts

```python
import plotly.plotly as py
import plotly.graph_objs as go
import plotly.graph_objects as go

trace0 = go.Scatter(
x=[1, 2, 3, 4],
y=[10, 11, 12, 13],
fig = go.Figure(data=[go.Scatter(
x=[1, 2, 3, 4], y=[10, 11, 12, 13],
text=['A<br>size: 40', 'B<br>size: 60', 'C<br>size: 80', 'D<br>size: 100'],
mode='markers',
marker=dict(
color=['rgb(93, 164, 214)', 'rgb(255, 144, 14)', 'rgb(44, 160, 101)', 'rgb(255, 65, 54)'],
size=[40, 60, 80, 100],
)
)
)])

data = [trace0]
py.iplot(data, filename='bubblechart-text')
fig.show()
```

### Bubble Charts with Colorscale

```python
import plotly.plotly as py
import plotly.graph_objs as go

data = [
{
'x': [1, 3.2, 5.4, 7.6, 9.8, 12.5],
'y': [1, 3.2, 5.4, 7.6, 9.8, 12.5],
'mode': 'markers',
'marker': {
'color': [120, 125, 130, 135, 140, 145],
'size': [15, 30, 55, 70, 90, 110],
'showscale': True
}
}
]

py.iplot(data, filename='scatter-colorscale')
import plotly.graph_objects as go

fig = go.Figure(data=[go.Scatter(
x=[1, 3.2, 5.4, 7.6, 9.8, 12.5],
y=[1, 3.2, 5.4, 7.6, 9.8, 12.5],
mode='markers',
marker=dict(
color=[120, 125, 130, 135, 140, 145],
size=[15, 30, 55, 70, 90, 110],
showscale=True
)
)])

fig.show()
```

### Categorical Bubble Charts

```python
import plotly.plotly as py
import plotly.graph_objs as go

import plotly.graph_objects as go
import plotly.express as px
import pandas as pd
import math

data = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv")
# Load data, define hover text and bubble size
data = px.data.gapminder()
df_2007 = data[data['year']==2007]
df_2007 = df_2007.sort_values(['continent', 'country'])
slope = 2.666051223553066e-05

hover_text = []
bubble_size = []

Expand All @@ -175,140 +179,50 @@ for index, row in df_2007.iterrows():
gdp=row['gdpPercap'],
pop=row['pop'],
year=row['year']))
bubble_size.append(math.sqrt(row['pop']*slope))
bubble_size.append(math.sqrt(row['pop']))

df_2007['text'] = hover_text
df_2007['size'] = bubble_size
sizeref = 2.*max(df_2007['size'])/(100**2)

trace0 = go.Scatter(
x=df_2007['gdpPercap'][df_2007['continent'] == 'Africa'],
y=df_2007['lifeExp'][df_2007['continent'] == 'Africa'],
mode='markers',
name='Africa',
text=df_2007['text'][df_2007['continent'] == 'Africa'],
marker=dict(
symbol='circle',
sizemode='area',
sizeref=sizeref,
size=df_2007['size'][df_2007['continent'] == 'Africa'],
line=dict(
width=2
),
)
)
trace1 = go.Scatter(
x=df_2007['gdpPercap'][df_2007['continent'] == 'Americas'],
y=df_2007['lifeExp'][df_2007['continent'] == 'Americas'],
mode='markers',
name='Americas',
text=df_2007['text'][df_2007['continent'] == 'Americas'],
marker=dict(
sizemode='area',
sizeref=sizeref,
size=df_2007['size'][df_2007['continent'] == 'Americas'],
line=dict(
width=2
),
)
)
trace2 = go.Scatter(
x=df_2007['gdpPercap'][df_2007['continent'] == 'Asia'],
y=df_2007['lifeExp'][df_2007['continent'] == 'Asia'],
mode='markers',
name='Asia',
text=df_2007['text'][df_2007['continent'] == 'Asia'],
marker=dict(
sizemode='area',
sizeref=sizeref,
size=df_2007['size'][df_2007['continent'] == 'Asia'],
line=dict(
width=2
),
)
)
trace3 = go.Scatter(
x=df_2007['gdpPercap'][df_2007['continent'] == 'Europe'],
y=df_2007['lifeExp'][df_2007['continent'] == 'Europe'],
mode='markers',
name='Europe',
text=df_2007['text'][df_2007['continent'] == 'Europe'],
marker=dict(
sizemode='area',
sizeref=sizeref,
size=df_2007['size'][df_2007['continent'] == 'Europe'],
line=dict(
width=2
),
)
)
trace4 = go.Scatter(
x=df_2007['gdpPercap'][df_2007['continent'] == 'Oceania'],
y=df_2007['lifeExp'][df_2007['continent'] == 'Oceania'],
mode='markers',
name='Oceania',
text=df_2007['text'][df_2007['continent'] == 'Oceania'],
marker=dict(
sizemode='area',
sizeref=sizeref,
size=df_2007['size'][df_2007['continent'] == 'Oceania'],
line=dict(
width=2
),
)
)

data = [trace0, trace1, trace2, trace3, trace4]
layout = go.Layout(
# Dictionary with dataframes for each continent
continent_names = ['Africa', 'Americas', 'Asia', 'Europe', 'Oceania']
continent_data = {continent:df_2007.query("continent == '%s'" %continent)
for continent in continent_names}

# Create figure
fig = go.Figure()

for continent_name, continent in continent_data.items():
fig.add_trace(go.Scatter(
x=continent['gdpPercap'], y=continent['lifeExp'],
name=continent_name, text=continent['text'],
marker_size=continent['size'],
))

# Tune marker appearance and layout
fig.update_traces(mode='markers', marker=dict(sizemode='area',
sizeref=sizeref, line_width=2))

fig.update_layout(
title='Life Expectancy v. Per Capita GDP, 2007',
xaxis=dict(
title='GDP per capita (2000 dollars)',
gridcolor='rgb(255, 255, 255)',
range=[2.003297660701705, 5.191505530708712],
gridcolor='white',
type='log',
zerolinewidth=1,
ticklen=5,
gridwidth=2,
),
yaxis=dict(
title='Life Expectancy (years)',
gridcolor='rgb(255, 255, 255)',
range=[36.12621671352166, 91.72921793264332],
zerolinewidth=1,
ticklen=5,
gridcolor='white',
gridwidth=2,
),
paper_bgcolor='rgb(243, 243, 243)',
plot_bgcolor='rgb(243, 243, 243)',
)

fig = go.Figure(data=data, layout=layout)
py.iplot(fig, filename='life-expectancy-per-GDP-2007')
fig.show()
```

### Reference
See https://plot.ly/python/reference/#scatter for more information and chart attribute options!

```python
from IPython.display import display, HTML

display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))

! pip install git+https://github.com/plotly/publisher.git --upgrade
import publisher
publisher.publish(
'bubble.ipynb', 'python/bubble-charts/', 'Python Bubble Charts | plotly',
'How to make bubble charts in Python with Plotly.',
title = 'Bubble Charts | plotly',
name = 'Bubble Charts', language='python',
has_thumbnail='true', thumbnail='thumbnail/bubble.jpg',
display_as='basic', order=3,
ipynb= '~notebook_demo/1/new-to-plotly-plotlys-python-library-i',
redirect_from='python/bubble-charts-tutorial/',
)
```

```python

```
Loading