您可以通过调用值为matplotlib.cm
中的对象将标量值映射到颜色映射。该值应该在0和1之间骗因此,要获得,RGBA值一些卡方分布的数据(我将随机产生),我会做:
chisq = np.random.chisquare(4, 8)
chisq -= chisq.min()
chisq /= chisq.max()
errorbar_colors = cm.winter(chisq)
而是具有色标开始和以最小和最大实际值结束时,可以减去最小值并除以所需的最大值。
现在errorbar_colors
将是一个(8, 4)
阵列RGBA值从winter
颜色表:
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. ]])
要绘制这样,你可以遍历的颜色和数据点,绘制errorbars:
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")
但是,我怀疑,这将是最好的方式以表达您的观点。我不确切知道你的数据是什么样的,但我会建议制作两张图,其中一张带有因变量,你将在这里绘图,另一张以卡方统计量作为因变量。或者,如果您对误差线的大小和卡方值之间的关系感兴趣,我会直接用散点图进行绘图。
优秀的回应!感谢这篇文章。我最终想出了另一种方法来做到这一点。 – astromax