9
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Plotlyを使う人にも家族がいることを、私たちは忘れていません。

Posted at

はじめに

スーパーでブロッコリーを見るとPlotlyを連想する病気にかかっています。
自分の作業用によく使うPlotlyの使い方をまとめたので公開します。
実際にグリグリ動かしたい方はkaggleのkernelにアップしてるのでそちらでグリグリしてください。
https://www.kaggle.com/kageyama/how-to-use-plotly

※ちなみにPlotlyの3Dグラフをグリグリしたことがない人は、是非とも一度グリグリした方がいい。感動する。

データロード

データはseabornから
iris,titanic,flightsの3つを適宜使用する。

import numpy as np
import pandas as pd

import plotly as py
from plotly.offline import init_notebook_mode, iplot
init_notebook_mode(connected=True)
import plotly.graph_objs as go
import plotly.figure_factory as ff
import seaborn as sns
iris_data = sns.load_dataset("iris")
titanic_data = sns.load_dataset('titanic')
flights_data = sns.load_dataset('flights')
iris_data.head()

WS000001.JPG

titanic_data.head()

WS000000.JPG

flights_data.head()

WS000002.JPG

Scatter Plot

# Create a trace
trace = go.Scatter(
    x = iris_data['sepal_length'] ,
    y = iris_data['petal_length'] ,
    mode = 'markers'
)

tmp = [trace]

# Plot and embed in ipython notebook!
py.offline.iplot(tmp)

WS000003.JPG

# Style Scatter Plots
trace0 = go.Scatter(
    x = iris_data['sepal_length'],
    y = iris_data['petal_length'],
    name = 'length',
    mode = 'markers',
    marker = dict(
        size = 10,
        color = 'rgba(152, 0, 0, .8)',
        line = dict(
            width = 2,
            color = 'rgb(0, 0, 0)'
        )
    )
)

trace1 = go.Scatter(
    x = iris_data['sepal_width'],
    y = iris_data['petal_width'],
    name = 'width',
    mode = 'markers',
    marker = dict(
        size = 10,
        color = 'rgba(255, 182, 193, .9)',
        line = dict(
            width = 2,
        )
    )
)

tmp = [trace0, trace1]

layout = dict(title = 'Styled Scatter',
              yaxis = dict(zeroline = False),
              xaxis = dict(zeroline = False)
             )

fig = dict(data=tmp, layout=layout)
py.offline.iplot(fig)

WS000004.JPG

Line Plot

# Simple Line Plot

# Create a trace
trace1 = go.Scatter(
    x = flights_data[flights_data['month'] == 'January']['year'],
    y = flights_data[flights_data['month'] == 'January']['passengers'],
    name='January'
)

trace2 = go.Scatter(
    x = flights_data[flights_data['month'] == 'February']['year'],
    y = flights_data[flights_data['month'] == 'February']['passengers'],
    name='February'
)

trace3 = go.Scatter(
    x = flights_data[flights_data['month'] == 'March']['year'],
    y = flights_data[flights_data['month'] == 'March']['passengers'],
    name='March'
)

trace4 = go.Scatter(
    x = flights_data[flights_data['month'] == 'April']['year'],
    y = flights_data[flights_data['month'] == 'April']['passengers'],
    name='April'
)

trace5 = go.Scatter(
    x = flights_data[flights_data['month'] == 'May']['year'],
    y = flights_data[flights_data['month'] == 'May']['passengers'],
    name='May'
)

tmp = [trace1,trace2,trace3,trace4,trace5]

py.offline.iplot(tmp)

WS000005.JPG

Filled Area Plot

trace1 = go.Scatter(
    x = flights_data[flights_data['month'] == 'January']['year'],
    y = flights_data[flights_data['month'] == 'January']['passengers'],
    name='January',
    fill='tozeroy'
)

trace2 = go.Scatter(
    x = flights_data[flights_data['month'] == 'February']['year'],
    y = flights_data[flights_data['month'] == 'February']['passengers'],
    name='February',
    fill='tonexty'
)


