gpt4 book ai didi

python - 用插值颜色填充阿基米德螺线之间的区域 - Matplotlib

转载 作者:行者123 更新时间:2023-12-02 02:39:45 25 4
gpt4 key购买 nike

我想绘制如图所示的各种螺旋(一个螺旋在其他螺旋内部)。假设我有三个螺旋(S1、S2 和 S3),我想填充连续螺旋之间的区域,即 S1 和 S2、S2 和 S3 之间的区域,最后是 S3 和 S1 之间的区域。

Three spirals

我尝试了多种方法来解决以下两个问题,但没有成功:

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()

这是我得到的数字,但这不是我想要的。

Filled areas

如果有任何帮助,我将不胜感激。

最佳成绩

奥斯卡

最佳答案

我得到了在 S1 和 S3 之间正确填充的解决方案。至于渐变, fill_btweenfill_ 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 的一部分。

enter image description here

关于python - 用插值颜色填充阿基米德螺线之间的区域 - Matplotlib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63810793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com