# 導包 from matplotlib import pyplot as plt import numpy as np
折線圖

簡單線性圖
在圖表的所有類型中,線性圖最為簡單。線性圖的各個數據點由一條直線來連接. 一對對(x, y)值組成的數據點在圖表中的位置取決於兩條軸(x和y)的刻度范圍
如果要繪制一系列的數據點,需要創建兩個Numpy數組. 首先, 創建包含x值的數組, 用作x軸. 再創建包含y值得數組,用作y軸. 完成了兩個數組創建,只需要調用plot()函數繪制圖像即可
# 生成[0, 2π]之間的等間距的100個點 x = np.linspace(0, 2* np.pi,num=100) y = np.sin(x) plt.plot(x,y) plt.show()
繪制樣式較全的線形圖
# 設置中文字體,否則中文會出現方框狀 plt.rcParams["font.sans-serif"] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 准備 x 和 y x = np.linspace(0, 2* np.pi,num=10) y = np.sin(x) # 調用繪制線性圖函數plot() plt.plot(x, y, color='#3589FF', # 線的顏色 linestyle=':', # 線的風格 linewidth=3, # 線的寬度 marker='o', # 標記點的樣式 markerfacecolor='r', # 標記點的顏色 markersize=10, # 標記點的大小 alpha=0.7, # 圖形的透明度 label="cos(x)" ) plt.show()
繪制多條折線
y1 = np.random.random(6) y2 = np.random.random(6) x = np.arange(6) plt.plot(x, y1, label='沈陽') plt.plot(x, y2, label='大連') plt.legend(loc='best') plt.rcParams['font.sans-serif']=['SimHei'] plt.title('各城市房價(單位:萬)', fontsize=20) index_name = ['1月', '2月', '3月', '4月', '5月', '6月'] plt.xticks(x, index_name) plt.show()

x = np.linspace(0, 2 * np.pi, num=20) y = np.sin(x) # 調用繪制線性圖函數plot() plt.plot(x, y, color='#3589FF', # 線的顏色 linestyle=':', # 線的風格 linewidth=3, # 線的寬度 marker='o', # 標記點的樣式 markerfacecolor='r', # 標記點的顏色 markersize=10, # 標記點的大小 alpha=0.7, # 圖形的透明度 label="sin(x)" #設置圖例的label ) siny = y.copy() cosy = np.cos(x) plt.plot(x, cosy, color='y', # 線的顏色 linestyle='-', # 線的風格 linewidth=3, # 線的寬度 marker='*', # 標記點的樣式 markerfacecolor='b', # 標記點的顏色 markersize=15, # 標記點的大小 alpha=0.9, # 圖形的透明度 label="cos(x)" #設置圖例的label ) # 設置x,y軸的label plt.xlabel('時間(s)') plt.ylabel('電壓(V)') plt.legend() plt.title('電壓隨時間變化的線性圖') # 調用show方法顯式 plt.show()

將DataFrame繪制成線性圖
from pandas import DataFrame,Series import pandas as pd import numpy as np import matplotlib.pyplot as plt plt.rcParams["font.sans-serif"] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # %matplotlib inline data_frame = DataFrame({ '東軟熙康': np.random.randint(10, 100, 5), '東軟醫療': np.random.randint(10, 100, 5), '東軟睿道': np.random.randint(10, 100, 5), }) plt.plot(data_frame, marker='o') # 顯示圖例 plt.legend(data_frame, loc=2) # 設置x軸刻度標簽 plt.xticks([0, 1, 2, 3, 4], ['first', 'secod', 'third', 'forth', 'fifth']) plt.title('東軟子公司1-5月份在職人員數量') plt.xlabel('月份') plt.ylabel('在職人數(百人)') # True 顯示網格 # linestyle 設置線顯示的類型(一共四種) # color 設置網格的顏色 # linewidth 設置網格的寬度 # plt.grid(True, linestyle = "-.", color = "r", linewidth = "3") plt.grid() # 顯示圖形 plt.show()