tmp = [trace1,trace2]

py.offline.iplot(tmp)

WS000006.JPG

Bar Chart

# Basic
tmp = [go.Bar(
            x=flights_data[flights_data['month'] == 'January']['year'],
            y=flights_data[flights_data['month'] == 'January']['passengers'],
            name='January'
    )]
py.offline.iplot(tmp)

WS000007.JPG

# Grouped Bar Chart
trace1 = go.Bar(
    x=flights_data[flights_data['month'] == 'January']['year'],
    y=flights_data[flights_data['month'] == 'January']['passengers'],
    name='January'
)
trace2 = go.Bar(
    x=flights_data[flights_data['month'] == 'February']['year'],
    y=flights_data[flights_data['month'] == 'February']['passengers'],
    name='February'
)

tmp = [trace1, trace2]
layout = go.Layout(
    barmode='group'
)

fig = go.Figure(data=tmp, layout=layout)
py.offline.iplot(fig)

WS000008.JPG

# Stacked Bar Chart
trace1 = go.Bar(
    x=flights_data[flights_data['month'] == 'January']['year'],
    y=flights_data[flights_data['month'] == 'January']['passengers'],
    name='January'
)
trace2 = go.Bar(
    x=flights_data[flights_data['month'] == 'February']['year'],
    y=flights_data[flights_data['month'] == 'February']['passengers'],
    name='February'
)

tmp = [trace1, trace2]
layout = go.Layout(
    barmode='stack'
)

fig = go.Figure(data=tmp, layout=layout)
py.offline.iplot(fig)

WS000009.JPG

# Horizontal Bar Chart
trace1 = go.Bar(
    y=flights_data[flights_data['month'] == 'January']['year'],
    x=flights_data[flights_data['month'] == 'January']['passengers'],
    name='January',
    orientation = 'h',
)
trace2 = go.Bar(
    y=flights_data[flights_data['month'] == 'February']['year'],
    x=flights_data[flights_data['month'] == 'February']['passengers'],
    name='February',
    orientation = 'h',
)

tmp = [trace1, trace2]
layout = go.Layout(
    barmode='stack'
)

fig = go.Figure(data=tmp, layout=layout)
py.offline.iplot(fig)

WS000010.JPG

Pie Chart

# Basic
labels=['setosa','versicolor','virginica']
values=[len(iris_data[iris_data['species']=='setosa']),
        len(iris_data[iris_data['species']=='versicolor']),
        len(iris_data[iris_data['species']=='virginica'])]

trace=go.Pie(labels=labels, values=values)

py.offline.iplot([trace])

WS000011.JPG

fig = {
  "data": [
    {
      "values": [len(iris_data[iris_data['species']=='setosa']),
        len(iris_data[iris_data['species']=='versicolor']),
        len(iris_data[iris_data['species']=='virginica'])],
      "labels": ['setosa','versicolor','virginica'],
      "domain": {"column": 0},
      "name": "species",
      "hoverinfo":"label+percent+name",
      "hole": .4,
      "type": "pie"
    }],
  "layout": {
        "title":"species",
        "grid": {"rows": 1, "columns": 1},
        "annotations": [
            {
                "font": {
                    "size": 20
                },
                "showarrow": False,
                "text": "species",
                "x": 0.5,
                "y": 0.5
            }
        ]
    }
}
py.offline.iplot(fig)

WS000012.JPG

Distplot

x = iris_data['sepal_length'] 
hist_data = [x]
group_labels = ['sepal_length']

fig = ff.create_distplot(hist_data, group_labels,bin_size=.2)
py.offline.iplot(fig)

WS000013.JPG

# Add histogram data
x1 = iris_data['sepal_length'] 
x2 = iris_data['sepal_width']  
x3 = iris_data['petal_length'] 
x4 = iris_data['petal_width'] 

# Group data together
hist_data = [x1, x2, x3, x4]

group_labels = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']

# Create distplot with custom bin_size
fig = ff.create_distplot(hist_data, group_labels, bin_size=.2)

