Я не могу отобразить график с помощью python datashader

Я скачал и установил DataSheder, используя следующие шаги:

git clone https://github.com/bokeh/datashader.git  
cd datashader  
conda install -c bokeh --file requirements.txt  
python setup.py install

После этого я запустил код, используя терминал, такой как `python data.py, но график не отображается; ничего не отображается.

Я не уверен, что выполнил правильные шаги здесь, может кто-нибудь помочь мне отобразить графики? Вот мой код:

import pandas as pd
import numpy as np
import xarray as xr
import datashader as ds
import datashader.glyphs
import datashader.transfer_functions as tf
from collections import OrderedDict

np.random.seed(1)
num=10000

dists = {cat: pd.DataFrame(dict(x=np.random.normal(x,s,num),
                            y=np.random.normal(y,s,num),
                            val=val,cat=cat))
     for x,y,s,val,cat in 
     [(2,2,0.01,10,"d1"), (2,-2,0.1,20,"d2"), (-2,-2,0.5,30,"d3"), (-2,2,1.0,40,"d4"), (0,0,3,50,"d5")]}

df = pd.concat(dists,ignore_index=True)
df["cat"]=df["cat"].astype("category")
df.tail()

tf.shade(ds.Canvas().points(df,'x','y'))
glyph = ds.glyphs.Point('x', 'y')
canvas = ds.Canvas(plot_width=200, plot_height=200, x_range=(-8,8)y_range=(-8,8))
from datashader import reductions
reduction = reductions.count()

from datashader.core import bypixel
agg = bypixel(df, canvas, glyph, reduction)
agg
canvas.points(df, 'x', 'y', agg=reductions.count())
tf.shade(canvas.points(df,'x','y',agg=reductions.count()))
tf.shade(canvas.points(df,'x','y',agg=reductions.any()))
tf.shade(canvas.points(df,'x','y',agg=reductions.mean('y')))
tf.shade(50-canvas.points(df,'x','y',agg=reductions.mean('val')))
agg  = canvas.points(df, 'x', 'y')
tf.shade(agg.where(agg>=np.percentile(agg,99)))
tf.shade(np.sin(agg))
aggc = canvas.points(df, 'x', 'y', ds.count_cat('cat'))
aggc
tf.shade(aggc.sel(cat='d3'))
agg_d3_d5=aggc.sel(cat=['d3', 'd5']).sum(dim='cat')
tf.shade(agg_d3_d5)

2 ответа

Решение

Я не пробовал ваш код, но там нет ничего, что могло бы отобразить изображение. Каждый вызов shade() создает изображение в памяти, но тут ничего не поделаешь. Если бы вы работали в среде ноутбука Jupyter и вызов shade() был последним элементом в ячейке, он отображался бы автоматически, но обычное приглашение Python не имеет такой поддержки "расширенного отображения". Таким образом, вы можете либо сохранить его в файл изображения на диске (используя, например, utils / export_image), либо вы можете присвоить результат shade() переменной, а затем передать его Bokeh, Matplotlib или другому графику, как вам удобнее. Но вы должны что-то сделать с изображением, если хотите его увидеть.

Таким образом, я смог создать сюжет одного из tf.shade в вашем коде.

      from datashader.utils import export_image
img = tf.shade(canvas.points(df,'x','y',agg=reductions.count()))
export_image(img=img, filename='test1', fmt=".png",  export_path=".")

Это сюжет в test1.png

Другие вопросы по тегам