條狀圖
條狀圖也是非常常用的一種圖表類型. 條形圖是統計圖資料分析中最常用的圖形。主要特點有:
- 能夠使人們一眼看出各個各個項目數據的大小
- 易於比較各個不同項目數據之間的差別
垂直條狀圖
import matplotlib.pyplot as plt import numpy as np plt.rcParams["font.sans-serif"] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False index = np.arange(5) values1 = np.random.randint(11, 20, 5) values2 = np.random.randint(11, 20, 5) values3 = np.random.randint(11, 20, 5) # bar寬度 bar_width = 0.3 # 每一個bar占0.3寬度 plt.bar(index-bar_width, values1, width=bar_width, alpha=0.7, label='社保項目1', color='b') plt.bar(index, values2, width=bar_width, alpha=0.7, label='社保項目2', color='r') plt.bar(index+bar_width, values3, width=bar_width, alpha=0.7, label='社保項目3', color='g') # 顯示圖例 plt.legend(loc=1) # 設置X軸、Y軸數值范圍 # plt.xlim(-0.5, 5) # plt.ylim(10, 20) plt.axis([-0.6, 5, 10, 20]) # 設置x軸刻度標簽 rotation旋轉角度 plt.xticks(index, ['社保項目'+str(ix) for ix in range(1, 6)], rotation=30) # 設置標題 plt.title('社保項目營收', fontsize=20) plt.xlabel('項目類型') plt.ylabel('項目合同額(億元)') # 顯示數值標簽 for a,b in zip(index, values1): plt.text(a-bar_width, b, '%.0f' % b, ha='center', va='bottom', fontsize=7) for a,b in zip(index, values2): plt.text(a, b, '%.0f' % b, ha='center', va='bottom', fontsize=7) for a,b in zip(index, values3): plt.text(a+bar_width, b, '%.0f' % b, ha='center', va='bottom', fontsize=7) # 顯示網格 plt.grid() plt.show()

水平條狀圖
import numpy as np import matplotlib.pyplot as plt plt.rcParams["font.sans-serif"] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 繪制水平條狀圖 index = np.arange(5) values1 = np.random.randint(10, 17, 5) values2 = np.random.randint(10, 17, 5) values3 = np.random.randint(10, 17, 5) # 繪制條狀圖 bar_height = 0.3 plt.barh(index, values1, height=0.3, label='社保項目1', color='r') plt.barh(index+bar_height, values2, height=0.3, label='社保項目2', color='b') plt.barh(index+bar_height*2, values3, height=0.3, label='社保項目2', color='y') # y軸標簽 plt.yticks(index + bar_height, list('ABCDE')) # 顯示數值標簽 for a, b in zip(values1, index): plt.text(a, b, '%.0f' % a, ha='left', va= 'center', fontsize=7) for a, b in zip(values2, index): plt.text(a, b+bar_height, '%.0f' % a, ha='left', va= 'center', fontsize=7) for a, b in zip(values3, index): plt.text(a, b+bar_height*2, '%.0f' % a, ha='left', va= 'center', fontsize=7) # 設置標題 plt.title('社保項目營收', fontsize=20) plt.xlabel('項目類型') plt.ylabel('項目合同額(億元)') plt.axis([0, 20, -0.4, 5]) plt.legend(loc=4) plt.show()

柱狀圖
柱狀圖我們經常會用到,我們來看下如何畫出柱狀圖,並在圖上標注出數據對應的數值
import numpy as np from matplotlib import pyplot as plt k = 10 # 生成數據 x 和 y x = np.arange(k) y = np.random.random(k) # 畫出 x 和 y 的柱狀圖 plt.bar(x, y) # 增加數值 for x, y in zip(x, y): # 標注數值 # ha='center' 橫向居中對齊 # va='bottom'縱向底部(頂部)對齊 plt.text(x, y , '%.2f' % y, ha='center', va='bottom') plt.show()

