gpt4 book ai didi

matplotlib - 在 Matplotlib 中为圆圈/补丁的交点着色

转载 作者:行者123 更新时间:2023-12-03 15:05:15 24 4
gpt4 key购买 nike

以下代码:

# in ipython notebook, enable inline plotting with:
# %pylab inline --no-import-all
import matplotlib.pyplot as plt

# create some circles
circle1 = plt.Circle((-.5,0), 1, color='r', alpha=.2)
circle2 = plt.Circle(( .5,0), 1, color='b', alpha=.2)

# add them to the plot (bad form to use ;, but saving space)
# and control the display a bit
ax = plt.gca()
ax.add_artist(circle1); ax.add_artist(circle2)
ax.set_xlim(-2, 2); ax.set_ylim(-2, 2)
ax.set_aspect('equal')

# display it
plt.plot()

产生以下情节:

VennishDiagram

我想指定四个区域的颜色(1)背景(当前为白色),(2 和 3)每个单独的事件(非重叠区域,当前为蓝色和红色),以及(4)交叉事件(目前混合为紫色)。例如,我可以将它们着色为红色、绿色、蓝色、黄色 - 或者 - 我可以给它们四个不同的、精确指定的灰度值(后者更有可能)。 [颜色将根据底层数据的特征生成。]

我特别不想使用 alpha 混合来“推断”交叉点中的颜色。我需要明确控制所有四个区域的颜色。

我可以想到一些策略来解决这个问题:
  • 要求 mpl 提取组成三个不同颜色的图形区域的“原始”补丁对象(并执行类似操作以对背景进行操作),然后为它们着色。
  • 给定圆圈,手动计算它们的交点并为该交点着色(以某种方式)。逐点进行似乎很难看。

  • 谢谢!

    最佳答案

    我不是 100% 确定,但我认为 matplotlib没有与多边形相交的功能。但是你可以使用 shapely :

    import shapely.geometry as sg
    import matplotlib.pyplot as plt
    import descartes

    # create the circles with shapely
    a = sg.Point(-.5,0).buffer(1.)
    b = sg.Point(0.5,0).buffer(1.)

    # compute the 3 parts
    left = a.difference(b)
    right = b.difference(a)
    middle = a.intersection(b)

    # use descartes to create the matplotlib patches
    ax = plt.gca()
    ax.add_patch(descartes.PolygonPatch(left, fc='b', ec='k', alpha=0.2))
    ax.add_patch(descartes.PolygonPatch(right, fc='r', ec='k', alpha=0.2))
    ax.add_patch(descartes.PolygonPatch(middle, fc='g', ec='k', alpha=0.2))

    # control display
    ax.set_xlim(-2, 2); ax.set_ylim(-2, 2)
    ax.set_aspect('equal')
    plt.show()

    enter image description here

    关于matplotlib - 在 Matplotlib 中为圆圈/补丁的交点着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27947054/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com