我希望有人能指出我正确的方向。 python datavis格局现在已经变得非常庞大,而且有很多选项让我在实现这一目标的最佳方式上有点失落。
我有一个xarray数据集(但它很容易就是一个pandas数据帧或numpy数组列表)。
我有3列,A,B和C.它们包含40个数据点。
我想绘制A与B +比例* C的散点图,其中比例是从交互式滑块确定的。
更高级的版本会有一个下拉列表,你可以选择一组不同的3列,但我稍后会担心这一点。
所有这一点的警告是,我希望它在线和互动供其他人使用。
似乎有这么多的选择:
任何想法或建议将不胜感激。
确实有很多选择,我不确定什么是最好的,但我使用散景很多,我很高兴。以下示例可以帮助您入门。要启动它,请在保存脚本的目录中打开一个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是默认的散景端口)。如果您不想通过PC提供服务,可以订阅像Heroku这样的云服务:example。