如何在matplotlib图中的特定区域上绘制矩形

时间:2012-10-22 14:39:01

标签: python matplotlib

我有一个图表,根据一些数据计算,在matplotlib中绘制。我想在该图的全局最大值周围绘制一个矩形区域。我尝试了plt.axhspan,,但是当我调用plt.show()

时,似乎没有显示矩形

那么,如何在matplotlib图上绘制矩形区域?谢谢!

2 个答案:

答案 0 :(得分:46)

最可能的原因是您在调用axhspan时使用了x参数的数据单元。来自the function's docs(我的重点):

  

y coords在数据单元中, x coords在轴上(相对0-1)   单元

因此,任何向左伸展0或1的矩形都只是简单地绘制出来。

一个简单的替代方法可能是向您的轴添加Rectangle(例如,通过plt.gcaadd_patch); Rectangle使用两个维度的数据单位。以下将添加一个宽度为&的灰色矩形。高度1以(2,3)为中心:

from matplotlib.patches import Rectangle
someX, someY = 2, 3
currentAxis = plt.gca()
currentAxis.add_patch(Rectangle((someX - .5, someY - .5), 1, 1, facecolor="grey"))

答案 1 :(得分:0)

这是一个示例,用于演示在散点图上绘制矩形边界框:

import matplotlib.pyplot as plt
import matplotlib.patches as patches
import numpy as np

data_set = 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.69411766529083252, 0.3490196168422699, 0.15686275064945221, 1.0)
color2 = (0.65098041296005249, 0.80784314870834351, 0.89019608497619629, 1.0)
colormap = np.array([color1, color2])
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(
    x=[data_set[:, 0]],
    y=[data_set[:, 1]],
    c=colormap[categories],
    marker='o',
    alpha=0.9
)

margin = .1
min_f0, max_f0 = min(data_set[10:, 0]) - margin, max(data_set[10:, 0]) + margin
min_f1, max_f1 = min(data_set[10:, 1]) - margin, max(data_set[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()

出局:

add a bounding box over a scatter-plot