1. 程式人生 > >python 機器學習三劍客 之 Matplotlib

python 機器學習三劍客 之 Matplotlib

上下 main dao 水平 價格 2d繪圖 key star 西遊記


Matplotlib介紹:

    Matplotlib 是一個 Python 的 2D繪圖庫,它以各種硬拷貝格式和跨平臺的交互式環境生成出版質量級別的圖形 。

    通過 Matplotlib,開發者可以僅需要幾行代碼,便可以生成繪圖,直方圖,功率譜,條形圖,錯誤圖,散點圖等。

Matplotlib基礎知識:   
     Matplotlib中的基本圖表包括的元素
     x軸和y軸
     水平和垂直的軸線
     x軸和y軸刻度
     刻度標示坐標軸的分隔,包括最小刻度和最大刻度
     x軸和y軸刻度標簽
     表示特定坐標軸的值
     繪圖區域
     實際繪圖的區域

Matplotlib形狀代碼:

首選是折線圖: 
# 導包
import matplotlib.pyplot as plt
# 導入字體庫
from matplotlib.font_manager import FontProperties


font = FontProperties(fname="C:/Windows/Fonts/simkai.ttf",size=15)
# 填充數據
# plt.plot([‘3-1‘,‘3-2‘,‘3-3‘],[1,10,9])

# 繪制方法
# plt.show()

# 定制數據
x1 = [‘3-1‘,‘3-2‘,‘3-3‘,‘3-4‘,‘3-5‘]
y1 = [2,6,4,9,7]

x2 = [‘3-1‘,‘3-2‘,‘3-3‘,‘3-4‘,‘3-5‘]
y2 = [13,18,11,12,5]

plt.plot(x1,y1,label=‘temperature‘)
plt.plot(x2,y2,label=‘water‘)

# 設置標題
plt.title(‘溫濕度顯示圖‘,FontProperties=font)

plt.legend()

plt.show()

樹狀圖:

# 導包
import matplotlib.pyplot as plt
# 導入字體庫
from matplotlib.font_manager import FontProperties

font = FontProperties(fname="C:/Windows/Fonts/simhei.ttf",size=15)


# 設置數據
salary = [9000,10000,12000,5000,4000]
group = [‘beijing‘,‘qinhuangdao‘,‘xingtai‘,‘handan‘,‘shijiazhuang‘]

plt.bar(group,salary)

plt.title(‘全國各市工資水平‘,FontProperties=font)

plt.show()

散點圖:

# 導包
import matplotlib.pyplot as plt
# 導入字體庫
from matplotlib.font_manager import FontProperties

import numpy as np

font = FontProperties(fname="C:/Windows/Fonts/simhei.ttf",size=15)


# 設置數據
# plt.scatter(2,4)

# 定義x軸數據

x = list(range(0,101))
y = [xvalue * np.random.rand() for xvalue in x]

# 填充數據
# s 代表點的大小,和粗細
# c 點表點的顏色

plt.scatter(x,y,s=20,c=‘skyblue‘)

# 繪制
plt.show()

還可以運用面向對象來吧 圖形封裝成類,以下是封裝成面向對象的圖形代碼。
# 導包
import matplotlib.pyplot as plt



# 定義一個繪圖類
class TestPlot(object):

# 初始化賦值
def __init__(self,plt):
self.plt = plt

#定義內部屬性
#解決中文亂碼問題(第二種,第一種在d6中)
# ‘font.sans-serif‘ 是matplotlib的內置key
plt.rcParams[‘font.sans-serif‘] = [‘SimHei‘]
plt.rcParams[‘font.family‘]=‘sans-serif‘
#指定編碼
plt.rcParams[‘axes.unicode_minus‘] = False

# 定義橫向條形圖
def my_barh(self):
my_plt = self.plt
# 定義價格
price = [40.7,55,66,42.3]
# 將數據傳入
my_plt.barh(range(4),price,align=‘center‘,color=‘skyblue‘,alpha=0.5)

# 設置標簽
my_plt.xlabel(‘價格‘)

# 將數據傳入y軸
my_plt.yticks(range(4),[‘紅樓夢‘,‘三國演義‘,‘西遊記‘,‘水滸傳‘])

# 設置上下限制

my_plt.xlim([10,80])

my_plt.title(‘四大名著‘)

my_plt.show()



# 定義柱狀圖
def my_bar(self):

my_plt =self.plt

# 定義數據
GDP = [11313.3,14131.3,14553.5,23452.6]

# 傳入數據
my_plt.bar([‘唐山‘,‘邢臺‘,‘石家莊‘,‘邯鄲‘],GDP,align=‘center‘,color =‘steelblue‘,alpha = 0.8)

my_plt.ylabel(‘生產總值‘)

my_plt.title(‘河北省GDP大比拼‘)
# 刻度範圍
my_plt.ylim([5000,25000])
my_plt.show()


def my_pie(self):

my_plt = self.plt

# 定義數據
xingtai = [44,22,16,18]
# 定義標簽
label = [‘2-3年‘,‘3-4年‘,‘5-6年‘,‘6年以上‘]

color = [‘red‘,‘skyblue‘,‘yellow‘,‘pink‘]

indic = []

# 使用enumerate方法來添加索引

for index,item in enumerate(xingtai):
if item == max(xingtai):
indic.append(0.5)

elif index == 1:
indic.append(0.3)
else:
indic.append(0)


# if item == max(xingtai):
# indic.append(0.1)
# else:
# indic.append(0)


my_plt.pie(
# 數據
xingtai,
# 標簽
labels=label,
# 顏色
colors=color,
# 角度
startangle=90,
# 陰影
shadow=True,
# 突出顯示
explode=tuple(indic),
# 格式化數字
autopct=‘%1.1f%%‘,
)

# 設置標題
my_plt.title(‘餅圖示例-統計邢臺工齡占比‘)
my_plt.show()




# 定義面積圖方法
def my_area(self):
# 定義日期區間
date = [‘2019.3.1‘,‘2019.3.2‘,‘2019.3.3‘,‘2019.3.4‘,‘2019.3.5‘,‘2019.3.6‘]

# 定義數據
# 收入
earn = [313,344,222,111,414,212]

# 支出
pay = [[15,44,33,56,33,77],[33,22,11,13,42,19]]

self.plt.stackplot(date,earn,pay,colors=[‘skyblue‘,‘yellow‘,‘red‘])

# 生成圖例
self.plt.plot([],[],color=‘skyblue‘,label=‘收入‘)
self.plt.plot([],[],color=‘yellow‘,label=‘午餐‘)
self.plt.plot([],[],color=‘red‘,label=‘晚餐‘)


# 設置標題
self.plt.title(‘面積圖例,統一六天收入‘)
self.plt.legend()
self.plt.show()

if __name__ == "__main__":

# 實例化一個對象
testplot =TestPlot(plt)
testplot.my_area()
# testplot.my_bar()
# testplot.my_pie()
# testplot.my_barh()

以上全都是內置圖形 ,還可以有擴展別的圖形,例如小提琴圖形。
首選要下載一個 seaborn 包
下載方式:pip install seaborn
下載之後利用此代碼,就可以生成小提琴形狀的比例了。
# 導包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns


if __name__ == "__main__":

# 讀取數據集
df = pd.read_excel(‘test.xlsx‘,‘sheet1‘)
print(df)
# 繪制小提琴圖
sns.violinplot(df[‘Age‘],df[‘Gender‘])
# 初始化數據
sns.despine()
# 繪制
plt.show()



python 機器學習三劍客 之 Matplotlib