餅圖

除了條狀圖, 餅圖也可以用來表示數據,用pie()函數制作餅圖很簡單
import matplotlib.pyplot as plt plt.rcParams["font.sans-serif"] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # %matplotlib inline # 設置圖像大小 plt.figure(figsize=(9, 9)) # 設置標簽 labels = ['Java開發', '項目經理', '測試運維人員', 'Python開發', '架構師'] # 標簽對應的值 values = [6000, 1000, 2000, 7000, 500] # 每一個標簽餅圖的顏色 colors = ['red', '#FEDD62', 'blue', 'gray', 'green'] # 那一塊內容需要脫離餅圖凸顯, 可選值0-1 explode = [0.1, 0.1, 0, 0, 0] """ autopct ='%1.1f%%'表示顯示百分比 shadow顯示陰影 startangle 正值表示逆時針旋轉 """ plt.pie(values, labels=labels, colors=colors, explode=explode, startangle=90, shadow=True, autopct='%1.1f%%' ) # 設置為標准圓形 plt.axis('equal') # 顯示圖例 plt.legend(loc=2) plt.title('東軟軟件工程師人員職位占比') plt.show()

散點圖
用兩組數據構成多個坐標點,考察坐標點的分布,判斷兩變量之間是否存在某種關聯或總結坐標點的分布模式。散點圖將序列顯示為一組點。值由點在圖表中的位置表示。類別由圖表中的不同標記表示。散點圖通常用於比較跨類別的聚合數據

簡單的散點圖繪制
繪制正態分布
from matplotlib import pyplot as plt import numpy as np # 散點 橫軸和縱軸都是特征 x = np.random.normal(0, 1, 10000) # 均值為0 方差為1 正態分布 y = np.random.normal(0, 1, 10000) plt.scatter(x, y, alpha=0.1) plt.show()

x = np.random.normal(0, 1, 10000) y = np.random.normal(0, 1, 10000) a = -2 + np.random.random(100) * 4 b = -2 + np.random.random(100) * 4 plt.scatter(x, y, color='g', alpha=0.1, label='沈陽') plt.scatter(a, b, color='r', alpha=0.4, label='大連') plt.rcParams["font.sans-serif"] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.legend() plt.show()

繪制隨機點
import matplotlib.pylab as plt import numpy as np # 隨機生成500個點 k = 500 x = np.random.rand(k) y = np.random.rand(k) # 生成每個點的大小 size = np.random.rand(k) * 50 # 生成每個點的顏色大小 colour = np.arctan2(x, y) plt.scatter(x, y, s=size, c=colour) # 添加顏色欄 plt.colorbar() plt.show()

直方圖
直方圖由豎立在 x 軸上的多個相鄰的矩形組成,這些矩形把 x 軸拆分為一段段彼此不重疊的線段(線段兩個端點所標識的數據范圍也叫面元),矩形的面積跟落在其所對應的面元的元素數量成正比。這種可視化方法常被用於樣本分布等統計研究。
pyplot 用於繪制直方圖的函數為 hist(),它能夠接收一系列樣本個體和期望的面元數量作為參數,把樣本范圍分成多個區間(面元),然后計算每個面元所包含的樣本個體的數量

簡單直方圖
pop = np.random.randint(0, 100, 10000) plt.hist(pop, bins=200) plt.show()

畫高斯分布直方圖
pop = np.random.normal(0, 1, 1000000) plt.hist(pop, bins=1500) plt.show()

箱線圖
箱線圖也稱箱須圖,能提供有關數據位置和分數情況的相關信息,可表現分散程度差異
利用數據中的五個統計量(最小值、下四分位數、中位數、上四分位數、最大值)來描述數據,可粗略看出數據是否具有對稱性、分布的分散程度等信息