# Plot!
py.offline.iplot(fig)

WS000014.JPG

# Create distplot with custom bin_size
fig = ff.create_distplot(hist_data, group_labels, bin_size=[.1, .25, .5, 1])

# Plot!
py.offline.iplot(fig)

WS000015.JPG

rug_text_one = ['a', 'b', 'c', 'd', 'e',
                'f', 'g', 'h', 'i', 'j', 
                'k', 'l', 'm', 'n', 'o',
                'p', 'q', 'r', 's', 't', 
                'u', 'v', 'w', 'x', 'y', 'z'] 

rug_text_two = ['aa', 'bb', 'cc', 'dd', 'ee',
                'ff', 'gg', 'hh', 'ii', 'jj', 
                'kk', 'll', 'mm', 'nn', 'oo',
                'pp', 'qq', 'rr', 'ss', 'tt', 
                'uu', 'vv', 'ww', 'xx', 'yy', 'zz'] 

rug_text_three = ['aaa', 'bbb', 'ccc', 'ddd', 'eee',
                'fff', 'ggg', 'hhh', 'iii', 'jjj', 
                'kkk', 'lll', 'mmm', 'nnn', 'ooo',
                'ppp', 'qqq', 'rrr', 'sss', 'ttt', 
                'uuu', 'vvv', 'www', 'xxx', 'yyy', 'zzz'] 

rug_text_four = ['aaaa', 'bbbb', 'cccc', 'dddd', 'eeee',
                'ffff', 'gggg', 'hhhh', 'iiii', 'jjjj', 
                'kkkk', 'llll', 'mmmm', 'nnnn', 'oooo',
                'pppp', 'qqqq', 'rrrr', 'ssss', 'tttt', 
                'uuuu', 'vvvv', 'wwww', 'xxxx', 'yyyy', 'zzzz'] 

rug_text = [rug_text_one, rug_text_two,rug_text_three,rug_text_four]

colors = ['rgb(0, 0, 100)', 'rgb(0, 100, 100)','rgb(100, 100, 100)','rgb(100, 100, 200)']

fig = ff.create_distplot(
    hist_data, group_labels, bin_size=.2,
    rug_text=rug_text, colors=colors)

fig['layout'].update(title='Customized Distplot')

# Plot!
py.offline.iplot(fig)

WS000016.JPG

trace0 = go.Box(
    y=iris_data['sepal_length'],
    name='sepal_length'
)
trace1 = go.Box(
    y=iris_data['sepal_width'],
    name='sepal_width'
)
tmp = [trace0, trace1]
py.offline.iplot(tmp)

WS000017.JPG

Boxplot

trace0 = go.Box(
    x=iris_data['sepal_length'],
    name='sepal_length'
)
trace1 = go.Box(
    x=iris_data['sepal_width'],
    name='sepal_width'
)
tmp = [trace0, trace1]
py.offline.iplot(tmp)

WS000018.JPG

trace0 = go.Box(
    y=iris_data['sepal_length'],
    name='sepal_length',
    boxpoints='all', 
    jitter=0.3,
    pointpos=-1.8
)
tmp = [trace0]
py.offline.iplot(tmp)

WS000019.JPG

trace0 = go.Box(
    y=iris_data['sepal_length'],
    name='sepal_length',
    marker = dict(
        color = 'rgb(214, 12, 140)',
    )
)
trace1 = go.Box(
    y=iris_data['sepal_width'],
    name='sepal_width',
    marker = dict(
        color = 'rgb(0, 128, 128)',
    )
)
tmp = [trace0, trace1]
py.offline.iplot(tmp)

WS000020.JPG

trace0 = go.Box(
    y=iris_data['sepal_length'],
    name='sepal_length',
    boxmean=True
)
trace1 = go.Box(
    y=iris_data['sepal_width'],
    name='sepal_width',
    boxmean='sd'
)
tmp = [trace0, trace1]
py.offline.iplot(tmp)

WS000021.JPG

