python中matplotlib條件背景顏色的實現(xiàn)
如何根據(jù)圖表中沒有的變量更改折線圖的背景顏色?例如,如果我有以下數(shù)據(jù)幀:
import numpy as np
import pandas as pd
dates = pd.date_range('20000101', periods=800)
df = pd.DataFrame(index=dates)
df['A'] = np.cumsum(np.random.randn(800))
df['B'] = np.random.randint(-1,2,size=800)
如果我做df.A的折線圖,如何根據(jù)該時間點'B'列的值更改背景顏色?
例如,如果在該日期B = 1,則該日期的背景為綠色。
如果B = 0,則該日期的背景應(yīng)為黃色。
如果B = -1那么背景那個日期應(yīng)該是紅色的。
添加我最初考慮使用axvline的解決方法,但@jakevdp回答正是看起來因為不需要for循環(huán):首先需要添加一個'i'列作為計數(shù)器,然后整個代碼看起來像:
dates = pd.date_range('20000101', periods=800)
df = pd.DataFrame(index=dates)
df['A'] = np.cumsum(np.random.randn(800))
df['B'] = np.random.randint(-1,2,size=800)
df['i'] = range(1,801)
# getting the row where those values are true wit the 'i' value
zeros = df[df['B']== 0]['i']
pos_1 = df[df['B']==1]['i']
neg_1 = df[df['B']==-1]['i']
ax = df.A.plot()
for x in zeros:
ax.axvline(df.index[x], color='y',linewidth=5,alpha=0.03)
for x in pos_1:
ax.axvline(df.index[x], color='g',linewidth=5,alpha=0.03)
for x in neg_1:
ax.axvline(df.index[x], color='r',linewidth=5,alpha=0.03)
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。
相關(guān)文章
Python使用smtplib模塊發(fā)送電子郵件的流程詳解
Python中自帶的smtplib模塊可以進行基于SMTP協(xié)議的郵件操作,這里我們便總結(jié)了Python使用smtplib模塊發(fā)送電子郵件的流程詳解,并對一些常見的問題給出了解決方法:2016-06-06
Python使用multiprocessing實現(xiàn)多進程
當(dāng)我們工作中涉及到處理大量數(shù)據(jù)、并行計算或并發(fā)任務(wù)時,Python的multiprocessing模塊是一個強大而實用的工具,在本文中,我們將探索如何使用multiprocessing模塊實現(xiàn)多進程編程,將介紹進程池的概念和用法,需要的朋友可以參考下2024-10-10

