Как я могу заставить мою карту боке появляться в моем приложении Django? - PullRequest
2 голосов
/ 09 апреля 2019

Я использовал блокнот Jupyter, чтобы сделать некоторые визуализации, используя мой CSV-файл. Мне нужно показать эту карту в моем веб-приложении на Django, но я не знаю, как это сделать.

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

import bokeh 
import pandas as pd
from bokeh.io import output_notebook, show
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource, HoverTool
from bokeh.transform import linear_cmap
from bokeh.palettes import Spectral6, RdYlGn, viridis, Plasma256, RdYlGn10, YlOrRd4, Reds9
from bokeh.tile_providers import CARTODBPOSITRON_RETINA
from pygeotile.point import Point
output_notebook()
%matplotlib inline

pred = r'path'
pred = pd.read_csv(pred)

for index, row in pred.iterrows():
        point = Point.from_latitude_longitude(latitude=row['Latitude'], longitude=row['Longitude'])
        pred.at[index,'x'] = point.meters[0]
        pred.at[index,'y'] = point.meters[1]
        pred.at[index,'size'] = 15 # int(row[bnf]/100)

p = figure(plot_width=900, plot_height=400, 
           x_axis_type="mercator", 
           y_axis_type="mercator",
           x_range=(-928267, -573633), 
           y_range=(7168390, 7422161))
p.add_tile(CARTODBPOSITRON_RETINA)

mapper = linear_cmap(field_name='type', palette=Spectral6,low=0 ,high=1)

source = ColumnDataSource(pred_crime)
p.circle(x='x', y='y', source=source, size='size', fill_color=mapper, line_alpha=0.5, line_color='black')
p.add_tools(HoverTool(tooltips=[("type","Type")]))
show(p)

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

1 Ответ

2 голосов
/ 09 апреля 2019

Это должно работать для вас. Поместите index.html в каталог templates.

index.html

<!DOCTYPE html>
<html lang='en'>
    <head>
        {{ resources | safe }}
        <title>testing bokeh...</title>
    </head>  
    <body>
        {{ div | safe }}
        {{ script | safe }}
    </body>
</html>

django_app.py

import pandas as pd
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource, HoverTool
from bokeh.transform import linear_cmap
from bokeh.palettes import Spectral6, RdYlGn, viridis, Plasma256, RdYlGn10, YlOrRd4, Reds9
from bokeh.tile_providers import CARTODBPOSITRON_RETINA
from pygeotile.point import Point
from bokeh.embed import components
from bokeh.resources import INLINE
from django.shortcuts import render_to_response

#output_notebook()
#%matplotlib inline

pred = r'path'
pred = pd.read_csv(pred)

for index, row in pred.iterrows():
        point = Point.from_latitude_longitude(latitude=row['Latitude'], longitude=row['Longitude'])
        pred.at[index,'x'] = point.meters[0]
        pred.at[index,'y'] = point.meters[1]
        pred.at[index,'size'] = 15 # int(row[bnf]/100)

p = figure(plot_width=900, plot_height=400, 
           x_axis_type="mercator", 
           y_axis_type="mercator",
           x_range=(-928267, -573633), 
           y_range=(7168390, 7422161))
p.add_tile(CARTODBPOSITRON_RETINA)

mapper = linear_cmap(field_name='type', palette=Spectral6,low=0 ,high=1)

source = ColumnDataSource(pred_crime)
p.circle(x='x', y='y', source=source, size='size', fill_color=mapper, line_alpha=0.5, line_color='black')
p.add_tools(HoverTool(tooltips=[("type","Type")]))
script, div = components(p)
return render_to_response('index.html', {'resources' = INLINE.render(), 'script': script, 'div': div})
...