CSDN話題挑戰賽第1期
活動詳情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f
參賽話題:Python精彩第三方模塊推薦
話題描述:Matplotlib庫以漸進、交互式方式實現數據可視化,使數據更直觀,使其一目了然,下面結合實際項目繪制幾種常見的圖形類型。
個性簽名:整個建築最重要的是地基,地基不穩,地動山搖。而學技術更要扎穩基礎,關注我,帶你穩扎每一板塊鄰域的基礎。
博客主頁:七歸的博客
收錄專欄:Python三劍客之江湖雲
南來的北往的,走過路過千萬別錯過,錯過本篇,“精彩”可能與您失之交臂yo
Triple attack(三連擊):Comment,Like and Collect—>Attention
Matplotlib庫是python優秀的數據可視化庫,是python數據分析必備利器,出色的數據可視化會讓你的數據分析等工作錦上添花,同時你也會感受到數據可視化之美。在現實世界中總會存在各種數值數據,我們想將這些數值數據編碼成圖、線、點、條等,以便直觀地顯示這些數值中包含的信息,同時可以使復雜分布的數據更容易被理解和應用。這一過程被廣泛應用於各種場合之中,包括對比分析、增長率跟蹤、市場分布、民意調查等。
使用pylab或pyplot繪圖的一般過程為:
首先生成或讀入數據,然後根據實際需要繪制折線圖、散點圖、柱狀圖、餅狀圖、雷達圖或三維曲線和曲面,接下來設置:
已知學校附近某燒烤店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()
輸出結果:
燒烤店的數據繪制柱狀圖,要求可以設置每個柱的顏色、內部填充符號、描邊效果和標注文本。
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()
輸出結果:
已知某班級的數據結構、線性代數、英語和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()
輸出結果:
假設通過爬蟲你獲取到了長沙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()
輸出結果:
為了分析家庭開銷的詳細情況,也為了更好地進行家庭理財,張三對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()
輸出結果:
數據可視化是機器學習的核心,利用它有助於制定正確的策略來理解數據。數據的視覺表示幫助我們選擇正確的算法。數據可視化的主要目標之一就是用圖和表清晰地表達出數據,以便我們更准確、更有效地交流信息。
CSDN話題挑戰賽第1期
活動詳情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f