matplotlib數據可視化 (繪圖)

一、折線圖繪製

1、繪圖流程

import matplotlib.pyplot as plt
import numpy as np

# 1、創建畫布
# figsize ==畫布尺寸
# dpi ---畫布像素
plt.figure()

# 默認不支持中文,需要配置RC 參數
plt.rcParams['font.sans-serif'] = 'SimHei'
# 設置字體之後不支持負號,需要去設置RC參數更改編碼
plt.rcParams['axes.unicode_minus'] = False

# 2、繪圖
# 準備座標
# 準備x  座標  準備y 座標     不這樣(x0,y0) (x1,y1)
# 下週北京的天氣溫度
x = np.arange(1, 8)
y = np.array([30, 29, 28, 22, 23, 30, 32])

# 繪製折線圖
plt.plot(x, y)

for i, j in zip(x, y):
    # print(i,j)
    # 參數1  x  軸位置
    # 參數2  標註的y軸位置
    # 參數3  標註的內容
    plt.text(i, j + 0.5, "%d℃" % j, horizontalalignment='center')

# 設置橫軸中文 刻度
xticks = ["週一", "週二", "週三", "週四", "週五", "週六", "週日"]
plt.xticks(x, xticks)
# 3、顯示圖片
plt.show()

2、詳細介紹

import matplotlib.pyplot as plt
import numpy as np

# 1、創建畫布
#  figsize=(20, 8), dpi=80
fig = plt.figure()

# 默認不支持中文,需要配置RC 參數
plt.rcParams['font.sans-serif'] = 'SimHei'
# 設置字體之後不支持負號,需要去設置RC參數更改編碼
plt.rcParams['axes.unicode_minus'] = False

# 2、繪圖
# 繪製sin曲線圖
# 準備座標
x = np.arange(0, 2 * np.pi, 0.1)
y1 = np.sin(x)
y2 = np.cos(x)

# get current axis 獲得座標軸對象
ax = plt.gca()

# 去除上邊 和 右邊的 座標邊框
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 指定 data  設置的bottom(也就是指定的x軸)綁定到y軸的0這個點上
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))

# 繪圖
# color 線的顏色
# linestyle  線性
# linewidth 線寬
# marker  點的形狀
# markersize  點的大小
# markerfacecolor 點的填充顏色
# markeredgecolor 點的邊緣顏色
plt.plot(x, y1, color='r', linestyle=':', linewidth=1.2, marker="*", markersize=7, markerfacecolor='b',
         markeredgecolor='g')
plt.plot(x, y2)

# https://www.cnblogs.com/darkknightzh/p/6117528.html

#  修飾  建議全部放在繪圖之後
# 增加標題
plt.title("sinx/cosx曲線圖")

# 添加橫軸、縱軸標題
plt.xlabel("橫軸")
# 標註框的top位置
plt.ylabel("縱軸", rotation=0, horizontalalignment='right', verticalalignment='top')

# 增加圖例
# loc  圖例位置
plt.legend(["y=sinx", 'y=cosx'], loc=1)

# 設置橫縱座標刻度
yticks = np.arange(-1, 1.1, 0.5)  # 對於y軸的刻度只能重新設置數組來設置刻度
# 對於x 軸,如果是值,那麼必須設置注意值的範圍
xticks = np.arange(0, 6.6, 0.5)
plt.xticks(xticks)
plt.yticks(yticks)

# 保存圖片
plt.savefig("./sinx、cosx曲線圖.png")
# 3、圖片顯示
plt.show()

二、散點圖

import numpy as np
import matplotlib.pyplot as plt

# 1、創建畫布
plt.figure()
# 2、繪圖
# 構建 x 與 y 軸座標
x = np.arange(1, 6)

y = np.random.randn(5)

# 繪製散點圖---比折線圖嚴格,x,y維數必須一致
# s  點的大小,可以傳一個,也可以傳一個數組,會從前往後依次使用大小
# c  點的顏色 ,可以傳一個,也可以傳一個array,會從前往後依次使用大小
# marker  點的形狀---,只能傳一個字符串"*"
# alpha  --透明度
#
plt.scatter(x, y, s=[20, 50, 30, 18, ], c=['r', 'g', 'pink', 'y'], marker="*", alpha=1)

# 3、展示圖片
plt.show()

# 散點圖應用場景
# 1、類似於折線圖的散點圖可以用來描述走勢
# 2、聚集的散點圖可以用來描述點與點的相關性

三、柱狀圖

"""
直方圖 與柱狀圖 區別
直方圖:---數據的分佈情況,橫軸是數據範圍,縱軸是落在範圍內的頻數,適用於大數據
柱狀圖:---統計類別數據的數量,橫軸是數據的類別,縱軸是類別的頻數,適用於少量數據,而且類別不宜過多
"""
import matplotlib.pyplot as plt
import numpy as np

# 加載數據
res = np.load("./國民經濟覈算季度數據.npz", allow_pickle=True)
columns = res['columns']
values = res['values']

print("columns:\n", columns)
print("values:\n", values)

