程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

學會這個python庫,幾個項目就摸清了這個套路

編輯:Python

CSDN話題挑戰賽第1期
活動詳情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f
參賽話題:Python精彩第三方模塊推薦
話題描述:Matplotlib庫以漸進、交互式方式實現數據可視化,使數據更直觀,使其一目了然,下面結合實際項目繪制幾種常見的圖形類型。

個性簽名:整個建築最重要的是地基,地基不穩,地動山搖。而學技術更要扎穩基礎,關注我,帶你穩扎每一板塊鄰域的基礎。
博客主頁:七歸的博客
收錄專欄:Python三劍客之江湖雲
南來的北往的,走過路過千萬別錯過,錯過本篇,“精彩”可能與您失之交臂yo
Triple attack(三連擊):Comment,Like and Collect—>Attention

文章目錄

    • 1、Matplotlib庫的簡介
    • 2、Matplotlib庫的基礎使用
    • 3、Matplotlib項目實戰
      • 項目1:繪制折線圖與柱狀圖實戰
            • 函數hist()——用於繪制折線圖
            • 函數bar()——用於繪制柱狀圖
      • 項目2:繪制餅狀圖實戰
            • 函數pie()——用於繪制餅狀圖
      • 項目3:繪制散點圖實戰
            • 函數scatter() ——尋找變量之間的關系
      • 項目4:繪制氣泡圖實戰
            • 函數scatter()——用於繪制氣泡圖
    • 4、學習分享

1、Matplotlib庫的簡介

Matplotlib庫是python優秀的數據可視化庫,是python數據分析必備利器,出色的數據可視化會讓你的數據分析等工作錦上添花,同時你也會感受到數據可視化之美。在現實世界中總會存在各種數值數據,我們想將這些數值數據編碼成圖、線、點、條等,以便直觀地顯示這些數值中包含的信息,同時可以使復雜分布的數據更容易被理解和應用。這一過程被廣泛應用於各種場合之中,包括對比分析、增長率跟蹤、市場分布、民意調查等。

2、Matplotlib庫的基礎使用

使用pylab或pyplot繪圖的一般過程為

首先生成或讀入數據,然後根據實際需要繪制折線圖、散點圖、柱狀圖、餅狀圖、雷達圖或三維曲線和曲面,接下來設置:

  • 坐標軸標簽(可以使用matplotlib.pyplot模塊的xlabel()、ylabel()
  • 函數或軸域的set_xlabel()、set_ylabel()方法)
  • 坐標軸刻度(可以使用matplotlib.pyplot模塊的xticks()、yticks()
  • 函數或軸域的set_xticks()、set_yticks()方法)
  • 圖例(可以使用matplotlib.pyplot模塊的legend()函數)
  • 標題(可以使用matplotlib.pyplot模塊的title()函數)等圖形屬性,最後顯示或保存繪圖結果。

3、Matplotlib項目實戰

項目1:繪制折線圖與柱狀圖實戰

函數hist()——用於繪制折線圖
  • 函數功能:表示某個數值變量隨著時間的推移而形成的趨勢
  • 調用方法:plt.plot(x,y,color,linestyle,marker)
  • 參數說明
    • x:指定折線圖的x軸數據;
    • y:指定折線圖的y軸數據;
    • color 設置線的顏色
    • linestyle 設置線的樣式
    • marker 標記樣式

已知學校附近某燒烤店2019年每個月份的營業額。編寫程序繪制折線圖對該燒烤店全年營業額進行可視化,使用藍色點劃線連接每個月份的數據,並在每個月份的數據處使用圓圈標記。

import matplotlib.pyplot as plt
# 加載字體
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默認字體
# 月份和每月營業額
month = list(range(1, 13))
money = [4.2, 2.7, 5.8, 5.7, 7.3, 10.2,
18.7, 16.6, 20.5, 17.0, 9.8, 6.9]
plt.plot(month, money, c='b', linestyle='-.', marker='o')
plt.xlabel('月份')
plt.ylabel('營業額(萬元)')
plt.title('燒烤店2019年營業額變化趨勢圖')
# 緊縮四周空白,擴大繪圖區域可用面積
plt.tight_layout()
plt.show()

輸出結果:

函數bar()——用於繪制柱狀圖
  • 函數功能:在x軸上繪制定性數據的分布特征。
  • 調用方法:plt.bar(x,y)
  • 參數說明
    • x: 標示在x軸上的定性數據的分布特征
    • y: 每種定性數據類別的數量

燒烤店的數據繪制柱狀圖,要求可以設置每個柱的顏色、內部填充符號、描邊效果和標注文本。

