繁体   English   中英

cmap到Matplotlib中的rgba

[英]cmap to rgba in Matplotlib

我有一个具体的实现问题,涉及使用色映射(cmap)提取映射出的数据并将其转换为rgba值。 本质上,我有一堆数据,我想创建一个errorbar()图,其中点以及误差条本身都由其他值的大小进行着色(具体来说,可以说它对卡方的贡献某些模型的拟合度)。 假设我有一个名为D的(N,4)数组,其中前两列是X和Y数据,第三列是误差线的值,最后一列是其对卡方函数的贡献。

我该如何做:1)将卡方贡献值的范围映射到cmap,其次,2)如何从这些值中获取rgba值,以便遍历errorbar()函数以绘制我希望的图情节?

这实际上可能是有帮助的( http://matplotlib.org/api/cm_api.html ),但是我找不到有关如何使用ScalarMappable()的任何示例或其他信息(它确实具有to_rgba()方法) 。

谢谢!

您可以通过在值上的matplotlib.cm调用对象,将标量值映射到颜色图。 值应介于0到1之间。因此,要获得一些卡方分布数据(我将随机生成)的RBGA值,我将执行以下操作:

chisq = np.random.chisquare(4, 8)
chisq -= chisq.min()
chisq /= chisq.max()
errorbar_colors = cm.winter(chisq)

您可以减去最小值,然后除以所需的最大值,而不必用最低和最高实际值来开始和结束色标。

现在, errorbar_colors将是winter颜色图中的(8, 4) errorbar_colors (8, 4) RGBA值数组:

array([[ 0.        ,  0.7372549 ,  0.63137255,  1.        ],
       [ 0.        ,  0.7372549 ,  0.63137255,  1.        ],
       [ 0.        ,  0.4745098 ,  0.7627451 ,  1.        ],
       [ 0.        ,  1.        ,  0.5       ,  1.        ],
       [ 0.        ,  0.36078431,  0.81960784,  1.        ],
       [ 0.        ,  0.47843137,  0.76078431,  1.        ],
       [ 0.        ,  0.        ,  1.        ,  1.        ],
       [ 0.        ,  0.48627451,  0.75686275,  1.        ]])

要绘制此图形,您可以遍历颜色和数据点并绘制误差线:

heights = np.random.randn(8)
sem = .4

for i, (height, color) in enumerate(zip(heights, errorbar_colors)):
    plt.plot([i, i], [height - sem, height + sem], c=color, lw=3)
plt.plot(heights, marker="o", ms=12, color=".3")

在此处输入图片说明

但是,没有内置的matplotlib颜色图非常适合此任务。 为了进行一些改进,您可以使用seaborn生成可用于对线条进行着色的顺序调色板:

import numpy as np
import seaborn
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

chisq = np.random.chisquare(4, 8)
chisq -= chisq.min()
chisq /= chisq.max()

cmap = ListedColormap(seaborn.color_palette("GnBu_d"))
errorbar_colors = cmap(chisq)

heights = np.random.randn(8)
sem = .4

for i, (height, color) in enumerate(zip(heights, errorbar_colors)):
    plt.plot([i, i], [height - sem, height + sem], c=color, lw=3)
plt.plot(heights, marker="o", ms=12, color=".3")

在此处输入图片说明

但是即使在这里,我仍然怀疑这是否是传达您观点的最好方法。 我不完全知道您的数据是什么样子,但是我建议您进行两次绘图,其中一次使用您将在此处绘制的因变量,第二次使用卡方统计作为因变量。 另外,如果您对误差线的大小与卡方值之间的关系感兴趣,我可以直接使用散点图进行绘制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM