是否可以轻松修改/创建散景图的自定义散点图标?

问题描述 投票:3回答:1

我对python和散景情节比较陌生。我想要做的是使用散点图来显示风速及其方向。我想使用三角形标记并使用旋转来指示风速。但是,由于散景默认三角形是一个等边三角形,风向实际上会让人感到困惑(你无法分辨哪个是尾部的头部)。

有什么方法可以改变/创建我自己的Isosceles三角形吗?这样我就可以知道哪个是三角形尾部的头部。

这是我的样本:Bokeh Scatter Plot with Rectangular Marker

这里要清楚的是我正在寻找的形状标记的快速草图:Desired Rectangle vs Default Rectangle Marker

EDTI:

这是一个示例数据集。我也使用了J'e建议的箭头。以下是一个示例结果:

Sample Dataset Sample Result

这工作正常,但并不完美。因为我打算嵌入这个图并拉伸它(sizing_mode =“stretch_both”),所以角度会偏离。使用矩形和角度绘制时,我不认为这是一个问题。

python bokeh scatter-plot marker
1个回答
1
投票

API中似乎没有任何内容可以直接执行此操作。使用bokeh.models VeeHead,您可以绘制VeeHead箭头

import numpy as np
from bokeh.plotting import figure, show, output_file
from bokeh.models import ColumnDataSource
from bokeh.models import Arrow, VeeHead

# Create a sin wave of x/y coordinates 
N = 300
x = np.linspace(0, 4*np.pi, N)
y = np.sin(x)

source = ColumnDataSource(data=dict(x=x, y=y))
TOOLS = "pan,wheel_zoom,box_zoom,reset,save"

# create a new plot and add a renderer
p = figure(tools=TOOLS, width=700, height=700, title=None)
p.line('x', 'y', source=source)


for i in range(N-1):
    p.add_layout(Arrow(end=VeeHead(size=25,fill_alpha=0.5), x_start=x[i], y_start=y[i], x_end=x[i+1], y_end=y[i+1])) 
show(p)

VeeHead no Tail

您可以在此示例中添加一个,而不是在第一个示例中几乎没有尾部。请注意,尾部有自己的风格,我没有在这个例子中设置。

import numpy as np
from bokeh.plotting import figure, show, output_file
from bokeh.models import ColumnDataSource
from bokeh.models import Arrow, VeeHead

# prepare some date
N = 300
x = np.linspace(0, 4*np.pi, N)
y = np.sin(x)

source = ColumnDataSource(data=dict(x=x, y=y))
TOOLS = "pan,wheel_zoom,box_zoom,reset,save"

# create a new plot and add a renderer
p = figure(tools=TOOLS, width=700, height=700, title=None)
p.line('x', 'y', source=source)

for i in range(11, N-1):
    m = (y[i]-y[i-1])/(x[i]-x[i-1])
    Y = m*(x[i]-x[i-10]) # not point slope
    p.add_layout(Arrow(end=VeeHead(size=25,fill_alpha=0.5), x_start=x[i-10], y_start=Y, x_end=x[i], y_end=y[i])) 
show(p)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.