我們最初認識matplotlib裡的圖表是折線圖,不過折線圖相對比較簡單,可以講的內容實際已經講得差不多了。所以我們就從柱狀圖開始。
柱狀圖主要用來描繪離散變量。什麼叫離散變量呢?就是誰跟誰都不挨著。之前我們以時間為X軸進行作圖,時間就是一個連續變量,因為每一個時間值都是有先後關係,可以連起來的。但如果我們想做一個在某一天每支股票的漲跌幅的圖,“每支股票”能夠有先後關係嗎,能夠連起來嗎?顯然不能。所以股票的類型就是一個離散變量。
所以想要製作一個柱狀圖,使用Pandas的DataFrame是再方便不過的了,因為DataFrame本身的行標籤或列標籤就可以是離散值:
這裡有個需要注意的地方。有些人通常喜歡把離散變量作為數據的列,但bar方法並不能接受這樣的數據,必須把離散變量作為行才能傳入bar方法,所以我們在生成DataFrame對其進行了轉置。
圖雖然做出來了但是看起來太醜了,我們可以調整柱子的寬度(在x、y值後邊的參數)、顏色(color參數)、透明度(alpha參數)、對齊方式(align參數)、填充樣式(hatch參數)、邊緣顏色(edge_color參數)、標籤(label參數):
當然,柱狀圖單純地比較一組離散變量並不能體現處它的優勢。更多的是用來展現這組離散變量在另一維度上的不同。比如我們想比較2020年肉菜蛋奶的價格和2021年的肉菜蛋奶的價格,用柱狀圖就非常合適,這樣的柱狀圖被稱為簇狀柱狀圖,特點是一堆數據按照某個維度分好組,排排站,比高高。
這是個什麼情況?兩張圖疊到一起了嗎?
這算是matplotlib的一個缺點了,它不能自動地把兩組數據排列均勻,需要我們去設置數據的位置,讓一個數據往左移一點,一個數據往右移一點。但要去設置數據位置就又引發了一個問題:我們的x軸是離散變量,離散變量怎麼左移右移?
沒辦法了,我們只能把x軸設為連續變量,再將座標軸的值改為我們的標籤。這裡還是希望matplotlib能優化一下這種情況。
我們的離散變量有四個值,那我們就可以生成四個數的array:
在創建條形圖的時候,我們可以把第一組數據左移一點,第二組數據右移一點。對於兩組數據,如果移動的是柱子寬度的一般,那麼移動之後就正好是貼在一起的樣子:
最後,我們需要把x軸的值設為剛才的array,並且把座標軸標籤設為離散變量的值:
有些時候離散變量的值是可以累加的。我們在這一期使用Pandas給自己記了記賬。如果我們把各種賬目都進行分類,那各類開銷的錢數就是可以累加的。而在上一個例子中肉菜蛋奶的價格則是不可累加的(忽然想起了把兩杯50℃的水倒到一個杯子裡得到一杯100℃的水的笑話。)面對這種可以累加的變量,我們可以使用堆積柱狀圖來描述數據:
其實在matplotlib裡做堆積柱狀圖反而比簇狀柱狀圖要簡單,只需要我們設置bottom參數。需要注意的是bottom參數需要的是堆積出來的值,我們要把墊底的數值累加起來才行。
堆積柱狀圖在比較了各離散變量之後,還能夠比較離散變量值的總和。但有時候我們更關注的是各離散變量在總值之中的佔比,這時候就可以使用百分比堆積柱狀圖了。
雖然是一種新的圖表,但其實我們已經把能夠製作這種圖表的方法都學到了,具體怎麼做大家就自己動動腦筋去思考一下吧!
水平的柱狀圖被稱為條形圖,創建條形圖使用的是barh方法,參數和bar方法大體相同,唯獨堆積條形圖需要設置的參數是left而不是bottom。