作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想绘制如图所示的各种螺旋(一个螺旋在其他螺旋内部)。假设我有三个螺旋(S1、S2 和 S3),我想填充连续螺旋之间的区域,即 S1 和 S2、S2 和 S3 之间的区域,最后是 S3 和 S1 之间的区域。
我尝试了多种方法来解决以下两个问题,但没有成功:
1- 一对螺旋之间的区域应使用插值颜色进行绘制。例如,第一个螺旋(S1)是黑色,第二个螺旋(S2)是灰色,那么S1和S2之间的区域一定是从黑色到灰色的渐变。
2- S3 和 S1 之间的区域没有按照我想要的方式填充。这里,填充的区域是在S1和S3之间,而不是在S3和S1之间。
这是我的代码:
import numpy as np
import matplotlib.pyplot as plt
def create_archimides_spiral(a=0, b=1, num_spirals=10):
"""
Functions that creates an archimides spiral
"""
th = np.linspace(0, num_spirals*np.pi, num_spirals*100) # The higher the number of splits, the greater the quality of each segment
r = a + b*th
x = r * np.cos(th)
y = r * np.sin(th)
return x, y
# create the spirals
x, y = create_archimides_spiral(a=0,b=1)
x1, y1 = create_archimides_spiral(a=2, b=1)
x2, y2 = create_archimides_spiral(a=4, b=1)
fig, ax = plt.subplots(1)
ax.plot(x, y, color='black', linewidth=3)
ax.plot(x1, y1, color='gray', linewidth=3)
ax.plot(x2, y2, color='silver', linewidth=3)
plt.fill(
np.append(x, x1[::-1]),
np.append(y, y1[::-1]), color= "lightgray"
)
plt.fill(
np.append(x1, x2[::-1]),
np.append(y1, y2[::-1]), color= "lightgray"
)
plt.fill_between(x, y, y1, interpolate=True)
plt.fill_between(x1, y, y1, interpolate=True)
ax.set_aspect(1)
plt.show()
这是我得到的数字,但这不是我想要的。
如果有任何帮助,我将不胜感激。
最佳成绩
奥斯卡
最佳答案
我得到了在 S1 和 S3 之间正确填充的解决方案。至于渐变, fill_btween
或 fill_ Betweenx
需要相同的 x 或 y 集,这不是你的情况。对于梯度,@JohanC 的近似值很好。
import numpy as np
import matplotlib.pyplot as plt
def create_archimides_spiral(a=0, b=1, num_spirals=10):
"""
Functions that creates an archimides spiral
"""
th = np.linspace(0, num_spirals*np.pi, num_spirals*100) # The higher the number of splits, the greater the quality of each segment
r = a + b*th
x = r * np.cos(th)
y = r * np.sin(th)
return x, y, r
# create the spirals
x, y, r= create_archimides_spiral(a=0,b=1)
x1, y1, r1 = create_archimides_spiral(a=2, b=1)
x2, y2, r2 = create_archimides_spiral(a=4, b=1)
fig, ax = plt.subplots(1)
ax.plot(x, y, color='black', linewidth=3)
ax.plot(x1, y1, color='gray', linewidth=3)
ax.plot(x2, y2, color='silver', linewidth=3)
ax.fill_between(np.concatenate((x, x1[::-1])), np.concatenate((y, y1[::-1])), color= "red", interpolate=True)
ax.fill(np.concatenate((x1, x2[::-1])), np.concatenate((y1, y2[::-1])), color= "blue")
ax.fill(np.concatenate([x[::-1], x2[0:800]]), np.concatenate([y[::-1], y2[0:800]]), color= "cyan")
ax.set_aspect(1)
构建要填充的多边形时必须小心,仅选择 x2 和 y2 的一部分。
关于python - 用插值颜色填充阿基米德螺线之间的区域 - Matplotlib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63810793/
我是一名优秀的程序员,十分优秀!