簡體   English   中英

在matplotlib中使用fill或fill_between使用pyplot繪制甜甜圈

[英]plot a donut with fill or fill_between use pyplot in matplotlib

我想畫一個甜甜圈,我的劇本是

import numpy as np
import matplotlib.pyplot as plt
pi,sin,cos = np.pi,np.sin,np.cos

r1 = 1
r2 = 2

theta = np.linspace(0,2*pi,36)

x1 = r1*cos(theta)
y1 = r1*sin(theta)

x2 = r2*cos(theta)
y2 = r2*sin(theta)

如何獲得紅色填充區域的甜甜圈?

您可以在閉合曲線中遍歷區域的邊界,並使用fill方法填充此封閉區域內的區域:

import numpy as np
import matplotlib.pyplot as plt

n, radii = 50, [.7, .95]
theta = np.linspace(0, 2*np.pi, n, endpoint=True)
xs = np.outer(radii, np.cos(theta))
ys = np.outer(radii, np.sin(theta))

# in order to have a closed area, the circles
# should be traversed in opposite directions
xs[1,:] = xs[1,::-1]
ys[1,:] = ys[1,::-1]

ax = plt.subplot(111, aspect='equal')
ax.fill(np.ravel(xs), np.ravel(ys), edgecolor='#348ABD')

plt.show()

圈

這可以很容易地應用於任何形狀,例如,圓形內部或外部的五邊形:

五角大樓

您可以通過分別繪制上半部和下半部來完成此操作:

import numpy as np
import matplotlib.pyplot as plt

inner = 5.
outer = 10.

x = np.linspace(-outer, outer, 1000, endpoint=True)

yO = outer*np.sin(np.arccos(x/outer)) # x-axis values -> outer circle
yI = inner*np.sin(np.arccos(x/inner)) # x-axis values -> inner circle (with nan's beyond circle)
yI[np.isnan(yI)] = 0.                 # yI now looks like a boulder hat, meeting yO at the outer points

ax = plt.subplot(111)
ax.fill_between(x, yI, yO, color="red")
ax.fill_between(x, -yO, -yI, color="red")

plt.show()

在此輸入圖像描述

或者您可以使用極坐標,但這是否有益取決於更廣泛的背景:

import numpy as np
import matplotlib.pyplot as plt

theta = np.linspace(0., 2.*np.pi, 80, endpoint=True)
ax = plt.subplot(111, polar=True)
ax.fill_between(theta, 5., 10., color="red")

plt.show()

在此輸入圖像描述

這有點像黑客,但以下工作:

import numpy as np
import matplotlib.pyplot as plt
pi,sin,cos = np.pi,np.sin,np.cos

r1 = 1
r2 = 2

theta = np.linspace(0,2*pi,36)

x1 = r1*cos(theta)
y1 = r1*sin(theta)

x2 = r2*cos(theta)
y2 = r2*sin(theta)

fig, ax = plt.subplots()

ax.fill_between(x2, -y2, y2, color='red')
ax.fill_between(x1, y1, -y1, color='white')

plt.show()

它用紅色繪制甜甜圈的整個區域,然后繪制白色的中央“洞”。

示例圖

tom10給出的答案是10;)但是如果你想定義圓(圓環)原點很簡單,只需在x,yI,yO和-yO和-yI中添加位置x,y,如下所示:

...
pos = [4,2]
ax.fill_between(x+pos[0], yI+pos[1], yO+pos[1], color=color)
ax.fill_between(x+pos[0], -yO+pos[1], -yI+pos[1], color=color)
...

REF示例: https//pastebin.com/8Ew4Vthb

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM