Как установить радиус круга рассеяния в голограммах? - PullRequest
1 голос
/ 23 февраля 2020

Простой вопрос - в боке вы можете рисовать круги с радиусом, а не с размером, так что круги корректируются при увеличении или уменьшении. Можно ли сделать это с помощью рассеяния на основе holoviews - в настоящее время у него нет опции, которую я вижу для установки радиуса, и я не мог понять, как предоставить его другим способом (например, рендерингом). Вероятно, ошибка пользователя, поэтому заранее извиняюсь, большое спасибо.

import holoviews as hv
hv.extension('bokeh')
from bokeh.plotting import figure, show
x=(1,2,3)
y=(1,2,3)
p=figure()
p.scatter(x, y, radius=0.2)
show(p) # bokeh plot working as expected
scatter=hv.Scatter((x,y)).opts(marker="circle", size=20)
scatter # holoviews plot, cannot code "radius" for code above - causes error.

1 Ответ

0 голосов
/ 24 февраля 2020

Все hv.Scatter графики основаны на маркере Scatter Боке, который имеет этот раздел в строке документации:

Note that circles drawn with `Scatter` conform to the standard Marker
interface, and can only vary by size (in screen units) and *not* by radius
(in data units). If you need to control circles by radius in data units,
you should use the Circle glyph directly.

Это означает, что вы не можете использовать hv.Scatter, вам нужно использовать что-то еще:

import holoviews as hv
import param
from holoviews.element.chart import Chart
from holoviews.plotting.bokeh import PointPlot

hv.extension('bokeh')

x = (1, 2, 3)
y = (1, 2, 3)


class Circle(Chart):
    group = param.String(default='Circle', constant=True)

    size = param.Integer()


class CirclePlot(PointPlot):
    _plot_methods = dict(single='circle', batched='circle')

    style_opts = ['radius' if so == 'size' else so for so in PointPlot.style_opts if so != 'marker']


hv.Store.register({Circle: CirclePlot}, 'bokeh')

scatter = Circle((x, y)).opts(radius=0.5)
...