我想绘制一个基于两个焦点f1和f2以及第三个点的椭圆。但是由于某种原因,对于我计算出的给定角度,椭圆的方向无法正确显示。
我缺少基本的东西吗?为什么bokeh无法以给定的pi / 4角度使椭圆取向?
这是我的示例代码:
import numpy as np
from bokeh.io import output_notebook, show
from bokeh.plotting import figure
from bokeh.models import Range1d
output_notebook()
f1 = np.array([0,0])
f2 = np.array([3,3])
point = np.array([1,3])
tools = "hover, box_zoom, undo, crosshair"
p = figure(tools=tools)
p.circle(f1[0], f1[1], radius = 0.05, alpha=0.5)
p.circle(f2[0], f2[1], radius = 0.05, alpha=0.5)
p.circle(point[0], point[1], radius = 0.05, color='red')
center = (f2 - f1)/2 + f1
print(center)
angle = np.arctan2((f2 - f1)[1], (f2 - f1)[0])
print(np.rad2deg(angle))
# minor axis
a = (np.linalg.norm(f2-point) + np.linalg.norm(f1-point))/2
# major axis
c = np.linalg.norm((f2 - f1)/2)
# b = np.sqrt(a**2 - c**2)/2
b = 0.2
p.circle(center[0], center[1], radius = 0.05, color='orange')
p.ellipse(x=center[0], y=center[1], width=2*a, height=2*b, angle=angle, fill_color="yellow", fill_alpha = 0.4)
p.x_range = Range1d(-2, 4)
p.y_range = Range1d(-2, 4)
show(p)
答案 0 :(得分:2)
这是一个尚未解决的非常棘手的问题:https://github.com/bokeh/bokeh/issues/7965
tl; dr:该角度基本上使用与数据范围比率不对应的屏幕像素比率。在您的特定情况下,它是工具栏和轴“挤压”主绘图区域。如果将它们删除,则该区域将是完美的正方形,并且角度将是正确的。
答案 1 :(得分:0)
我遇到了类似的问题,并通过更改轴范围来解决它。这没有任何意义,但对于这个例子,当像这样扩展 y_range 时,椭圆是对齐的:
from
p.y_range = Range1d(-2, 4)
to
p.y_range = Range1d(-2, 4.35)