使用Plotly显示多个图表

时间:2017-08-14 09:37:00

标签: python matplotlib plotly seaborn

我试图通过Plotly在一个图上显示多个图表。 有没有聪明的方法可以在不创建每个df对象的情况下使用'for'或其他方式放置几个图表?显示具有多个类别的交互式地图的更好方法是什么?

import random
import plotly.offline as py
py.init_notebook_mode(connected=True)
import plotly.graph_objs as go

N = 500
x = np.linspace(0, 1, N)
y = np.random.randn(N)

z = []
foo = ['apple','amazon','facebook',
       'google','ms','twitter','airbnb','tesla',
      'piedpiper','hooli']
for bar in range(0,N):
    z.append(random.choice(foo))

df = pd.DataFrame({'x': x, 'y': y, 'z':z})

# Hope to get feedback below
df_hooli = df.query("z=='hooli'")
df_pp = df.query("z=='piedpiper'")

data = [
    go.Scatter(
    x = df_hooli['x'], # assign x as the dataframe column 'x'
    y = df_hooli['y'],
    name = 'hooli'),

    go.Scatter(
    x = df_pp['x'], # assign x as the dataframe column 'x'
    y = df_pp['y'],
    name = 'piedpiper')

]

layout = go.Layout(
    title='scatter plot with pandas',
    yaxis=dict(title='random distribution'),
    xaxis=dict(title='linspace')
)

fig = go.Figure(data=data, layout=layout)

# IPython notebook
py.iplot(fig, filename='pandas/line-plot-title')

1 个答案:

答案 0 :(得分:1)

尝试获取查询结果并在循环中绘图,如下所示:

import random
import plotly.offline as py
py.init_notebook_mode(connected=True)
import plotly.graph_objs as go
import numpy as np
import pandas as pd

N = 500
x = np.linspace(0, 1, N)
y = np.random.randn(N)

z = []
foo = ['apple','amazon','facebook',
       'google','ms','twitter','airbnb','tesla',
      'piedpiper','hooli']
for bar in range(0,N): z.append(random.choice(foo))
df = pd.DataFrame({'x': x, 'y': y, 'z':z})

# get query result and plot it to data list
data = list()
for q in ["z=='hooli'","z=='piedpiper'"]:
    df2 = df.query(q)
    data.append(
       go.Scatter(
        x = df2['x'], # assign x as the dataframe column 'x'
        y = df2['y'],
        name = q.split('==')[1].replace("'",'')))

layout = go.Layout(
    title='scatter plot with pandas',
    yaxis=dict(title='random distribution'),
    xaxis=dict(title='linspace')
)

fig = go.Figure(data=data, layout=layout)
py.plot(fig)
py.iplot(fig, filename='line-plot-title')