import matplotlib.pyplot as plt
# 加載字體
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默認字體
# 月份和每月營業額
month = list(range(1, 13))
money = [4.2, 2.7, 5.8, 5.7, 7.3, 10.2,
18.7, 16.6, 20.5, 17.0, 9.8, 6.9]
# 繪制每個月份的營業額
for x, y in zip(month, money):
plt.bar(x, y,
color='y', width=0.6,
edgecolor='c', linestyle='-.', linewidth=1.5)
plt.text(x - 0.3, y + 0.2, '%.1f' % y)
plt.xlabel('月份')
plt.ylabel('營業額(萬元)')
plt.title('燒烤店營業額')
# 設置x軸刻度
plt.xticks(month)
# 設置y軸刻度
plt.ylim(0, 22)
plt.show()

輸出結果:

項目2:繪制餅狀圖實戰

函數pie()——用於繪制餅狀圖
  • 函數功能:繪制定性數據的不同類型的百分比
  • 調用方法:plt.pie(x)
  • 參數說明
    • x: 定性數據的不同類型的百分比

已知某班級的數據結構、線性代數、英語和Python課程考試成績,要求繪制餅狀圖顯示每門課的成績中優(85分以上)、及格(60-84分)、不及格(60分以下)的占比。

from itertools import groupby
import matplotlib.pyplot as plt
# 設置圖形中使用中文字體
plt.rcParams['font.sans-serif'] = ['simhei']
# 每門課程的成績
scores = {
'數據結構': [89, 70, 49, 87, 92, 84, 73, 71, 78, 81, 90, 37,
77, 82, 81, 79, 80, 82, 75, 90, 54, 80, 70, 68, 61],
'線性代數': [70, 74, 80, 60, 50, 87, 68, 77, 95, 80, 79, 74,
69, 64, 82, 81, 78, 90, 78, 79, 72, 69, 45, 70, 70],
'英語': [83, 87, 69, 55, 80, 89, 96, 81, 83, 90, 54, 70, 79,
66, 85, 82, 88, 76, 60, 80, 75, 83, 75, 70, 20],
'Python': [90, 60, 82, 79, 88, 92, 85, 87, 89, 71, 45, 50,
80, 81, 87, 93, 80, 70, 68, 65, 85, 89, 80, 72, 75]}
# 自定義分組函數,在下面的groupby()函數中使用
def splitScore(score):
if score >= 85:
return '優'
elif score >= 60:
return '及格'
else:
return '不及格'
# 統計每門課程中優、及格、不及格的人數
# ratios的格式為{'課程名稱':{'優':3, '及格':5, '不及格':1},...}
ratios = dict()
for subject, subjectScore in scores.items():
ratios[subject] = {
}
# groupby()函數需要對原始分數進行排序才能正確分類
for category, num in groupby(sorted(subjectScore), splitScore):
ratios[subject][category] = len(tuple(num))
# 創建4個子圖
fig, axs = plt.subplots(2, 2)
axs.shape = 4,
# 依次在4個子圖中繪制每門課程的餅狀圖
for index, subjectData in enumerate(ratios.items()):
# 選擇子圖
plt.sca(axs[index])
subjectName, subjectRatio = subjectData
plt.pie(list(subjectRatio.values()), # 每個扇形對應的數值
labels=list(subjectRatio.keys()), # 每個扇形的標簽
autopct='%1.1f%%') # 百分比顯示格式
plt.xlabel(subjectName)
plt.legend()
plt.gca().set_aspect('equal') # 設置縱橫比相等
plt.show()

輸出結果:

項目3:繪制散點圖實戰

函數scatter() ——尋找變量之間的關系
  • 函數功能:散點圖,尋找變量之間的關系
  • 調用方法:plt.scatter(x,y,c=‘b’,label = ‘scatter figure’)
  • 參數說明
    • x: x軸上的數值
    • y: y軸上的數值
    • c: 散點圖中的標記顏色
    • label: 標記圖形內容的標簽文本

假設通過爬蟲你獲取到了長沙2019年4,10月份每天白天的最高氣溫(分別位於列表a,b),那麼此時如何尋找出氣溫和隨時間變化的某種規律
a = [11,17,16,11,12,11,12,13,10,14,8,13,12,15,14,17,18,21,16,17,30,14,15,15,15,19,21,22,22,22,23]
b = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,15,10,11,13,12,13,6]

