前言
上一節(Python可視化,matplotlib最佳入門練習 )我們只是單純使用 matplotlib 制作出以下圖表:

- 每年小麥產量柱狀圖
- 使用不同顏色標記最小與最大值的柱子
但是,如果只是制作標準的圖表,我們有許多其他的選擇。最常見的就是使用 seaborn ,他是基于 matplotlib 的包裝。
這一節我們就來看看,如何使用 seaborn 生成標準圖表,然后結合 matplotlib 做出定制效果。
特別是多系列的情況下,會有一些技巧。
本文目標圖表是這樣:

2個系列。每個系列找出最小最大的柱子,標記成不同的顏色
本文所需要的庫如下:

數據是這樣子:

上一節做的事情如下:
- 設置 x 軸標簽的旋轉角度
- 設置某個指定柱狀圖的柱子顏色
簡單把這些事情包裝成函數:

使用 seaborn 的代碼,實際與上一節直接使用 matplotlib 差不多:


看起來 seaborn 沒有特別的地方!
這是因為我們只有一個系列(上圖只涉及2個維度:wheat 與 year)
多系列
稍微修改一下數據,

- 行3、4、5:復制一份數據,小麥產量隨機生成
- 行7、8:新增一個列"type",把數據劃分成2類:"原始" 、"修改"
- 行10:合并成一份數據
- 行12:避免數據太多,圖表不利于閱讀,我只保留1750年以后的數據
現在數據成這樣:

每個年份都有2行記錄,字段"type"可以區分他們
使用 seaborn 可以非常方便映射多個維度的數據:

行1:hue 是類別映射,通常如果有一個列數據是文本,就可以映射上去。這里把數據中的"type"字段映射
圖表成這樣子:

顯然沒有標記出最大值的柱子
同時也提示執行有錯誤
如果我們查看圖表的容器就能看出關鍵:

原來,seaborn 柱子分成2組。這是非常合理的
但數據范圍索引,卻是在整個數據共27行中查找
顯然,我們需要是2組的范圍索引:

語義非常清晰直白
但是,怎么準確從圖表容器中找到需要的 BarContainer:

行7與行12:里面的 0 和 1 都是猜測的
原來,seaborn 在生成這些容器時,給容器的 label 屬性寫入了對應的數據值(就是我們數據的"type"字段):

注意,你不能使用 key 索引方式獲取,比如寫: axcontainers['修改'] ,這會報錯
萬事俱備,定義如下函數:

現在調用變得非常簡單:

圖表成這樣子:

接下來我會繼續編寫更多非常規要求的圖表,敬請關注!