trace0 = go.Box(
    y=iris_data['sepal_length'],
    name='sepal_length',
    x=iris_data['species']
)
trace1 = go.Box(
    y=iris_data['sepal_width'],
    name='sepal_width',
    x=iris_data['species']
)
tmp = [trace0, trace1]
layout = go.Layout(
    boxmode='group'
)
fig = go.Figure(data=tmp, layout=layout)
py.offline.iplot(fig)

WS000022.JPG

x_data = ['sepal_length', 'sepal_width',
          'petal_length', 'petal_width']
y0 = iris_data['sepal_length']
y1 = iris_data['sepal_width']
y2 = iris_data['petal_length']
y3 = iris_data['petal_width']

y_data = [y0,y1,y2,y3]

colors = ['rgba(93, 164, 214, 0.5)', 'rgba(255, 144, 14, 0.5)', 'rgba(44, 160, 101, 0.5)', 'rgba(255, 65, 54, 0.5)']

traces = []

for xd, yd, cls in zip(x_data, y_data, colors):
        traces.append(go.Box(
            y=yd,
            name=xd,
            boxpoints='all',
            jitter=0.5,
            whiskerwidth=0.2,
            fillcolor=cls,
            marker=dict(
                size=2,
            ),
            line=dict(width=1),
        ))

layout = go.Layout(
    title='Iris',
    yaxis=dict(
        autorange=True,
        showgrid=True,
        zeroline=True,
        dtick=5,
        gridcolor='rgb(255, 255, 255)',
        gridwidth=1,
        zerolinecolor='rgb(255, 255, 255)',
        zerolinewidth=2,
    ),
    margin=dict(
        l=40,
        r=30,
        b=80,
        t=100,
    ),
    paper_bgcolor='rgb(243, 243, 243)',
    plot_bgcolor='rgb(243, 243, 243)',
    showlegend=False
)

fig = go.Figure(data=traces, layout=layout)
py.offline.iplot(fig)

WS000023.JPG

x_data = ['sepal_length', 'sepal_width',
          'petal_length', 'petal_width']
y0 = iris_data['sepal_length']
y1 = iris_data['sepal_width']
y2 = iris_data['petal_length']
y3 = iris_data['petal_width']

y_data = [y0,y1,y2,y3]

colors = ['rgba(93, 164, 214, 0.5)', 'rgba(255, 144, 14, 0.5)', 'rgba(44, 160, 101, 0.5)', 'rgba(255, 65, 54, 0.5)']

traces = []

for xd, yd, cls in zip(x_data, y_data, colors):
        traces.append(go.Box(
            y=yd,
            x=iris_data['species'],
            name=xd,
            boxpoints='all',
            jitter=0.5,
            whiskerwidth=0.2,
            fillcolor=cls,
            marker=dict(
                size=2,
            ),
            line=dict(width=1),
        ))

layout = go.Layout(
    title='Iris',
    yaxis=dict(
        autorange=True,
        showgrid=True,
        zeroline=True,
        dtick=5,
        gridcolor='rgb(255, 255, 255)',
        gridwidth=1,
        zerolinecolor='rgb(255, 255, 255)',
        zerolinewidth=2,
    ),
    margin=dict(
        l=40,
        r=30,
        b=80,
        t=100,
    ),
    paper_bgcolor='rgb(243, 243, 243)',
    plot_bgcolor='rgb(243, 243, 243)',
    showlegend=False,
    boxmode='group'
)

fig = go.Figure(data=traces, layout=layout)
py.offline.iplot(fig)

WS000024.JPG

Histgram

# Basic Histogram
x = iris_data['sepal_length']
tmp = [go.Histogram(x=x)]

py.offline.iplot(tmp)

WS000025.JPG

# Normalized Histogram
tmp = [go.Histogram(x=x,histnorm='probability')]

py.offline.iplot(tmp)

WS000026.JPG

# Horizontal Histogram
tmp = [go.Histogram(y=x)]

py.offline.iplot(tmp)

WS000027.JPG

# Overlaid Histogram
x0 = iris_data['sepal_length']
x1 = iris_data['petal_length']

