首页 > 解决方案 > 使用 Python 绘制一个圆圈并为其中的区域着色?

问题描述

我正在使用以下代码绘制以原点为中心的单位半径圆:

fig =plt.figure(figsize=(10,7))
x = np.linspace(-5.0, 5.0, 100)
y = np.linspace(-5.0, 5.0, 100)
X, Y = np.meshgrid(x,y)
F = X**2 + Y**2 - 1
plt.contour(X,Y,F,[0])
plt.show()

我现在想用蓝色遮蔽圆圈内的区域。怎么可能做到这一点?

另外,我如何将 x 和 y 轴添加到该图中并标记这些轴?

标签: pythonmatplotlibplot

解决方案


要对轮廓区域进行着色,您可以使用plt.contourf(). 您需要提供至少两个在其间着色的级别,例如使用非常小的值和零。该函数接受一个明确的颜色列表(或可以使用颜色图)。

ax.spines['left'].set_position('center')可以将 y 轴设置在 x 的零点,而不是默认放置在边界处。ax.set_ylabel('y', loc='top')将 y 标签设置在顶部(默认位于中心)。

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(10, 7))
x = np.linspace(-5.0, 5.0, 100)
y = np.linspace(-5.0, 5.0, 100)
X, Y = np.meshgrid(x, y)
F = X ** 2 + Y ** 2 - 1
plt.contourf(X, Y, F, [-100, 0], colors=['dodgerblue'])
ax = plt.gca()
ax.spines['left'].set_position('center')
ax.spines['bottom'].set_position('center')
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.set_xlabel('x', loc='right')
ax.set_ylabel('y', loc='top')
plt.show()

填充等高线图

请注意,Python 的符号数学包sympy无需创建网格即可执行类似的操作。

from sympy import plot_implicit
from sympy.abc import X, Y

plot1 = plot_implicit(X ** 2 + Y ** 2 < 1)

sympy plot_implicit circle

要更改 sympy 图,您可以访问axvia plot1._backend.ax[0],或使用 matplotlibplt.gca()plt.gcf(),如下所示:

from sympy import plot_implicit
from sympy.abc import X, Y

plot1 = plot_implicit(X ** 2 + Y ** 2 < 1)

import matplotlib.pyplot as plt

ax = plt.gca()
ax.set_xlabel('new x label', ha='right')
ax.set_ylabel('new y label', ha='right')
ax.set_aspect('equal') # use same transformation for x and y, so circles aren't deformed
fig = plt.gcf()
fig.set_size_inches(8, 8)
fig.savefig('test_circle.png', dpi=100)

推荐阅读