【问题标题】:Fill polygons with multiple colors in python matplotlib在 python matplotlib 中用多种颜色填充多边形
【发布时间】:2014-12-11 21:07:05
【问题描述】:

我正在使用 matplotlib 绘制多边形补丁,并希望用特定颜色填充每个多边形的部分,即制作一个饼图,但形状为三角形、正方形或六边形。有没有办法改变饼图的形状或表示多边形的多种填充颜色?

谢谢!

更新:这是我的意思的模拟:

【问题讨论】:

  • 如果您可以准确地勾勒出您正在寻找的内容(即使它是类似 MS 油漆的 hack),我们也许可以建议一个自定义解决方案。您的数据是如何排列的?

标签: python-2.7 matplotlib


【解决方案1】:

您可以创建一个Matplotlib collection,然后传递一个颜色数组/列表以用于绘图。

考虑以下示例。首先得到一些虚拟形状。

import matplotlib.path as mpath
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np

def get_tri(xoff=0, yoff=0, up=1):

    verts = [(0.0 + xoff, 0.0 + yoff),
             (0.5 + xoff, 1.0 * up + yoff),
             (1.0 + xoff, 0.0 + yoff),
             (0.0 + xoff, 0.0 + yoff)]

    p = mpath.Path(verts, [mpath.Path.MOVETO] + (len(verts)-1)*[mpath.Path.LINETO])

    return p

shapes = [get_tri(xoff=x, yoff=y, up=o) for x,y,o in [(0.0, 0,  1),
                                                    (1.0, 0,  1),
                                                    (0.5, 1,  1),
                                                    (0.5, 1, -1)]]

从颜色图中获取颜色:

cmap = plt.cm.RdYlBu_r
colors = cmap(np.linspace(0,1, len(shapes)))

并绘制形状:

fig, ax = plt.subplots(subplot_kw={'aspect': 1.0})

coll = mpl.collections.PathCollection(shapes, facecolor=colors, linewidth=3)

ax.add_collection(coll)
ax.autoscale_view()

请注意,由于我将Paths 用于我的形状,因此我也在使用PathCollection。如果您使用Polygons(或其他),您还应该使用适当类型的集合,例如PolyCollection

所以不同颜色的绘制很容易,棘手的部分可能是获取路径/多边形。如果您已经拥有它们,您可以将它们放在一个列表中以创建集合。

【讨论】:

  • 这不是我想要的,但它超级酷!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 2013-04-20
相关资源
最近更新 更多