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