小白學 Python 數據分析(19):Matplotlib(四)經常使用圖表(下)

人生苦短,我用 Pythonhtml

前文傳送門:python

小白學 Python 數據分析(1):數據分析基礎git

小白學 Python 數據分析(2):Pandas (一)概述github

小白學 Python 數據分析(3):Pandas (二)數據結構 Seriesapi

小白學 Python 數據分析(4):Pandas (三)數據結構 DataFrame數據結構

小白學 Python 數據分析(5):Pandas (四)基礎操做(1)查看數據echarts

小白學 Python 數據分析(6):Pandas (五)基礎操做(2)數據選擇dom

小白學 Python 數據分析(7):Pandas (六)數據導入spa

小白學 Python 數據分析(8):Pandas (七)數據預處理.net

小白學 Python 數據分析(9):Pandas (八)數據預處理(2)

小白學 Python 數據分析(10):Pandas (九)數據運算

小白學 Python 數據分析(11):Pandas (十)數據分組

小白學 Python 數據分析(12):Pandas (十一)數據透視表(pivot_table)

小白學 Python 數據分析(13):Pandas (十二)數據表拼接

小白學 Python 數據分析(14):Pandas (十三)數據導出

小白學 Python 數據分析(15):數據可視化概述

小白學 Python 數據分析(16):Matplotlib(一)座標系

小白學 Python 數據分析(17):Matplotlib(二)基礎操做

小白學 Python 數據分析(18):Matplotlib(三)經常使用圖表(上)

散點圖

上一篇咱們介紹了常見的折線圖和柱狀圖,本篇咱們接着看其餘經常使用的圖形。

散點圖常常用來表示數據之間的關係,使用的是 plt 庫中的 scatter() 方法,仍是先看下 scatter() 的語法,來自官方文檔:matplotlib.org/api/_as_gen…

matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=<deprecated parameter>, edgecolors=None, *, plotnonfinite=False, data=None, **kwargs)
複製代碼

前面介紹過的參數這裏再也不多說,說點散點圖特有的參數:

  • s : 表示的是每一個點的大小,若是隻有一個數值的時候,則全部的點都是同樣大的,也能夠傳入一個列表,這時候每一個點的大小都不同,散點圖也就成了氣泡圖。
  • c : 表示點的顏色,若是隻有一種顏色的時候,則每一個點的顏色都會相同,也可使用列表定義不一樣的顏色
  • linewidths : 表示每一個散點的線寬
  • edgecolors : 每一個散點外輪廓的顏色

其實散點圖的經常使用參數和以前的折線圖柱狀圖都差很少,還有一些沒介紹的高階參數能夠參考官方文檔,主要是用來作一些比較騷的操做的,能夠用來自定義顏色的漸變。

看個簡單的示例,數據仍是使用前文的數據:

import matplotlib.pyplot as plt
import numpy as np

# 處理中文亂碼
plt.rcParams['font.sans-serif']=['SimHei']

x_data = np.array([2011,2012,2013,2014,2015,2016,2017])
y_data = np.array([58000,60200,63000,71000,84000,90500,107000])

plt.scatter(x_data, y_data, s = 100, c = 'green', marker='o', edgecolor='black', alpha=0.5, label = '產品銷量')

plt.legend()

plt.savefig("scatter_demo.png")
複製代碼

結果以下:

氣泡圖

氣泡圖和上面的散點圖很是相似,只是點的大小不同,並且是經過參數 s 來進行控制的,多的不說,仍是看個示例:

import matplotlib.pyplot as plt
import numpy as np

# 處理中文亂碼
plt.rcParams['font.sans-serif']=['SimHei']

x_data = np.array([2011,2012,2013,2014,2015,2016,2017])
y_data = np.array([58000,60200,63000,71000,84000,90500,107000])

# 根據 y 值的不一樣生成不一樣的顏色
colors = y_data * 10
# 根據 y 值的不一樣生成不一樣的大小
area = y_data / 300

