[英]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.