numpy - Matplotlib 剪辑或修剪线和多边形
问题描述
如何有效地“修剪”或“剪辑”或删除紫色框外的红线部分?numpy 面具有什么技巧吗?
使用 Python 3.8.3 和 Matplotlib
x = [10,15.5,12.5,7.5,5,10]
y = [15,10,5,5,10,15]
fig, ax = plt.subplots()
ax.fill_between(x,y, facecolor="blue", alpha=0.25)
ax.axis("equal")
myinterval = 1.5
xvals = np.arange(min(x), max(x)+1, myinterval)
for i in xvals:
ax.plot([i,i], [0,20], color='red')
解决方案
这不是使用 numpy 掩码完成的。如果我理解正确,这是代码:
fig, ax = plt.subplots()
x = [10,15.5,12.5,7.5,5,10]
y = [15,10,5,5,10,15]
ax.fill_between(x,y, facecolor="blue", alpha=0.25)
ax.axis("equal")
myinterval = 1.5
xvals = np.arange(min(x), max(x)+1, myinterval)
def generate_equation(x, y):
# y = mx + b
# b = y - mx
left = []
right = []
M = []
B = []
for i in range(len(x)-1):
m = ((y[i+1] - y[i]) / (x[i+1] - x[i]))
b = y[i+1] - m*x[i+1]
M.append(m)
B.append(b)
left.append(min(x[i], x[i+1]))
right.append(max(x[i], x[i+1]))
return M, B, left, right
M, B, left, right = generate_equation(np.array(x), np.array(y))
for i in range(len(xvals)):
ylim = []
for j in range(len(M)):
if xvals[i] >= left[j] and xvals[i] <= right[j]:
Y = M[j] * xvals[i] + B[j]
ylim.append(Y)
ax.vlines(xvals[i], min(ylim), max(ylim), 'r')
输出:
推荐阅读
- angular - Firebase Angular : How to retrieve and display data?
- webkit - Playwright webkit 无法运行 WebAssembly
- bash - 通配符 * 在 bash 脚本中未按预期方式运行
- html - max-height: calc(( 100vh - 80px ) , 560px) 有什么作用?
- java - 从访问处理程序中删除值
- testing - 如何使用包含元数据数组的 CLI 运行 TestCafe 测试
- git - 文件超出了 git 的大小,即使它已缩小到限制以下
- sql - 选择后从前10名中选择
- excel - 在 Excel 中的多行上多次提取两个字符之间的文本
- c++ - 如何在 C++ 中使用类模板?