如何在多边形上画圆?

2024-04-25 08:47:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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))

Tags: importadddfmatplotlibfigpltcolax
1条回答
网友
1楼 · 发布于 2024-04-25 08:47:40

你在找^{}。你知道吗

在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值的对象位于具有较低值的对象之上。你知道吗

相关问题 更多 >