trace1 = go.Histogram(
    x=x0,
    opacity=0.75,
    name='sepal_length'
)
trace2 = go.Histogram(
    x=x1,
    opacity=0.75,
    name='petal_length'
)

tmp = [trace1, trace2]
layout = go.Layout(barmode='overlay')
fig = go.Figure(data=tmp, layout=layout)

py.offline.iplot(fig)

WS000028.JPG

# Stacked Histograms
layout = go.Layout(barmode='stack')
fig = go.Figure(data=tmp, layout=layout)

py.offline.iplot(fig)

WS000029.JPG

# Styled Histogram
x0 = iris_data['sepal_length']
x1 = iris_data['petal_length']

trace1 = go.Histogram(
    x=x0,
    histnorm='percent',
    name='sepal_length',
    xbins=dict(
        start=3.0,
        end=8.0,
        size=0.5
    ),
    marker=dict(
        color='#FFD7E9',
    ),
    opacity=0.75
)
trace2 = go.Histogram(
    x=x1,
    name='petal_length',
    xbins=dict(
        start=3.0,
        end=8.0,
        size=0.5
    ),
    marker=dict(
        color='#EB89B5'
    ),
    opacity=0.75
)
tmp = [trace1, trace2]

layout = go.Layout(
    title='Sampled Results',
    xaxis=dict(
        title='Value'
    ),
    yaxis=dict(
        title='Count'
    ),
    bargap=0.2,
    bargroupgap=0.1
)
fig = go.Figure(data=tmp, layout=layout)
py.offline.iplot(fig)

WS000030.JPG

# Specify Binning Function
x = iris_data['species']
y = iris_data['sepal_length']

tmp = [
  go.Histogram(
    histfunc = "count",
    y = y,
    x = x,
    name = "count"
  ),
  go.Histogram(
    histfunc = "sum",
    y = y,
    x = x,
    name = "sum"
  )
]

py.offline.iplot(tmp)

WS000031.JPG

2D Histogram

# 2D Histogram of a Bivariate Normal Distribution
x = iris_data['sepal_length']
y = iris_data['petal_length']

tmp = [
    go.Histogram2d(
        x=x,
        y=y
    )
]
py.offline.iplot(tmp)

WS000032.JPG

# 2D Histogram Binning and Styling Options
x = iris_data['sepal_length']
y = iris_data['petal_length']

tmp = [
    go.Histogram2d(x=x, y=y, histnorm='probability',
        autobinx=False,
        xbins=dict(start=4, end=8, size=0.1),
        autobiny=False,
        ybins=dict(start=0, end=8, size=0.1),
        colorscale=[[0, 'rgb(12,51,131)'], [0.25, 'rgb(10,136,186)'], [0.5, 'rgb(242,211,56)'], [0.75, 'rgb(242,143,56)'], [1, 'rgb(217,30,30)']]
    )
]
py.offline.iplot(tmp)

WS000033.JPG

# 2D Histogram Overlaid with a Scatter Chart
x0 = iris_data['sepal_length']
y0 = iris_data['petal_length']
x1 = iris_data['sepal_width']
y1 = iris_data['petal_width']

x = np.concatenate([x0, x1])
y = np.concatenate([y0, y1])

trace1 = go.Scatter(
    x=x0,
    y=y0,
    mode='markers',
    showlegend=False,
    marker=dict(
        symbol='x',
        opacity=0.7,
        color='white',
        size=8,
        line=dict(width=1),
    )
)
trace2 = go.Scatter(
    x=x1,
    y=y1,
    mode='markers',
    showlegend=False,
    marker=dict(
        symbol='circle',
        opacity=0.7,
        color='white',
        size=8,
        line=dict(width=1),
    )
)
trace3 = go.Histogram2d(
    x=x,
    y=y,
    colorscale='YlGnBu',
    zmax=10,
    nbinsx=14,
    nbinsy=14,
    zauto=False,
)

