2017-01-04 1 views
1

콜백을 사용하여 GMapPlot에 추가 한 패치 글리프에 사용 된 색상을 변경할 수있는 버튼을 보케트 플롯에 추가하려고합니다.python bokeh; GMapPlot의 CustomJS 콜백으로 패치 색상을 변경하십시오.

현재 내가 가지고있는 것은 :

from bokeh.io import output_file, show 
from bokeh.models import GMapPlot, GMapOptions, ColumnDataSource, DataRange1d, Patch 

map_options = GMapOptions(lat=-41.281909, lng=174.775993, zoom=13) 
p = GMapPlot(x_range=DataRange1d(), y_range=DataRange1d(), map_options=map_options, api_key=API_KEY) 
lats = [-41.281909, -41.281044, -41.294968] 
longs = [174.775993, 174.761222, 174.764916] 
source = ColumnDataSource(data=dict(lats=lats, longs=longs)) 
patch = Patch(x='longs', y='lats', fill_color='red', fill_alpha=0.2) 
p.add_glyph(source, patch) 
output_file('gmapplot.html') 
show(p) 

나는 버튼을 사용하여 콜백을 통해 그 fill_color을 편집 할 수 있도록하고 싶습니다. 나는 this response을 살리려고했으나 제대로 작동하지 못했습니다.

도움을 주시면 감사하겠습니다.

추신. 이 코드를 실행하려는 경우 자신의 Google지도 API 키를 사용해야합니다. 하나의 here을 얻을 수 있습니다.

답변

0

다른 응답 (모든 원이 자신의 색깔을 가질 수 있도록)를 field 속성을 변경하여 열 데이터 원본의 색상의 다른 을 참조하는 원의 무리의 fill_color을 변경합니다. 당신이 한 번 Patch을 위해 단지 하나의 색상 값을 설정하려고하고 있기 때문에, 당신은 아마 내가 당신이 거기 trigger을해야 할 수도 있습니다 가능 추측 field

cb = CustomJS(args=dict(patch=patch), code =""" 
    patch.glyph.fill_color.value = 'blue'; 
""") 

대신 value을 설정하려는하지만 난 그렇게 생각하지 않습니다.

patch 및글리프는 다른 모든 글리프와 마찬가지로 벡터화 된 속성을 실제로 지원하지 않기 때문에 API에서 약간 기발한 두 글리프입니다.


업데이트 : 아마도 완전한 예가 분명 할 것입니다. 또한 FYI trigger이 필요합니다. 현재 버전 (0.12.4) 이상이어야합니다.

from bokeh.io import output_file, show 
from bokeh.layouts import column 
from bokeh.models import CustomJS, Select 
from bokeh.plotting import figure 

plot = figure() 

r = plot.patch(x=[1, 2, 3, 4], y=[1, 2, 2, 1], 
       fill_color="firebrick", fill_alpha=0.6, line_color="black") 


select = Select(title="Select colors", value="firebrick", 
       options = ["firebrick","navy", "olive"]) 

callback = CustomJS(args=dict(renderer=r, select=select), code =""" 
    renderer.glyph.fill_color.value = select.value; 
    renderer.trigger('change') 
""") 
select.callback = callback 

output_file("foo.html") 

show(column(select, plot)) 

패치가 빨간색으로 시작됩니다. 사용자 인터페이스에서 Select 위젯을 변경하면 패치의 색이 업데이트됩니다 :

enter image description here

그건 당신이 다음 요구하고 부드럽게 질문이 명확하지 않은 경우 제안 내가 무슨 아니라면.

+0

답변 해 주셔서 감사합니다. 나는 실제로 색 변경을 프로그램 적으로 제어 할 수 있기를 원하기 때문에 질문하기 전에 약간의 질문을 간소화했다고 생각합니다. ColumnDataSource에 색상 목록을 추가해야합니까? 또한 여러 패치가있는 경우 콜백을 사용하여 어떻게 변경합니까? – user1425706

+0

나는 내가 이해할 지 모르겠다. 나는 당신이 프로그램 적으로 그것을 어떻게 변경할 수 있는지를 보여주었습니다. 여러분이 첨부 할 수있는'CustomJS' 콜백에서 보았습니다. 보케 (Bokeh)'버튼. 제 의견은 패치가 하나의 패치 만 그리는 것이 었습니다. 그래서 한 번에 많은 원을 그릴 수있는'circle'과는 달리'field' 대신에'value'를 설정하기를 원합니다. – bigreddot

관련 문제