Python繪製精美圖表之雙柱形圖

圖表是比干巴巴的表格更直觀的表達,簡潔、有力。工做中常常遇到的場景是,有一些數值須要定時的監控,好比服務器的鏈接數、活躍用戶數、點擊某個按鈕的人數,而且經過郵件或者網頁展現出來。當咱們想關注比數值自己更多的信息(像數值的變化、對比或異常),圖表就很是有用了。把數值轉化爲圖片要依賴第三方庫的幫忙,在Python之中最好的圖表庫叫matplotlib。(一直以爲,Python最大的優點就是豐富的第三方庫,讓你能輕易實現各類需求)html

matplotlib,顧名思義就是提供了一整套和matlab類似的API,它的文檔至關完備,示例頁面提供了上百個圖表的入門代碼,能夠說只有你想不到的,沒有它作不到的。python

舉個稍複雜的例子,小明和小紅兩個同窗各有語文、數學、英語的課程成績,用一個雙柱形圖輸出各項成績的對比:服務器

#!/usr/bin/env python
# coding: utf-8

import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt
import numpy as np

# 必須配置中文字體,不然會顯示成方塊
# 注意全部但願圖表顯示的中文必須爲unicode格式
custom_font = mpl.font_manager.FontProperties(fname='/Library/Fonts/華文細黑.ttf')

font_size = 10 # 字體大小
fig_size = (8, 6) # 圖表大小

names = (u'小明', u'小紅') # 姓名
subjects = (u'語文', u'數學', u'英語') # 科目
scores = ((65, 90, 75), (85, 80, 90)) # 成績

# 更新字體大小
mpl.rcParams['font.size'] = font_size
# 更新圖表大小
mpl.rcParams['figure.figsize'] = fig_size
# 設置柱形圖寬度
bar_width = 0.35

index = np.arange(len(scores[0]))
# 繪製「小明」的成績
rects1 = plt.bar(index, scores[0], bar_width, color='#0072BC', label=names[0])
# 繪製「小紅」的成績
rects2 = plt.bar(index + bar_width, scores[1], bar_width, color='#ED1C24', label=names[1])
# X軸標題
plt.xticks(index + bar_width, subjects, fontproperties=custom_font)
# Y軸範圍
plt.ylim(ymax=100, ymin=0)
# 圖表標題
plt.title(u'企鵝班同窗成績對比', fontproperties=custom_font)
# 圖例顯示在圖表下方
plt.legend(loc='upper center', bbox_to_anchor=(0.5, -0.03), fancybox=True, ncol=5, prop=custom_font)

# 添加數據標籤
def add_labels(rects):
    for rect in rects:
        height = rect.get_height()
        plt.text(rect.get_x() + rect.get_width() / 2, height, height, ha='center', va='bottom')
        # 柱形圖邊緣用白色填充,純粹爲了美觀
        rect.set_edgecolor('white')

add_labels(rects1)
add_labels(rects2)

# 圖表輸出到本地
plt.savefig('scores_par.png')

最終圖表顯示以下:字體

小結一下,從上面的代碼片斷能夠了解到:matplotlib是一個自由度很是高的圖表庫,可以實現從顏色、字體等基礎屬性到圖例、網格等圖表屬性的定製輸出spa

來自:建造者說code

相關文章
相關標籤/搜索