layout = go.Layout(
    xaxis=dict( ticks='', showgrid=False, zeroline=False, nticks=20 ),
    yaxis=dict( ticks='', showgrid=False, zeroline=False, nticks=20 ),
    autosize=False,
    height=550,
    width=550,
    hovermode='closest',

)
tmp = [trace1, trace2, trace3]
fig = go.Figure(data=tmp, layout=layout)

py.offline.iplot(fig)

WS000034.JPG

2D Density Plot

# 2D Histogram Contour Plot with Histogram Subplots
t = np.linspace(-1, 1.2, 2000)
x = iris_data['sepal_length']
y = iris_data['petal_length']

colorscale = ['#7A4579', '#D56073', 'rgb(236,158,105)', (1, 1, 0.2), (0.98,0.98,0.98)]

fig = ff.create_2d_density(
    x, y, colorscale=colorscale,
    hist_color='rgb(255, 237, 222)', point_size=3
)

py.offline.iplot(fig)

WS000035.JPG

Facet and Trellis Plot

# Facet by Column
fig = ff.create_facet_grid(
    iris_data,
    x='sepal_length',
    y='petal_length',
    facet_col='species',
)

py.offline.iplot(fig)

WS000036.JPG

# Facet by Row
fig = ff.create_facet_grid(
    iris_data,
    x='sepal_length',
    y='petal_length',
    facet_row='species',
)

py.offline.iplot(fig)

WS000037.JPG

# Facet by Row and Column

fig = ff.create_facet_grid(
    titanic_data,
    x='fare',
    y='age',
    facet_row='sex',
    facet_col='alive',
    color_name='class',
    color_is_cat=True,
)

py.offline.iplot(fig)

WS000038.JPG

# Custom Colormap
fig = ff.create_facet_grid(
    titanic_data,
    x='fare',
    y='age',
    color_name='sex',
    show_boxes=False,
    marker={'size': 10, 'opacity': 1.0},
    colormap={'male': 'rgb(165, 242, 242)', 'female': 'rgb(253, 174, 216)'}
)
py.offline.iplot(fig)

WS000039.JPG

# Plot with Histogram Traces
fig = ff.create_facet_grid(
    titanic_data,
    x='fare',
    y='age',
    facet_row='sex',
    facet_col='alive',
    trace_type='histogram',
)

py.offline.iplot(fig)

WS000040.JPG

# Plot with BoxPlot Traces
fig = ff.create_facet_grid(
    titanic_data,
    y='age',
    facet_row='sex',
    facet_col='alive',
    trace_type='box',
)

py.offline.iplot(fig)

WS000041.JPG

Scatterplot Matrix

classes=np.unique(iris_data['species'].values).tolist()
class_code={classes[k]: k for k in range(3)}
color_vals=[class_code[cl] for cl in iris_data['species']]
text=[iris_data.loc[ k, 'species'] for k in range(len(iris_data))]

pl_colorscale=[[0.0, '#19d3f3'],
               [0.333, '#19d3f3'],
               [0.333, '#e763fa'],
               [0.666, '#e763fa'],
               [0.666, '#636efa'],
               [1, '#636efa']]

trace1 = go.Splom(dimensions=[dict(label='sepal_length',
                                 values=iris_data['sepal_length']),
                            dict(label='sepal_width',
                                 values=iris_data['sepal_width']),
                            dict(label='petal_length',
                                 values=iris_data['petal_length']),
                            dict(label='petal_width',
                                 values=iris_data['petal_width'])],
                text=text,
                marker=dict(color=color_vals,
                            size=7,
                            colorscale=pl_colorscale,
                            showscale=False,
                            line=dict(width=0.5,
                                      color='rgb(230,230,230)'))
                )

axis = dict(showline=True,
          zeroline=False,
          gridcolor='#fff',
          ticklen=4)

layout = go.Layout(
    title='Iris Data set',
    dragmode='select',
    width=600,
    height=600,
    autosize=False,
    hovermode='closest',
    plot_bgcolor='rgba(240,240,240, 0.95)',
    xaxis1=dict(axis),
    xaxis2=dict(axis),
    xaxis3=dict(axis),
    xaxis4=dict(axis),
    yaxis1=dict(axis),
    yaxis2=dict(axis),
    yaxis3=dict(axis),
    yaxis4=dict(axis)
)