plt.scatter(x_data, y_data, s = area, c = colors, marker='o', edgecolor='black', alpha=0.5, label = '產品銷量')

plt.legend()

plt.savefig("scatter_demo1.png")
複製代碼

代碼很少解釋了,註釋已經寫得很清楚了,直接來看結果:

堆疊圖

堆疊圖的做用和折線圖很是相似,它採用的是 stackplot() 方法。

語法以下:

plt.stackplot(x, y, labels, colors)
複製代碼

stackplot() 堆疊圖的語法比較簡單,這裏就很少介紹了,看過前面的同窗應該一眼就能明白,接下來咱們看個示例:

import matplotlib.pyplot as plt

# 處理中文亂碼
plt.rcParams['font.sans-serif']=['SimHei']

x_data = [2011,2012,2013,2014,2015,2016,2017]
y_data = [58000,60200,63000,71000,84000,90500,107000]
y_data_1 = [78000,80200,93000,101000,64000,70500,87000]

plt.title(label='xxx 公司 xxx 產品銷量')

plt.stackplot(x_data, y_data, y_data_1, labels=['產品銷量', '用戶增加數'])

plt.legend()

plt.savefig("stackplot_demo.png")
複製代碼

結果以下:

雷達圖

雷達圖各位同窗可能在玩遊戲的時候常常看到,或者是作一些能力測評的時候,它能夠直觀的看出來一個事物的優點與不足。

在 plt 中創建雷達圖是用 polar() 方法的,這個方法實際上是用來創建極座標系的,而雷達圖就是先在極座標系中將各個點找出來,而後再將他們連線連起來。

語法以下:

plt.polar(theta, r, **kwargs)
複製代碼
  • theta : 每個點在極座標系中的角度
  • r : 每個點在極座標系中的半徑

接下來咱們來看個示例,這個示例徹底出於小編本身幻想,無其餘任何意義:

import numpy as np
import matplotlib.pyplot as plt

# 中文和負號的正常顯示
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 使用ggplot的繪圖風格
plt.style.use('ggplot')

# 構造數據
values = [3.2, 2.1, 3.5, 2.8, 3]
feature = ['攻擊力', '防護力', '恢復力', '法術強度', '生命值']

N = len(values)
# 設置雷達圖的角度,用於平分切開一個圓面
angles = np.linspace(0, 2 * np.pi, N, endpoint=False)

# 爲了使雷達圖一圈封閉起來,須要下面的步驟
values = np.concatenate((values, [values[0]]))
angles = np.concatenate((angles, [angles[0]]))

# 繪圖
fig = plt.figure()
# 這裏必定要設置爲極座標格式
ax = fig.add_subplot(111, polar=True)
# 繪製折線圖
ax.plot(angles, values, 'o-', linewidth=2)
# 填充顏色
ax.fill(angles, values, alpha=0.25)
# 添加每一個特徵的標籤
ax.set_thetagrids(angles * 180 / np.pi, feature)
# 設置雷達圖的範圍
ax.set_ylim(0, 5)
# 添加標題
plt.title('遊戲人物屬性')
# 添加網格線
ax.grid(True)
# 顯示圖形
plt.savefig('polar_demo.png')
複製代碼

結果以下:

餅圖

餅圖的做用和上面的雷達圖有些相似,也是用來表示同一個事物的不一樣類別的佔比狀況,它使用的是 plt 中的 pie 這個方法。

語法以下:

matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, hold=None, data=None)
複製代碼

餅圖的參數仍是比較複雜的,咱們接下來一個一個看:

  • x : array-like
  • explode : array-like, optional, default: None(設置餅圖偏離)
  • labels : list, optional, default: None(標籤)
  • colors : array-like, optional, default: None(顏色設置)
  • autopct : None (default), string, or function, optional(設置百分比顯示)
  • pctdistance : float, optional, default: 0.6(百分比距圓心的位置)
  • shadow : bool, optional, default: False(設置陰影)
  • labeldistance : float, optional, default: 1.1(標籤距圓心的距離)
  • startangle : float, optional, default: None(開始位置的旋轉角度,第一個分類是在右45度位置)
  • radius : float, optional, default: None(設置半徑的大小)
  • counterclock : bool, optional, default: True(是否逆時針)
  • wedgeprops : dict, optional, default: None(內外邊界設置)
  • textprops : dict, optional, default: None(文本設置)
  • center : list of float, optional, default: (0, 0)(設置中心位置)
  • frame : bool, optional, default: False(是否顯示餅圖背後圖框)

