簡體   English   中英

在 matplotlib 中創建顏色編碼的水平條

[英]Creating color-coded horizontal bars in matplotlib

我正在開發一個 QC 工具,以根據多個標准從時間序列中“標記”有問題的數據。 好的數據將被標記為 1,壞數據被標記為 0。我想將包含 0 和 1 值的結果數組顯示為顏色編碼的水平條。

讓我們考慮以下虛擬數組myarray

import numpy as np
import matplotlib.pyplot as plt
mysamples=np.arange(3600)
myarray = np.ones(3600)
myarray[300:500]=0
myarray[1300:1800]=0

我想出了以下解決方案來顯示它:

使用bar的解決方案

fig, axs = plt.subplots(2, gridspec_kw={'height_ratios': [5, 1]})
fig.suptitle('QC flag example 1')
axs[0].plot(mysamples,myarray)
axs[1].bar(mysamples[myarray==1], height=1, linewidth=0, color='green')
axs[1].bar(mysamples[myarray==0], height=1, linewidth=0, color='red')

在此處輸入圖像描述

使用scatter的解決方案

fig, axs = plt.subplots(2, gridspec_kw={'height_ratios': [5, 1]})
fig.suptitle('QC flag example 2')
axs[0].plot(mysamples,myarray)
axs[1].scatter(mysamples[myarray==1],mysamples[myarray==1]*0 , marker='s', color='green')
axs[1].scatter(mysamples[myarray==0], mysamples[myarray==0]*0, marker='s', color='red')

在此處輸入圖像描述

我更喜歡選項 2,因為它允許我 plot 多個 QC 軌道相互疊加,但我仍然認為這是顯示myarray的一種復雜方式。 例如,如果標記大小處理不當,最終可能會生成不連續的條形圖。

是否還有其他 matplotlib function 可以創建這樣的單杠?

注意:我知道plotly有很多選項,例如甘特圖,但目前我更願意堅持使用 matplotlib。

我不確定這有多簡單,但我使用水平條形圖來處理它。 創建一個相同長度的array1,並使用原始數組進行顏色確定。 然后將其堆疊在一個循環過程中,索引為左側 position。

fig, axs = plt.subplots(2, gridspec_kw={'height_ratios': [5, 1]})
fig.suptitle('QC flag example 1')

axs[0].plot(mysamples,myarray)
# axs[1].bar(mysamples[myarray==1], height=1, linewidth=0, color='green')
# axs[1].bar(mysamples[myarray==0], height=1, linewidth=0, color='red')
new_array = [1]*len(myarray)
colors = [('g' if i == 1 else 'r') for i in myarray]
for i,a in enumerate(new_array):
    axs[1].barh(y=0, width=a, height=0.5, left=i, color=colors[i])
x0,x1 = axs[0].get_xlim()
axs[1].set_xlim(x0, x1)

plt.show()

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM