我已经玩了一段时间的散景,现在我正处于创建互动情节并在线嵌入它们的步骤(例如,在WordPress的帖子中).
然而,即使我花了一些时间来审查和测试散景网站示例中的代码,我也很难理解curdoc()的目的究竟是什么.为了创建一个带有小部件的散景应用程序似乎是必要的,但是从我在资源中找到的内容来看,我并不十分理解它.
在R中有一个非常好的包.在python中,我能想到的最好的就是这个,使用squarify包(灵感来自关于如何做树图的帖子):
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns # just to have better line color and width
import squarify
# for those using jupyter notebooks
%matplotlib inline
df = pd.DataFrame({
'v1': np.ones(100),
'v2': np.random.randint(1, 4, 100)})
df.sort_values(by='v2', inplace=True)
# color scale
cmap = mpl.cm.Accent
mini, maxi = df['v2'].min(), df['v2'].max()
norm = mpl.colors.Normalize(vmin=mini, vmax=maxi)
colors = [cmap(norm(value)) for value in df['v2']]
# …Run Code Online (Sandbox Code Playgroud) 我有一个垂直堆叠和对齐的数字的多图形散景图.因为我想垂直对齐图形,所以y轴标签旋转为垂直而不是水平.
在某些情况下,Bokeh产生太多的刻度,使得刻度标签完全重叠,使得难以辨认.这是一个例子:
import bokeh.plotting as bp
import numpy as np
y = np.random.uniform(0, 300, 50)
x = np.arange(len(y))
bp.output_file("/tmp/test.html", "test")
plot = bp.figure(plot_width=800, plot_height=200)
plot.yaxis.axis_label_text_font_size = "12pt"
plot.yaxis.major_label_orientation = 'vertical'
plot.line (x,y)
bp.show(plot)
Run Code Online (Sandbox Code Playgroud)
如果没有让渲染器足够聪明以自动生成更少的标签,是否有办法指示要放置在轴上的标签数量?
似乎生成的标签数量与数据的范围有关,就其与10的幂的亲和力而言.
我正在尝试使用Bokeh制作可编辑的DataTable,以便在编辑数据时更新源数据.我从这里开始使用标准的DataTable示例,并将可编辑的kwarg设置为true.这是我在的地方:
from datetime import date
from random import randint
from bokeh.models import ColumnDataSource, Callback
from bokeh.models.widgets import DataTable, DateFormatter, TableColumn
from bokeh.io import output_file, output_notebook, show, vform
output_notebook()
data = dict(dates=[date(2014, 3, i+1) for i in range(10)],
downloads=[randint(0, 100) for i in range(10)])
source = ColumnDataSource(data)
columns = [TableColumn(field="dates", title="Date", formatter=DateFormatter()),
TableColumn(field="downloads", title="Downloads")]
callback = Callback(args=dict(Source=source), code="""
console.log( '#cell edited')""")
data_table = DataTable(source=source, columns=columns, width=400, height=280, editable=True)
data_table.on_change(callback,source)
show(vform(data_table))
Run Code Online (Sandbox Code Playgroud)
这使得一个可编辑的数据表,但我无法弄清楚如何获取回调来更新源数据,或配置源数据,以便它自动执行该操作.我认为有一种方法可以使用ColumnDataSource自动执行此操作,并在尝试尝试编写回调之后.但是看起来DataTable没有回调选项,但奇怪的是它有一个on_change属性.
有谁知道如何做到这一点?
我有一个嵌入在Django应用程序中的散景图.我在django视图中创建绘图并将绘图推送到散景服务器以在我的网页中显示绘图.
#view.py
def view_plot(request):
f=figure()
f.plot(#some data#)
session = push_session(curdoc())
context = {'script': autoload_server(f, session_id=session.id)}
return render_to_response('plot.html', context=context)
Run Code Online (Sandbox Code Playgroud)
一切都很好.现在我想做一个实时图,每次创建一个新的DB-Entry时,应该更新图.我不确定最好的方法是什么.
在网页上使用计时器来询问现在的数据是一个好习惯吗?
或者有没有办法从服务器推送更新,以便每个当前连接的客户端获得更新?
我会非常感谢每一个提示.
非常感谢.
我想在django视图(或模型?)中进行交互式绘图.假设我想使用selection_histogram示例. 我认为Bokeh符合我的需求,因为我有matplot/seaborn,我可以重复使用,而且我不是很擅长javascript.
我可以按照这个例子进行操作:如何将独立的散景图嵌入到django模板中.
据我所知,我需要运行一个散景服务器并使用nginx进行代理
如何将交互式散景图嵌入到django视图中?
我试过这个:
启动散景服务器
bokeh serve --allow-websocket-origin=127.0.0.1:8001 selection_histogram.py
Run Code Online (Sandbox Code Playgroud)
在views.py中更新我的视图
def simple_chart(request):
script = autoload_server(model=None,
app_path="/selection_histogram",
url="http://localhost:5006/")
return render(request, "simple_chart.html", {"the_script": script})
Run Code Online (Sandbox Code Playgroud)
现在,它按预期交互.
有没有办法将一些参数传递给散景应用程序?
任何帮助将不胜感激.问候
我试图在个人网站上静态嵌入散景图,并遇到一些我不理解的行为.基本上,我使用散景生成一个情节如下:
import bokeh.plotting as bplt
import numpy as np
x=np.random.random(100)
y=np.random.random(100)
bplt.output_file("t.html")
plot=bplt.line(x,y)
##the following line refers to the bokeh installed on my home computer
print plot.create_html_snippet(
static_path='/usr/local/lib/python2.7/site-packages/bokeh/server/static/')
##the following line refers to the bokeh installed on my remote computer
#print plot.create_html_snippet(
# static_path='/opt/anaconda/lib/python2.7/site-packages/bokeh/server/static/')
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.这会生成一个看起来像的文件(random garbage).embed.js,并打印一个包含html语法的字符串,我手动将其复制到我正在调用的html文件中testembed.html,我在下面转载:
<html>
<body>
<h2>Simple Embed Example</h2>
<p>This is where my plot should be:</p>
<p>
<!--The next 4 lines are the output of the print statement from the python code-->
<script src="ccbd451a-6995-4dd2-b99c-e4140b362997.embed.js" …Run Code Online (Sandbox Code Playgroud) 我正在尝试从模型中绘制主题可视化.我想做散景协方差实现.
我的数据是:
data 1: index, topics.
data 2: index, topics, weights(use it for color).
Run Code Online (Sandbox Code Playgroud)
主题只是一组单词.
如何将数据提供给散景图以绘制上述数据?从示例中,数据处理不直观.
使用matplot,它看起来像这样.
显然,看到哪个主题对应于每个圆圈在视觉上没有帮助.这是我的matplotlib代码:
x = []
y = []
area = []
for row in joined:
x.append(row['index'])
y.append(row['index'])
#weight.append(row['score'])
area.append(np.pi * (15 * row['score'])**2)
scale_values = 1000
plt.scatter(x, y, s=scale_values*np.array(area), alpha=0.5)
plt.show()
Run Code Online (Sandbox Code Playgroud)
有什么想法/建议?
我用Python库创建了一个Plot Bokeh(参见代码).
from bokeh.plotting import *
figure()
hold()
rect([1,3], [1,1], [1,0.5], [1,0.5])
patch([0,0,4,4], [2,0,0,2], line_color="black", fill_color=None)
show()
Run Code Online (Sandbox Code Playgroud)
如何用matplotlib中的等轴表示方形(具有相同宽度和高度的矩形)和命令axis('equal')?
http://matplotlib.org/examples/pylab_examples/axis_equal_demo.html
我看到可以选择更改绘图的宽度和高度,或者定义轴范围来解决这个问题,但我认为应该有一个更聪明的选择.
注意:我正在使用Python v.2.7.8和Bokeh v.0.6.1.
我有以下小例子脚本使用numpy和bokeh:
import numpy as np
import bokeh.plotting as bp
from bokeh.objects import HoverTool
bp.output_file('test.html')
fig = bp.figure(tools="reset,hover")
x = np.linspace(0,2*np.pi)
y1 = np.sin(x)
y2 = np.cos(x)
s1 = fig.scatter(x=x,y=y1,color='#0000ff',size=10,legend='sine')
s1.select(dict(type=HoverTool)).tooltips = {"x":"$x", "y":"$y"}
s2 = fig.scatter(x=x,y=y2,color='#ff0000',size=10,legend='cosine')
s2.select(dict(type=HoverTool)).tooltips = {"x":"$x", "y":"$y"}
bp.show()
Run Code Online (Sandbox Code Playgroud)
问题是悬停工具仅适用于余弦曲线,但不适用于正弦曲线.
我知道一个选项是绘制两个系列,并更改余弦数据点的颜色:
import numpy as np
import bokeh.plotting as bp
from bokeh.objects import HoverTool
bp.output_file('test.html')
fig = bp.figure(tools="reset,hover")
x = np.linspace(0,2*np.pi)
y1 = np.sin(x)
y2 = np.cos(x)
x = np.array([x,x]).flatten()
y = np.array([y1,y2]).flatten()
blue = np.array('#0000ff').flatten()
red = np.array('#ff0000').flatten() …Run Code Online (Sandbox Code Playgroud) bokeh ×10
python ×9
django ×2
matplotlib ×2
plot ×2
axes ×1
axis ×1
nginx ×1
python-2.7 ×1
seaborn ×1
waffle-chart ×1