我对python和bokeh绘图比较陌生。我正在尝试使用散点图显示风速及其方向。我想使用三角形标记并使用旋转来指示风速。但是,由于散景默认三角形是等边三角形,因此风向实际上会造成混乱(您无法分辨哪个是头,哪个是尾)。
有什么方法可以更改/创建自己的等腰三角形吗?这样我才能分辨出哪个头是三角形中的尾巴。
这是我所拥有的样本: Bokeh Scatter Plot with Rectangular Marker
这里要清楚的是我正在寻找哪种形状标记的快速草图: Desired Rectangle vs Default Rectangle Marker
EDTI:
这是示例数据集。我也使用了J'e建议的箭头。这是一个示例结果:
这可以,但是还不完美。因为我打算嵌入此图并对其进行拉伸(sizing_mode =“ stretch_both”),所以这些角度将看起来不明显。使用矩形和角度绘制时,我认为这不是问题。
答案 0 :(得分: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)
您并非像第一个示例那样几乎没有尾巴,而是在此示例中添加了一个尾巴。请注意,尾巴具有自己的样式,在此示例中未设置。
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)