簡體   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