fig1 = dict(data=[trace1], layout=layout)
py.offline.iplot(fig1)

WS000042.JPG

Violin Plot

# Basic Violin Plot
fig = {
    "data": [{
        "type": 'violin',
        "y": iris_data['sepal_length'],
        "box": {
            "visible": True
        },
        "line": {
            "color": 'black'
        },
        "meanline": {
            "visible": True
        },
        "fillcolor": '#8dd3c7',
        "opacity": 0.6,
        "x0": 'sepal_length'
    }],
    "layout" : {
        "title": "",
        "yaxis": {
            "zeroline": False,
        }
    }
}

py.offline.iplot(fig)

WS000043.JPG

# Multiple Traces
tmp = []
for i in range(0,len(pd.unique(iris_data['species']))):
    trace = {
            "type": 'violin',
            "x": iris_data['species'][iris_data['species'] == pd.unique(iris_data['species'])[i]],
            "y": iris_data['sepal_length'][iris_data['species'] == pd.unique(iris_data['species'])[i]],
            "name": pd.unique(iris_data['species'])[i],
            "box": {
                "visible": True
            },
            "meanline": {
                "visible": True
            }
        }
    tmp.append(trace)

        
fig = {
    "data": tmp,
    "layout" : {
        "title": "",
        "yaxis": {
            "zeroline": False,
        }
    }
}

py.offline.iplot(fig)

WS000044.JPG

# Grouped Violin Plot
fig = {
    "data": [
        {
            "type": 'violin',
            "x": titanic_data['class'][ titanic_data['sex'] == 'male' ],
            "y": titanic_data['age'] [ titanic_data['sex'] == 'male' ],
            "legendgroup": 'male',
            "scalegroup": 'male',
            "name": 'male',
            "box": {
                "visible": True
            },
            "meanline": {
                "visible": True
            },
            "line": {
                "color": 'blue'
            }
        },
        {
            "type": 'violin',
            "x": titanic_data['class'][ titanic_data['sex'] == 'female' ],
            "y": titanic_data['age'] [ titanic_data['sex'] == 'female' ],
            "legendgroup": 'female',
            "scalegroup": 'female',
            "name": 'female',
            "box": {
                "visible": True
            },
            "meanline": {
                "visible": True
            },
            "line": {
                "color": 'pink'
            }
        }
    ],
    "layout" : {
        "yaxis": {
            "zeroline": False,
        },
        "violinmode": "group"
    }
}


py.offline.iplot(fig)

WS000045.JPG

# Split Violin Plot
fig = {
    "data": [
        {
            "type": 'violin',
            "x": titanic_data['class'][ titanic_data['sex'] == 'male' ],
            "y": titanic_data['age'] [ titanic_data['sex'] == 'male' ],
            "legendgroup": 'male',
            "scalegroup": 'male',
            "name": 'male',
            "side": 'negative',
            "box": {
                "visible": True
            },
            "meanline": {
                "visible": True
            },
            "line": {
                "color": 'blue'
            }
        },
        {
            "type": 'violin',
            "x": titanic_data['class'][ titanic_data['sex'] == 'female' ],
            "y": titanic_data['age'] [ titanic_data['sex'] == 'female' ],
            "legendgroup": 'female',
            "scalegroup": 'female',
            "name": 'female',
            "side": 'positive',
            "box": {
                "visible": True
            },
            "meanline": {
                "visible": True
            },
            "line": {
                "color": 'pink'
            }
        }
    ],
     "layout" : {
        "yaxis": {
            "zeroline": False,
        },
        "violingap": 0,
        "violinmode": "overlay"
    }
}


py.offline.iplot(fig)

WS000046.JPG

Heat Map

# Basic
trace = go.Heatmap(z=[[1, 20, 30],
                      [20, 1, 60],
                      [30, 60, 1]])
