【问题标题】:How To Assign Color Values To Vertices Instead of Face Colors in Matplotlib When Plotting a Polygon?绘制多边形时如何在 Matplotlib 中为顶点而不是面颜色分配颜色值?
【发布时间】:2020-06-23 16:57:43
【问题描述】:

我有关于 x、y 和颜色值的数据,它们都是 NxM 数组。通常,当使用 Matplotlib 中的 Polygon 函数时,它需要每个 FACE(这将是一个 1xM 数组)而不是 VERTEX 具有颜色值。但是,我的颜色数据是每个 VERTEX 的。所以,我的问题是有没有办法将我的顶点数据转换为单面颜色数据?或者更好的是,有没有办法使用每个顶点而不是每个面的颜色值来绘制多边形?

注意:我想要的与 MATLAB 的 patch 函数非常相似,您可以使用每个顶点的颜色值。

编辑: 下面,您可以找到一个元素的数据示例。网格由许多元素组成,下面只是其中之一。 X 和 Y 是指坐标,C 是指每个坐标的颜色值。请注意,下面的数组实际上存储为原始代码中的列,因为还有许多其他元素。

import numpy as np

X = np.array([0,0.176611,0.343377,0.366506,0.390424,0.254526,0.117785,0.602218])
Y = np.array([0,0.0248673,0.0436277,0.0834644,0.123043,0.110448,0.0995953,0.0509885])
C = np.array([0.136649,0.114582,0.100576,0.102412,0.102754,0.104971,0.110123,0.120756])

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    要将颜色分配给顶点而不是面,pcolormesh 接受参数shading='gouraud'。这是一个例子:

    from matplotlib import pyplot as plt
    import numpy as np
    
    x = np.linspace(0, 15, 8)
    y = np.linspace(0, 10, 5)
    X, Y = np.meshgrid(x, y)
    Z = np.sin(X) + np.cos(Y)
    
    fig, axs = plt.subplots(ncols=2, figsize=(12, 3))
    cmap = 'plasma'
    axs[0].scatter(X, Y, s=50, c=Z, cmap=cmap, edgecolors='black')
    axs[0].set_title('given vertex colors')
    axs[1].pcolormesh(x, y, Z, shading='gouraud', cmap=cmap)
    axs[1].scatter(X, Y, s=50, c=Z, cmap=cmap, edgecolors='black')
    axs[1].set_title('interpolated vertex colors')
    axs[1].set_xlim(axs[0].get_xlim())
    axs[1].set_ylim(axs[0].get_ylim())
    plt.show()
    

    【讨论】:

    • 虽然这个解决方案在某些方面帮助了我,但我自己的案例仍然需要更多帮助。我要插值的点不会形成这样的矩形。在我的情况下,区域被划分为像这篇文章中的元素:stackoverflow.com/questions/62524882/… 这些元素也可能是三角形,所以我认为我需要一个不涉及向量的解决方案。
    • Matplotlib as tripcolor(...., shading='gouraud') 对不规则三角形网格执行相同的操作(四边形网格可以轻松转换为三角形网格)。确保c=colors 的元素数与点数相同。如果您提供一些玩具数据,则可以更轻松地展示它如何适合您的工作流程。
    • 我分享了一个元素的样本数据(即我在上面分享的帖子中的一个矩形)。也可能有其他数据类型,根据元素类型有 3、4 或 6 个坐标。在我们的例子中,有 8 个坐标,其中 4 个在边缘,另外 4 个在角上。
    • 用你的例子,你可以调用plt.tricontourf(X, Y, C, levels=256)(默认使用'viridis'颜色图)。 tricontourf 在点之间插值(没有输入多边形的概念;在内部它用三角形连接点;您可以通过添加以np.nan 作为颜色值的点来强制打孔)
    • 设置 levels=256 与 gouraud 着色效果相同。您可以选择不同颜色较少的颜色图(默认为'viridis',可能选择cmap='inferno',其他请参阅this doc
    猜你喜欢
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 2014-05-24
    • 2014-12-18
    • 2016-10-27
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多