來個簡單的示例:

import matplotlib.pyplot as plt

# 中文和負號的正常顯示
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 數據
edu = [0.2515,0.3724,0.3336,0.0368,0.0057]
labels = ['中專','大專','本科','碩士','其餘']

# 讓本科學歷離圓心遠一點
explode = [0,0,0.1,0,0]

# 將橫、縱座標軸標準化處理,保證餅圖是一個正圓,不然爲橢圓
plt.axes(aspect='equal')

# 自定義顏色
colors=['#9999ff','#ff9999','#7777aa','#2442aa','#dd5555'] # 自定義顏色

# 繪製餅圖
plt.pie(x=edu,  # 繪圖數據
    explode = explode,  # 突出顯示大專人羣
    labels = labels,  # 添加教育水平標籤
    colors = colors,  # 設置餅圖的自定義填充色
    autopct = '%.1f%%',  # 設置百分比的格式,這裏保留一位小數
    )

# 添加圖標題
plt.title('xxx 公司員工教育水平分佈')

# 保存圖形
plt.savefig('pie_demo.png')
複製代碼

結果以下:

環形圖

環形圖實際上是另外一種餅圖,使用的仍是上面的 pie() 這個方法,這裏只須要設置一下參數 wedgeprops 便可。

示例以下:

import matplotlib.pyplot as plt

# 中文和負號的正常顯示
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 數據
edu = [0.2515,0.3724,0.3336,0.0368,0.0057]
labels = ['中專','大專','本科','碩士','其餘']

# 讓本科學歷離圓心遠一點
explode = [0,0,0.1,0,0]

# 將橫、縱座標軸標準化處理,保證餅圖是一個正圓,不然爲橢圓
plt.axes(aspect='equal')

# 自定義顏色
colors=['#9999ff','#ff9999','#7777aa','#2442aa','#dd5555'] # 自定義顏色

# 繪製餅圖
plt.pie(x=edu,  # 繪圖數據
    explode = explode,  # 突出顯示大專人羣
    labels = labels,  # 添加教育水平標籤
    colors = colors,  # 設置餅圖的自定義填充色
    autopct = '%.1f%%',  # 設置百分比的格式,這裏保留一位小數
    wedgeprops = {'width': 0.3, 'edgecolor':'green'}
    )

# 添加圖標題
plt.title('xxx 公司員工教育水平分佈')

# 保存圖形
plt.savefig('pie_demo1.png')
複製代碼

這個示例僅僅在前面示例的基礎上增長了一個參數 wedgeprops 的設置,咱們看下結果:

熱力圖

熱力圖用到的方法是 imshow() ,他的語法以下:

plt.imshow(x, cmap)
複製代碼

首先這裏要注意, x 是數據,可是必定要是矩陣形式的。

示例以下:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand(10, 10)
plt.imshow(x, cmap=plt.cm.hot)

# 顯示右邊顏色條
plt.colorbar()

plt.savefig('imshow_demo.png')
複製代碼

結果以下:

Matplotlib 的經常使用圖表到這裏就要結束了,接下來,咱們會接着介紹咱們以前說過的 pyecharts 的經常使用圖表。

代碼倉庫

老規矩,全部的示例代碼都會上傳至代碼管理倉庫 Github 和 Gitee 上,方便你們取用。

示例代碼-Github

示例代碼-Gitee

參考

blog.csdn.net/kun12804376…

blog.csdn.net/claroja/art…

您的掃碼關注,是對小編堅持原創的最大鼓勵:)
相關文章
相關標籤/搜索