Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 显示散射半径的博克第二个图例_Python_Bokeh - Fatal编程技术网

Python 显示散射半径的博克第二个图例

Python 显示散射半径的博克第二个图例,python,bokeh,Python,Bokeh,我有一个使用极坐标投影的博克散点图(Bokeh==1.0.4)。点的半径对应于ColumnDataSource中的RadiusSize,颜色对应于DepthClass 我创建了第二个“虚拟”散点图,以获得对应于填充颜色(深度>图例)的图例。我想要第二个与半径相对应的图例。radiusize数据是介于1到5之间的整数。我正在寻找第二个传说非常类似(见公认的答案) 以下是我的相关绘图代码: def make_scatter(event_data): ''' Create a polar sc

我有一个使用极坐标投影的博克散点图(
Bokeh==1.0.4
)。点的半径对应于ColumnDataSource中的
RadiusSize
,颜色对应于
DepthClass

我创建了第二个“虚拟”散点图,以获得对应于
填充颜色
深度>图例
)的图例。我想要第二个与半径相对应的图例。
radiusize
数据是介于1到5之间的整数。我正在寻找第二个传说非常类似(见公认的答案)

以下是我的相关绘图代码:

def make_scatter(event_data):
  '''
  Create a polar scatter figure

  Parameters
  ----------
  event_data: Pandas dataframe

  Returns
  -------
  p: Bokeh Figure object
  '''

  cds = create_cds(event_data)

  p = figure(
      title="",
      name="scatter_fig",
      width=600, height=600,
      tools='',
  )

  # Project data into polar coordinates
  # customjs from bryevdv (https://github.com/bokeh/bokeh/issues/657)
  polarx = CustomJSTransform(args=dict(source=cds), v_func='''
  const new_xs = new Array(source.data.elev_project_vectors.length)
  for(var i = 0; i < new_xs.length; i++) {
      new_xs[i] = source.data.elev_project_vectors[i] * Math.sin(source.data.elev_angles[i] )
  }
  return new_xs
  ''')

  polary = CustomJSTransform(args=dict(source=cds), v_func='''
  const new_ys = new Array(source.data.elev_project_vectors.length)
  for(var i = 0; i < new_ys.length; i++) {
      new_ys[i] = source.data.elev_project_vectors[i] * Math.cos(source.data.elev_angles[i] )
  }
  return new_ys
  ''')

  event_scatter = p.scatter(
    x=transform('elev_project_vectors', polarx),
    y=transform('elev_project_vectors', polary),
    radius='RadiusSize',
    fill_color='DepthClass', fill_alpha=1.0,
    name='event_scatter',
    source=cds)

  # This is a dummy glyph just to have consistent colors for a custom legend
  event_scatter_dummy = p.scatter(
    x=[1,2,3],
    y=[1,2,3],
    radius=0,
    fill_color=['green','yellow','red'], fill_alpha=1.0,
    name='event_scatter_dummy',
    )

  depth_legend = Legend(items=[
    LegendItem(label='crown < 12"', renderers=[event_scatter_dummy], index=0),
    LegendItem(label='crown 12-44"', renderers=[event_scatter_dummy], index=1),
    LegendItem(label='crown > 44"', renderers=[event_scatter_dummy], index=2),
    ])
  p.add_layout(depth_legend)

  return p
def生成散点(事件数据):
'''
创建极坐标散点图
参数
----------
事件_数据:熊猫数据帧
退换商品
-------
p:Bokeh图形对象
'''
CD=创建CD(事件数据)
p=数字(
title=“”,
name=“散布图”,
宽度=600,高度=600,
工具=“”,
)
#将数据投影到极坐标中
#来自bryevdv的customjs(https://github.com/bokeh/bokeh/issues/657)
polarx=CustomJSTransform(args=dict(source=cds),v_func=''
const new_xs=新数组(source.data.elev_project_vectors.length)
对于(变量i=0;i
下面是当前Bokeh图形的屏幕截图,其中有一个对应于
填充颜色的图例

理想情况下,第二个图例将有标签(R1、R2、R3、R4、R5)以及相应范围内不断增加的半径圆。如何获得第二个图例?

我能够通过创建一个虚拟不可见圆,然后创建并叠加五个单独的呈现虚拟圆的
图例
实例来解决这一问题。每个图例都需要使用
位置
label_standoff
以正确对齐。然后,我循环遍历圆形图示符并调整其大小,使其与打印数据的半径相对应

这不是一个理想的解决方案,因为图例与实际数据无关,但它可以直观地完成任务

以下是博克代码:

  event_radius_dummy_1 = p.circle(
    1,1,
    radius=0,
    fill_alpha=0.0, line_color='black', 
    name='event_radius_dummy_1'
    )

  event_legend1 = Legend(items=[
    LegendItem(label='R1', renderers=[event_radius_dummy_1])],
    location=(20,554), label_standoff=10, label_height=3)

  event_legend2 = Legend(items=[
    LegendItem(label='R2', renderers=[event_radius_dummy_1])],
    location=(14,532), label_standoff=5)

  event_legend3 = Legend(items=[
    LegendItem(label='R3', renderers=[event_radius_dummy_1])],
    location=(8,507), label_standoff=0)

  event_legend4 = Legend(items=[
    LegendItem(label='R4', renderers=[event_radius_dummy_1])],
    location=(2,479), label_standoff=-5)

  event_legend5 = Legend(items=[
    LegendItem(label='R5', renderers=[event_radius_dummy_1])],
    location=(-4,447), label_standoff=-10)

  event_legend_list = [event_legend1,event_legend2,event_legend3,event_legend4,event_legend5]
  for legend in event_legend_list:
    p.add_layout(legend)

  size_list = [15,26,37,48,59]
  index_list = [1,2,3,4,5]

  for index, size in zip(index_list, size_list):
    p.legend[index].glyph_height = size
    p.legend[index].glyph_width = size
    p.legend[index].padding = 0
    p.legend[index].margin = 0
    p.legend[index].border_line_alpha = 0
    p.legend[index].background_fill_alpha = 0
结果数字: