我试图通过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')
答案 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')