【问题标题】:Setting range of a colormap in Matplotlib在 Matplotlib 中设置颜色图的范围
【发布时间】:2022-04-05 02:21:48
【问题描述】:

我正在使用 matplotlib 绘制一个简单的图表:

cm=plt.get_cmap('Blues')

nx.draw_circular(G,
        node_color='White',
        edge_color=range(G.number_of_edges()),
        edge_cmap=cm,
        node_size=900,
        width=4
        )

我想在颜色图“蓝色”上设置一个范围,以删除绘图中不可见的白色。

请帮忙!

抱歉英语不好。

【问题讨论】:

  • draw_circular 是从哪里来的?我在 matplotlib 中看不到它。 node_color='Blue' 会发生什么?
  • @Louis,我认为它来自 networkx 模块。

标签: python graph matplotlib range


【解决方案1】:

范围(或normilization)并不是颜色图的真正特征,但通常作为使用颜色图绘图的函数中的特征来实现。例如,imshow uses vmin and vmax,因此您可以尝试将这些作为关键字与draw_circular 一起使用(我找不到文档),或者norm

除此之外,您还可以根据自己的需要制作具有精确颜色排列的颜色图。有很多关于如何制作自定义颜色图的示例,以及一些可用的不同方法。这里(abcd)是一些可能对您有用的示例。

【讨论】:

    【解决方案2】:

    我在尝试使用不同颜色图绘制数据时遇到了这个问题:

    很难确定哪个白点属于哪个分布。我通过切断颜色图谱中较白的部分解决了这个问题:

    import matplotlib.pyplot as plt
    import numpy as np
    from matplotlib.colors import LinearSegmentedColormap
    
    
    def chop_cmap_frac(cmap: LinearSegmentedColormap, frac: float) -> LinearSegmentedColormap:
        """Chops off the beginning `frac` fraction of a colormap."""
        cmap_as_array = cmap(np.arange(256))
        cmap_as_array = cmap_as_array[int(frac * len(cmap_as_array)):]
        return LinearSegmentedColormap.from_list(cmap.name + f"_frac{frac}", cmap_as_array)
    
    
    cmap1 = plt.get_cmap('Reds')
    cmap2 = plt.get_cmap('Blues')
    
    cmap1 = chop_cmap_frac(cmap1, 0.4)
    cmap2 = chop_cmap_frac(cmap2, 0.4)
    np.random.seed(42)
    n = 50
    xs = np.random.normal(size=n)
    ys = np.random.normal(size=n)
    vals = np.random.uniform(size=n)
    
    plt.scatter(xs, ys, c=vals, cmap=cmap1)
    plt.scatter(ys, xs, c=vals, cmap=cmap2)
    plt.gca().set_facecolor('black')
    plt.colorbar()
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 2016-01-21
      • 1970-01-01
      相关资源
      最近更新 更多