Как лучше всего создать простой, интерактивный, совместный сюжет с python? - PullRequest
0 голосов
/ 15 февраля 2019

Я надеюсь, что кто-то может указать мне правильное направление.Ландшафт данных питона теперь стал огромным, и есть так много вариантов, что я немного растерялся из-за того, что лучший способ достичь этого.

У меня есть набор данных xarray (но это легко может быть пандафрейм данных или список массивов NumPy).

У меня есть 3 столбца, A, B и C. Они содержат 40 точек данных.

Я хочу построить график рассеяния A против B+ scale * C, где масштаб определяется с помощью интерактивного ползунка.

В более продвинутой версии этого будет раскрывающийся список, в котором вы можете выбрать другой набор из 3 столбцов, но об этом чуть позже.1009 *

Предостережение по поводу всего этого заключается в том, что я хотел бы, чтобы он был онлайн и интерактивным для других пользователей.

Кажется, что вариантов так много:

  • Jupyter (я не пользуюсь ноутбуками, поэтому я не очень хорошо с ними знаком, но с mybinder я предполагаю, что это легко сделать)
  • Plotly
  • Bokeh Server
  • pyviz.org (это действительно интересный вариант, но, опять же, может показаться, что вариантов для этого очень много)

Буду очень признателен за любые мысли или советы.

1 Ответ

0 голосов
/ 17 февраля 2019

Есть действительно много вариантов, и я не уверен, что лучше, но я часто использую боке, и я рад этому.Приведенный ниже пример поможет вам начать.Чтобы запустить это, откройте cmd в каталоге, где вы сохраните скрипт и запустите "bokeh serve script.py --show --allow-websocket-origin = *".

from bokeh.plotting import figure
from bokeh.io import curdoc
from bokeh.models.widgets import Slider
from bokeh.models import Row,ColumnDataSource

#create the starting data
x=[0,1,2,3,4,5,6,7,8]
y_noise=[1,2,2.5,3,3.5,6,5,7,8]
slope=1 #set the starting value of the slope
intercept=0 #set the line to go through 0, you can change this later
y= [slope*i + intercept  for i in x]#create the y data via a list comprehension

# create a plot
fig=figure() #create a figure
source=ColumnDataSource(dict(x=x, y=y)) #the data destined for the figure
fig.circle(x,y_noise)#add some datapoints to the plot
fig.line('x','y',source=source,color='red')#add a line to the figure

#create a slider and update the graph source data when it changes
def updateSlope(attrname, old, new):
    print(str(new)+" is the new slider value")
    y = [float(new)*i + intercept  for i in x]
    source.data = dict(x=x, y=y)   
slider = Slider(title="slope", value=slope, start=0.0, end=2.0,step=0.1)
slider.on_change('value', updateSlope)

layout=Row(fig,slider)#put figure and slider next to eachother
curdoc().add_root(layout)#serve it via "bokeh serve slider.py --show --allow-websocket-origin=*"

allow-websocket-origin = * - разрешить другим пользователям обращаться к серверу и видеть график.Http будет http://yourPCservername:5006/ (5006 - это порт bokeh по умолчанию).Если вы не хотите обслуживать со своего компьютера, вы можете подписаться на облачный сервис, например Heroku: пример .

...