Matplotlib 中常見的圖形


# 導包
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()

箱線圖

  箱線圖也稱箱須圖,能提供有關數據位置和分數情況的相關信息,可表現分散程度差異

  利用數據中的五個統計量(最小值、下四分位數、中位數、上四分位數、最大值)來描述數據,可粗略看出數據是否具有對稱性、分布的分散程度等信息

 


免責聲明!

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



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