【matplotlib】可視化實戰(zhàn)1——繪制帶顏色帶的折線圖

需求

客戶樣圖

上面是客戶給的樣圖先舷,從上面的樣圖中我們可以總結出如下需求:

  1. 繪圖樣式包含散點圖和折線圖;
  2. 繪圖包含虛線網格甫窟;
  3. 繪圖包含圖例密浑,且字體樣式是斜體;
  4. 有一個垂直顏色帶粗井;
  5. 下方的刻度線標簽替換成日期尔破;

實現

第一步,使用 pandas 讀取數據浇衬,讀取完畢之后直接調用 plot 方法進行繪圖懒构,對數據進行初步探查;

數據探查

相比于樣圖耘擂,我們缺少了圖例胆剧、網格、顏色帶和散點圖(客戶說可以不做)。接下來針對需求進一步分析:

網格
這個的需求肯定是調用 Axes.grid() 方法進行實現秩霍,注意它的線形是 -.;顏色是灰色(gray)鸽照;

圖例
調用 Axes.legend() 方法進行實現矮燎,這里需要注意一下赔癌,legend() 方法并沒有提供 fontstyle 這個關鍵字參數,該方法只支持調整字號峡谊,并不支持設置字體樣式靖苇,所以我們得另辟蹊徑班缰,columns = [f'${i}$' for i in columns] 這是我的實現方法埠忘,通過將正常字符轉換成 Latex 字符的方式完成圖例文字的斜體樣式馒索,由于我們自定義了圖例文字绰上,那么就必須傳遞 handler,由于客戶給的數據只繪制了折線圖蜈块,所以可以調用 Axes.lines 方法獲得畫布中所有的 Line2D 實例百揭,這就是我們需要的 handler。最后如果不傳遞 ncols 這個關鍵字參數器一,那么所有的圖例會被放在一列,因此還需要設置 ncols=3渺贤,圖例默認的擺放位置是 best,這與需求不符丑掺,因此我們還要傳遞 loc='lower center'進行更改述雾。

顏色帶
第一反應這個需求的實現肯定使用區(qū)域填充,直接調用 Axes.fill_between() 方法進行區(qū)域填充即可唆缴。填充的顏色使用的是 skyblue面徽,建議大家盡量用字符串表示顏色趟紊,這樣看起來更加直觀碰酝,顏色帶的范圍可以通過全局變量顏色帶寬度進行控制送爸。

其他
最后就設置一下軸標簽和文字大小就行了袭厂。完整的代碼如下:

import matplotlib.pyplot as plt  
import pandas as pd  
import numpy as np  
  
# 默認帶狀圖顏色  
DEFAULT_BETWEEN_COLOR = "skyblue"  
# 默認抽樣點數  
DEFAULT_SAMPLE = 4  
# 默認顏色帶范圍  
DEFAULT_SAMPLE_SIZE = 1  
# 默認Y軸標簽  
DEFAULT_TITLE = "NDVI"  
  
df = pd.read_csv("pfree.csv", index_col=0)  
columns = df.columns  
columns = [f'${i}$' for i in columns]  
M, N = df.shape  
  
df.plot()  
# 獲取最大值  
df_max = df.max().max()  
# 獲取最小值  
df_min = df.min().min()  
  
  
# 獲取Axes對象  
axes = plt.gca()  
  
# 畫網格  
axes.grid(True, ls='-.', color='gray')  
handler = axes.lines  
# 畫圖例  
axes.legend(loc='lower center', ncols=3, fontsize=10, handles=handler, labels=columns)  
# 畫文本  
  
  
between_lines = [(i, i + DEFAULT_SAMPLE_SIZE) for i in range(1, M, DEFAULT_SAMPLE)]  
for lines in between_lines:  
    x1 = lines[0]  
    x2 = lines[1]  
    r = np.linspace(x1, x2, 1000)  
    # 畫帶狀圖  
    axes.fill_between(r, 0, 0.5,  
                      color=f'{DEFAULT_BETWEEN_COLOR}', alpha=0.3)  
  
# 設置Y軸顯示范圍  
axes.set_ylim([0, 0.419])  
# 設置Y軸標簽  
axes.set_ylabel(DEFAULT_TITLE, fontsize=18)  
  
plt.show()

畫圖效果如下:

完整繪圖

文中難免會出現一些描述不當之處(盡管我已反復檢查多次)纹磺,歡迎在留言區(qū)指正,相關的知識點也可進行分享橄杨,希望大家都能有所收獲C刂ⅰ!如果覺得我的文章寫得還行历极,不妨支持一下。你的每一個轉發(fā)衷佃、關注、點贊、評論都是對我最大的支持锄列!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市邻邮,隨后出現的幾起案子竣况,更是在濱河造成了極大的恐慌,老刑警劉巖筒严,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丹泉,死亡現場離奇詭異鸭蛙,居然都是意外死亡摹恨,警方通過查閱死者的電腦和手機晒哄,發(fā)現死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門孝赫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來较木,“玉大人寒锚,你說我怎么就攤上這事刹前。” “怎么了雌桑?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵喇喉,是天一觀的道長。 經常有香客問我校坑,道長拣技,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任耍目,我火速辦了婚禮膏斤,結果婚禮上,老公的妹妹穿的比我還像新娘邪驮。我一直安慰自己莫辨,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沮榜,像睡著了一般盘榨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蟆融,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天草巡,我揣著相機與錄音,去河邊找鬼型酥。 笑死山憨,一個胖子當著我的面吹牛,可吹牛的內容都是我干的弥喉。 我是一名探鬼主播萍歉,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼档桃!你這毒婦竟也來了枪孩?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤藻肄,失蹤者是張志新(化名)和其女友劉穎蔑舞,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體嘹屯,經...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡攻询,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了州弟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钧栖。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖婆翔,靈堂內的尸體忽然破棺而出拯杠,到底是詐尸還是另有隱情,我是刑警寧澤啃奴,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布潭陪,位于F島的核電站,受9級特大地震影響最蕾,放射性物質發(fā)生泄漏依溯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一瘟则、第九天 我趴在偏房一處隱蔽的房頂上張望黎炉。 院中可真熱鬧,春花似錦醋拧、人聲如沸慷嗜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洪添。三九已至垦页,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間干奢,已是汗流浹背痊焊。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留忿峻,地道東北人薄啥。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像逛尚,于是被迫代替她去往敵國和親垄惧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容