我有一个使用matplotlib绘制的图表,根据一些数据计算而来。我想在这个图表上绘制一个矩形区域,该区域应该包含全局最大值。我尝试了
那么,如何在matplotlib图表上绘制矩形区域呢?谢谢!
plt.axhspan
,但是当我调用plt.show()
时,这个矩形并没有出现在图表中。那么,如何在matplotlib图表上绘制矩形区域呢?谢谢!
plt.axhspan
,但是当我调用plt.show()
时,这个矩形并没有出现在图表中。y坐标以数据单位表示,x坐标以轴(相对于0-1)单位表示。
所以任何跨越0左侧或1右侧的矩形都会简单地绘制在图之外。
一个简单的替代方法可能是在轴上添加一个Rectangle
(例如通过plt.gca
和add_patch
添加); Rectangle
对两个维度都使用数据单位。以下代码将在(2,3)处添加一个宽度和高度均为1的灰色矩形:
from matplotlib.patches import Rectangle
import matplotlib.pyplot as plt
fig = plt.figure()
plt.xlim(0, 10)
plt.ylim(0, 12)
someX, someY = 2, 5
currentAxis = plt.gca()
currentAxis.add_patch(Rectangle((someX - .5, someY - .5), 4, 6, facecolor="grey"))
facecolor
currentAxis.add_patch(Rectangle((someX - .5, someY - .5), 4, 6, facecolor="none", ec='k', lw=2))
下面是一个示例,演示如何在散点图上绘制一个矩形边框框出:
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import numpy as np
data = np.array([
[.9, .9], [.85, 2.1], [1.2, 1.], [2.1, .95], [3., 1.1],
[3.9, .7], [4., 1.4], [4.2, 1.8], [2., 2.3], [3., 2.3],
[1.5, 1.8], [2., 1.5], [2.2, 2.], [2.6, 1.7], [2.7, 1.85]
])
categories = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1])
color1 = (0.69, 0.34, 0.15, 1.0)
color2 = (0.65, 0.80, 0.89, 1.0)
colormap = np.array([color1, color2])
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(
x=[data[:, 0]],
y=[data[:, 1]],
c=colormap[categories],
marker='o', alpha=0.9)
margin = .1
min_f0, max_f0 = min(data[10:, 0]) - margin, max(data[10:, 0]) + margin
min_f1, max_f1 = min(data[10:, 1]) - margin, max(data[10:, 1]) + margin
width = max_f0 - min_f0
height = max_f1 - min_f1
ax.add_patch(
patches.Rectangle(
xy=(min_f0, min_f1), # point of origin.
width=width, height=height, linewidth=1,
color='red', fill=False))
plt.show()
输出: