Python 如何在多边形的顶部放置圆?

Python 如何在多边形的顶部放置圆?,python,matplotlib,Python,Matplotlib,我使用matplotlib以以下方式生成图像: fig = plt.figure() ax = fig.add_subplot(111) ax.fill(border[0],border[1], color='g', linewidth=1, fill=True, alpha = 0.5) patches = [] for x1,y1,r in zip(x, y, radii): circle = Circle((x1,y1), r) patches.append(circle)

我使用matplotlib以以下方式生成图像:

fig = plt.figure()
ax = fig.add_subplot(111)
ax.fill(border[0],border[1], color='g', linewidth=1, fill=True, alpha = 0.5)
patches = []
for x1,y1,r in zip(x, y, radii):
    circle = Circle((x1,y1), r)
    patches.append(circle)
p = PatchCollection(patches, cmap='cool', alpha=1.0)
p.set_array(c)
ax.add_collection(p)
plt.colorbar(p)
plt.savefig(fig_name)
我想要的是一个多边形(由它的边界给出)和这个多边形顶部的彩色圆圈。但是,我得到了圆顶部的多边形

这很奇怪,因为我先绘制多边形,然后在绘图中添加圆

有人知道为什么会发生这种情况,以及如何解决这个问题吗

已添加

根据要求,以下是完整的工作示例:

import pandas

import matplotlib
import matplotlib.pyplot as plt
from matplotlib.collections import PatchCollection
from matplotlib.patches import Circle, Polygon
import numpy as np

def plot_xyc(df, x_col, y_col, c_col, radius, fig_name, title, zrange):


    resolution = 50

    x = df[x_col]
    y = df[y_col]
    c = df[c_col]

    x0 = (max(x) + min(x))/2.0
    y0 = (max(y) + min(y))/2.0

    dx = (max(x) - min(x))
    dy = (max(y) - min(y))

    delta = max(dx, dy)

    radii   = [delta*radius for i in range(len(x))]

    fig = plt.figure()
    plt.title(title)

    ax = fig.add_subplot(111)


    border = ([-3, 3, 3, -3], [-3, -3, 3, 3])

    ax.fill(border[0],border[1], color='g', linewidth=1, fill=True, alpha = 1.0)

    patches = []
    for x1,y1,r in zip(x, y, radii):
        circle = Circle((x1,y1), r)
        patches.append(circle)


    patches.append(Circle((-100,-100), r))
    patches.append(Circle((-100,-100), r))

    p = PatchCollection(patches, cmap='cool', alpha=1.0)

    p.set_array(c)
    max_ind = max(c.index)
    c.set_value(max_ind + 1, min(zrange))
    c.set_value(max_ind + 2, max(zrange))


    plt.xlim([x0 - delta/2.0 - 0.05*delta, x0 + delta/2.0  + 0.05*delta])
    plt.ylim([y0 - delta/2.0 - 0.05*delta, y0 + delta/2.0  + 0.05*delta])

    ax.add_collection(p)


    plt.colorbar(p)

    plt.savefig(fig_name)

if __name__ == '__main__':

    df = pandas.DataFrame({'x':[1,2,3,4], 'y':[4,3,2,1], 'z':[1,1,2,2]})

    plot_xyc(df, 'x', 'y', 'z', 0.1, 'test2.png', 'My Titlle', (0.0, 3.0))
你在找我

在matplotlib中,所有附加参数都只传递给类继承人
zorder
是类的
kwarg
,因此您只需要确保在某个时候它得到
zorder

在你的例子中,你可以用两种方法来做

请将其添加到此处:

ax.fill(border[0],border[1], color='g', linewidth=1, fill=True, alpha = 1.0, zorder=1)
或在此:

p = PatchCollection(patches, cmap='cool', alpha=1.0, zorder=2)

或者如果你愿意,两者都可以。具有较高
zorder
的对象位于具有较低值的对象之上。

您能否提供一个完整的工作示例?