data=[trace]
py.offline.iplot(data)

WS000047.JPG

# Heatmap with Categorical Axis Labels
data = pd.pivot_table(data=flights_data, values='passengers', columns='year', index='month', aggfunc=np.mean)
data

WS000048.JPG

trace = go.Heatmap(z=data.values,
                   x=data.columns,
                   y=data.index)
data=[trace]
py.offline.iplot(data)

WS000049.JPG

3D Surface

pivot_data = pd.pivot_table(data=flights_data, values='passengers', columns='year', index='month', aggfunc=np.mean)
data = [
    go.Surface(
        x=pivot_data.columns,
        y=pivot_data.index,
        z=pivot_data.values
    )
]
layout = go.Layout(
    title='flights',
    autosize=False,
    width=500,
    height=500,
    margin=dict(
        l=65,
        r=50,
        b=65,
        t=90
    )
)
fig = go.Figure(data=data, layout=layout)
py.offline.iplot(fig)

WS000050.JPG

Restyle Button

pivot_data = pd.pivot_table(data=flights_data, values='passengers', columns='year', index='month', aggfunc=np.mean)
data = [
    go.Surface(
        x=pivot_data.columns,
        y=pivot_data.index,
        z=pivot_data.values
    )
]
layout = go.Layout(
    width=800,
    height=900,
    autosize=False,
    margin=dict(t=0, b=0, l=0, r=0),
    scene=dict(
        xaxis=dict(
            gridcolor='rgb(255, 255, 255)',
            zerolinecolor='rgb(255, 255, 255)',
            showbackground=True,
            backgroundcolor='rgb(230, 230,230)'
        ),
        yaxis=dict(
            gridcolor='rgb(255, 255, 255)',
            zerolinecolor='rgb(255, 255, 255)',
            showbackground=True,
            backgroundcolor='rgb(230, 230, 230)'
        ),
        zaxis=dict(
            gridcolor='rgb(255, 255, 255)',
            zerolinecolor='rgb(255, 255, 255)',
            showbackground=True,
            backgroundcolor='rgb(230, 230,230)'
        ),
        aspectratio = dict(x=1, y=1, z=0.7),
        aspectmode = 'manual'
    )
)

updatemenus=list([
    dict(
        buttons=list([   
            dict(
                args=['type', 'surface'],
                label='3D Surface',
                method='restyle'
            ),
            dict(
                args=['type', 'heatmap'],
                label='Heatmap',
                method='restyle'
            )             
        ]),
        direction = 'left',
        pad = {'r': 10, 't': 10},
        showactive = True,
        type = 'buttons',
        x = 0.1,
        xanchor = 'left',
        y = 1.1,
        yanchor = 'top' 
    ),
])

annotations = list([
    dict(text='Trace type:', x=1949, y=1.085, yref='paper', align='left', showarrow=False)
])
layout['updatemenus'] = updatemenus
layout['annotations'] = annotations

fig = dict(data=data, layout=layout)
py.offline.iplot(fig)

WS000051.JPG

WS000052.JPG

3D Scatter

trace1 = go.Scatter3d(
    x=iris_data['sepal_length'],
    y=iris_data['petal_length'],
    z=iris_data['sepal_width'],
    mode='markers',
    marker=dict(
        size=12,
        color=iris_data['sepal_width'],                # set color to an array/list of desired values
        colorscale='Viridis',   # choose a colorscale
        opacity=0.8
    )
)

data = [trace1]
layout = go.Layout(
    margin=dict(
        l=0,
        r=0,
        b=0,
        t=0
    )
)
fig = go.Figure(data=data, layout=layout)
py.offline.iplot(fig)

WS000053.JPG

最後に

Plotlyは確かに綺麗なグラフが描けるんだけど、コーディングが結構煩雑になりやすい。
コーディングミスにも気を配る必要が出てくるから、特にこだわりが無いならSeaborn使った方が早いし無難かなと感じる。
会議とか見せ方を工夫したいときには、Plotly使うといいと思う。

9
12
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?