# 1、創建畫布
plt.figure()
# 默認不支持中文,需要配置RC 參數
plt.rcParams['font.sans-serif'] = 'SimHei'
# 設置字體之後不支持負號,需要去設置RC參數更改編碼
plt.rcParams['axes.unicode_minus'] = False
# 2、繪圖
x = np.arange(1, 4)
y = values[0, 3:6]
# 參數 x    類別數的標號
# 參數y   各個類別所對應的類別的數量
# width 是代表類別之間間距的百分之多少
# color 代表柱子的顏色,可以傳帶個字符串,也可以傳一個列表
plt.bar(x, y, width=0.8, color=['r', 'g', 'b'])

# 設置刻度
plt.xticks(x, ["A", 'B', 'C'])

# 標註
for i, j in zip(x, y):
    plt.text(i, j + 100, "%.2f億元" % j, horizontalalignment='center')

# 柱狀圖不需要設置圖例
# 3、展示圖片
plt.show()

四、直方圖

import numpy as np
import matplotlib.pyplot as plt

# 繪製班級同學體重的分佈規律直方圖


# 1、創建畫布
plt.figure()

# 2、繪圖
# 假設咱們有20個同學
weight = np.array([40, 44, 48, 46, 51, 56, 58, 62, 69, 75, 89, 78, 69, 56, 88, 57, 49, 60, 50, 61])

# bins = 4  讓系統默認進行分組
# 可以自定義進行分組--等寬分組
# 計算最大值與最小值差值---極差
ptp = weight.max() - weight.min()
# 計算步長 並向上取整
step = np.ceil(ptp / 4)
# 設置等寬bins
bins = np.arange(weight.min(), weight.max() + step, step)

# print(bins)

plt.hist(weight, bins=bins, color='r', edgecolor='g')

# 設置x刻度
plt.xticks(bins)

# 增加網格曲線
plt.grid(True, axis='y', alpha=0.2)

# 不需要設置圖例

# 3、展示圖片
plt.show()

# 統計薪資分佈的直方圖
# 大家自己創建數據 [3000,20000]之間,創建25個人,自定義分組,去查看薪資分佈情況
# 需要寫出結論

五、餅圖

import matplotlib.pyplot as plt
import numpy as np

# 加載數據
res = np.load("./國民經濟覈算季度數據.npz", allow_pickle=True)
columns = res['columns']
values = res['values']

print("columns:\n", columns)
print("values:\n", values)

# 1、創建畫布
plt.figure()

# 默認不支持中文,需要配置RC 參數
plt.rcParams['font.sans-serif'] = 'SimHei'
# 設置字體之後不支持負號,需要去設置RC參數更改編碼
plt.rcParams['axes.unicode_minus'] = False

# 2、繪圖
#  x  繪製餅圖的真實數據
# explode  部分距離餅心的距離,即縫隙
# labels 餅圖各部分的名稱
# labeldistance  -名稱距離圓心的距離遠近
# color -餅圖各部分的顏色,可以是一個,也可以傳一個數組
# autopct ---佔比的顯示 以%.2f%%形式設置
#  pctdistance ---顯示的佔比數據距離圓心的遠近
# radius 餅的半徑
# shadow  設置陰影
# 設置數據
x = values[-1, 3:6]
# 設置縫隙---長度必須和x 一致
explode = (0.01, 0.01, 0.01)
# 設置label
labels = [tmp[:4] for tmp in columns[3:6]]
# 設置顏色
color = ['r', 'g', 'y']
# 設置顯示位數
autopct = "%.1f%%"

plt.pie(x, explode=explode, labels=labels, colors=color, autopct=autopct, shadow=True)

# 將餅子捏圓
plt.axis('equal')

# 3、圖形展示
plt.show()

# 場景:
# 部分與整體的關係
# 部分與部分的關係
# 部分不能太多,部分不能太多

六、箱線圖

import numpy as  np
import matplotlib.pyplot as plt

# 加載數據
res = np.load("./國民經濟覈算季度數據.npz", allow_pickle=True)

# 獲取數據
columns = res['columns']
values = res['values']

print("columns:\n", columns)
print("values:\n", values)

# 1、創建畫布
plt.figure()
# 默認不支持中文,需要配置RC 參數
plt.rcParams['font.sans-serif'] = 'SimHei'
# 設置字體之後不支持負號,需要去設置RC參數更改編碼
plt.rcParams['axes.unicode_minus'] = False

# 2、繪圖
# 給定x 的時候  每一個要畫的箱子的數據必須是一個整體元素
# x = (values[:, 3],values[:, 4],values[:, 5]) # 如果上面這種寫法報錯
x = list((list(values[:, 3]), list(values[:, 4]), list(values[:, 5])))

#  notch  就是開缺口,---牽扯到數學概念---置信區間
# meanline 均線
# showmeans  展示均線
# labels 名稱
labels = [tmp[:4] for tmp in columns[3:6]]
plt.boxplot(x, notch=True, meanline=True, showmeans=True, labels=labels)

plt.grid(True)

# 3、展示圖片
plt.show()

#  沒有什麼具體的應用場景,只要有需求都可以使用

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章