问题描述
我正在尝试制作一个非常基本的连接4点的形状。我有一个目前看起来像this的情节。但是,我似乎找不到能适当生成连接所有四个点的椭圆的模块。这四个点都将有所不同(它们是测试的结果,旨在显示某人具有的每个属性的数量)。我发现有许多模块可以创建矩形,椭圆形或圆形,但是这些形状都不能始终与这些点对齐。是否有更通用的模块可以将所有四个点连接成更像椭圆的形状?
我还看到了一些可以在两点之间创建弧的模块,我认为这可能是有用的,我可以对所有四个点都这样做。当我尝试执行此操作时,它需要与弧角有关的输入,而我不知道该如何计算。非常感谢您提供任何帮助!
import matplotlib.pyplot as plt
import numpy as np
# Axes go from 0 to 100%
fig,ax = plt.subplots(figsize=(15,12))
x = [-40,-20,20,20]
y = [-40,-20]
plt.scatter(x,y)
ax.fill_between([-100,0],-100,alpha=0.3,color='#1F98D0') # blue
ax.fill_between([0,100],color='#F9D307') # yellow
ax.fill_between([-100,100,color='#F38D25') # orange
ax.fill_between([0,color='#DA383D') # red
plt.axis('off')
plt.show()
解决方法
以下方法通过4个点创建interpolating spline,以创建“基本形式”。一个优点是,当有3个或4个以上的点时,它也可以工作。
WITH TB1 AS(SELECT TB_INDEX FROM TB0 WHERE TB_INDEX=10),TB2 AS (SELECT TB_INDEX,COUNT(ORDERS))TOTAL FROM ORDERS INNER JOIN TB1 ON TB1.TB_INDEX=ORDERS.TB_INDEX)
UPDATE T SET T.STATUS='A'
FROM TB2,TB0 T WHERE T.TB_INDEX=TB2.TB_INDEX
TB2.TOTAL>30
当椭圆形无法放置或太大时,同样的方法也适用:
请注意,to uniquely define an ellipse需要5个点(但并不是每5个随机点都可以容纳一个椭圆)。如果您确实需要椭圆形,那么找到最小的1到4点非常麻烦。
这是方法的开始,该方法将椭圆定义为到两个焦点(import matplotlib.pyplot as plt
from scipy import interpolate
import numpy as np
fig,ax = plt.subplots(figsize=(15,12))
x = [-40,-20,20,20]
y = [-40,-20]
ax.scatter(x,y,zorder=3)
ax.fill_between([-100,0],-100,alpha=0.3,color='#1F98D0') #blue
ax.fill_between([0,100],color='#F9D307') #yellow
ax.fill_between([-100,100,color='#F38D25') #orange
ax.fill_between([0,color='#DA383D') #red
tck,u = interpolate.splprep([x + x[:1],y + y[:1]],s=0,per=True)
unew = np.linspace(0,1,100)
basic_form = interpolate.splev(unew,tck)
ax.plot(basic_form[0],basic_form[1],color='lime',lw=2)
ax.fill(basic_form[0],alpha=0.3)
ax.axis('off')
plt.show()
和(x0,y0)
)的距离之和为常数(x1,y1)
的点。然后可以搜索存在解决方案的最小a
。
a