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()