import matplotlib.pyplot as plt
# 設置圖形中使用中文字體
plt.rcParams['font.sans-serif'] = ['simhei']
# 構建x,y
y_4 = [11, 17, 16, 11, 12, 11, 12, 13, 10, 14, 8, 13, 12, 15, 14, 17, 18, 21, 16, 17, 30, 14, 15, 15, 15, 19, 21, 22,
22, 22, 23]
y_10 = [26, 26, 28, 19, 21, 17, 16, 19, 18, 20, 20, 19, 22, 23, 17, 20, 21, 20, 22, 15, 11, 15, 5, 13, 15, 10, 11, 13,
12, 13, 6]
x_4 = range(1, 32) # 1~31
x_10 = range(51, 82) # 51~81
plt.scatter(x_4, y_4)
plt.scatter(x_10, y_10)
# 刻度:4月1號... 4月31號 10月1號..10月31號
x_t = list(x_4) + list(x_10)
x_l = ["4月{}號".format(i) for i in x_4]
x_l += ["10月{}號".format(i - 50) for i in x_10]
plt.xticks(x_t[::3], x_l[::3], rotation=90)
plt.tight_layout()
plt.show()

輸出結果:

項目4:繪制氣泡圖實戰

函數scatter()——用於繪制氣泡圖
  • 函數功能:二維數據借助氣泡大小展示三維數據
  • 調用方法:plt.scatter(x,y,s=size,c=color,cmap=cmap)
  • 參數說明
    • x: x軸上的數值
    • y: y軸上的數值
    • s: 標記的大小
    • c: 標記的顏色
    • cmap: 標記的顏色映射表

為了分析家庭開銷的詳細情況,也為了更好地進行家庭理財,張三對2018年全年每個月的蔬菜、水果、肉類、日用品、旅游、隨禮等各項支出做了詳細記錄。編寫程序,根據張三的家庭開銷情況繪制氣泡圖。

import matplotlib.pyplot as plt
import pandas as pd
# 設置繪圖風格
plt.style.use('ggplot')
# 處理中文亂碼
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
x = list(range(1, 13))
# 每月支出數據
data = pd.DataFrame({

'蔬菜': [1350, 1500, 1330, 1550, 900, 1400, 980, 1100, 1370, 1250, 1000, 1100],
'水果': [400, 600, 580, 620, 700, 650, 860, 900, 880, 900, 600, 600],
'肉類': [480, 700, 370, 440, 500, 400, 360, 380, 480, 600, 600, 400],
'日用': [1100, 1400, 1040, 1300, 1200, 1300, 1000, 1200, 950, 1000, 900, 950],
'衣服': [650, 3500, 0, 300, 300, 3000, 1400, 500, 800, 2000, 0, 0],
'旅游': [4000, 1800, 0, 0, 0, 0, 0, 4000, 0, 0, 0, 0],
'隨禮': [0, 4000, 0, 600, 0, 1000, 600, 1800, 800, 0, 0, 1000]
})
plt.figure(figsize=(10, 10))
# 1、繪制蔬菜的氣泡圖
plt.scatter(x=x,
y=data['蔬菜'],
s=2 * data['蔬菜'],
color='k', label='蔬菜', alpha=0.6
)
# 2、繪制水果的氣泡圖
plt.scatter(x=x,
y=data['水果'],
s=2 * data['水果'],
color='r', label='水果', alpha=0.6
)
# 3、繪制肉類的氣泡圖
plt.scatter(x=x,
y=data['肉類'],
s=2 * data['肉類'],
color='g', label='肉類', alpha=0.6
)
# 4、繪制日用的氣泡圖
plt.scatter(x=x,
y=data['日用'],
s=2 * data['日用'],
color='b', label='日用', alpha=0.6
)
# 5、繪制衣服的氣泡圖
plt.scatter(x=x,
y=data['衣服'],
s=2 * data['衣服'],
color='c', label='衣服', alpha=0.6
)
# 6、繪制旅游的氣泡圖
plt.scatter(x=x,
y=data['旅游'],
s=2 * data['旅游'],
color='m', label='旅游', alpha=0.6
)
# 7、繪制隨禮的氣泡圖
plt.scatter(x=x,
y=data['隨禮'],
s=2 * data['隨禮'],
color='y', label='隨禮', alpha=0.6
)
# 添加x軸和y軸標簽
plt.xlabel('月份')
plt.ylabel('支出')
# 添加標題
plt.title('每月開銷情況氣泡圖')
# 添加圖例
plt.legend()
# 設置縱坐標的刻度范圍
plt.ylim((0, 7000))
# 緊縮四周空白,擴大繪圖區域可用面積
plt.tight_layout()
# 顯示圖形
plt.show()

輸出結果:

4、學習分享

數據可視化是機器學習的核心,利用它有助於制定正確的策略來理解數據。數據的視覺表示幫助我們選擇正確的算法。數據可視化的主要目標之一就是用圖和表清晰地表達出數據,以便我們更准確、更有效地交流信息。

CSDN話題挑戰賽第1期
活動詳情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved