matplotlib如何繪制直方圖、條形圖和餅圖


1 繪制直方圖:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib

def hist1():
    # 設置matplotlib正常顯示中文和負號
    matplotlib.rcParams['font.sans-serif'] = ['SimHei']    # 用黑體顯示中文
    matplotlib.rcParams['axes.unicode_minus'] = False  # 正常顯示負號
    data = np.random.randn(10000)
    '''
    data: 繪圖數據
    bins:直方圖的長方形數目, 可選項, 默認為10
    normed:是否將得到的直方圖向量歸一化, 可選項, 默認為0, 代表不歸一化, 顯示頻數。 normed=1,表示歸一化,顯示頻率
    facecolor: 長方形的顏色
    edgecolor: 長方形邊框的顏色
    alpha: 透明度
    '''
    plt.hist(data, bins=40, density=1, facecolor='blue', edgecolor='black', alpha=0.7)
    # 顯示橫軸標簽
    plt.xlabel("區間")
    # 顯示縱軸標簽
    plt.ylabel("頻數/頻率")
    # 顯示圖標數
    plt.title("頻數/頻率分布直方圖")
    plt.show()


if __name__ == '__main__':
    hist1()

繪制的直方圖效果如下:

 

1.2條形圖

import matplotlib.pyplot as plt
import matplotlib
# 設置中文字體和負號正常顯示
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False

label_list = ['2014', '2015', '2016', '2017']    # 橫坐標刻度顯示值
num_list1 = [20, 30, 15, 35]      # 縱坐標值1
num_list2 = [15, 30, 40, 20]      # 縱坐標值2
x = range(len(num_list1))
"""
繪制條形圖
left:長條形中點橫坐標
height:長條形高度
width:長條形寬度,默認值0.8
label:為后面設置legend准備
"""
rects1 = plt.bar(left=x, height=num_list1, width=0.4, alpha=0.8, color='red', label="一部門")
rects2 = plt.bar(left=[i + 0.4 for i in x], height=num_list2, width=0.4, color='green', label="二部門")
plt.ylim(0, 50)     # y軸取值范圍
plt.ylabel("數量")
"""
設置x軸刻度顯示值
參數一:中點坐標
參數二:顯示值
"""
plt.xticks([index + 0.2 for index in x], label_list)
plt.xlabel("年份")
plt.title("某某公司")
plt.legend()     # 設置題注
# 編輯文本
for rect in rects1:
    height = rect.get_height()
    plt.text(rect.get_x() + rect.get_width() / 2, height+1, str(height), ha="center", va="bottom")
for rect in rects2:
    height = rect.get_height()
    plt.text(rect.get_x() + rect.get_width() / 2, height+1, str(height), ha="center", va="bottom")
plt.show()

1.3 水平條形圖:

import matplotlib.pyplot as plt
import matplotlib

matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False

price = [39.5, 39.9, 45.4, 38.9, 33.34]
"""
繪制水平條形圖方法barh
參數一:y軸
參數二:x軸
"""
plt.barh(range(5), price, height=0.7, color='steelblue', alpha=0.8)      # 從下往上畫
plt.yticks(range(5), ['亞馬遜', '當當網', '中國圖書網', '京東', '天貓'])
plt.xlim(30,47)
plt.xlabel("價格")
plt.title("不同平台圖書價格")
for x, y in enumerate(price):
    plt.text(y + 0.2, x - 0.1, '%s' % y)
plt.show()

1.4 堆疊條形圖

import matplotlib.pyplot as plt
import matplotlib

matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False

label_list = ['2014', '2015', '2016', '2017']
num_list1 = [20, 30, 15, 35]
num_list2 = [15, 30, 40, 20]
x = range(len(num_list1))
rects1 = plt.bar(left=x, height=num_list1, width=0.45, alpha=0.8, color='red', label="一部門")
rects2 = plt.bar(left=x, height=num_list2, width=0.45, color='green', label="二部門", bottom=num_list1)
plt.ylim(0, 80)
plt.ylabel("數量")
plt.xticks(x, label_list)
plt.xlabel("年份")
plt.title("某某公司")
plt.legend()
plt.show()

餅圖

import matplotlib.pyplot as plt
import matplotlib

matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False

label_list = ["第一部分", "第二部分", "第三部分"]    # 各部分標簽
size = [55, 35, 10]    # 各部分大小
color = ["red", "green", "blue"]     # 各部分顏色
explode = [0.05, 0, 0]   # 各部分突出值
"""
繪制餅圖
explode:設置各部分突出
label:設置各部分標簽
labeldistance:設置標簽文本距圓心位置,1.1表示1.1倍半徑
autopct:設置圓里面文本
shadow:設置是否有陰影
startangle:起始角度,默認從0開始逆時針轉
pctdistance:設置圓內文本距圓心距離
返回值
l_text:圓內部文本,matplotlib.text.Text object
p_text:圓外部文本
"""
patches, l_text, p_text = plt.pie(size, explode=explode, colors=color, labels=label_list, labeldistance=1.1, autopct="%1.1f%%", shadow=False, startangle=90, pctdistance=0.6)
plt.axis("equal")    # 設置橫軸和縱軸大小相等,這樣餅才是圓的
plt.legend()
plt.show()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM