1. 程式人生 > 實用技巧 >H5 移動端開發注意事項

H5 移動端開發注意事項

Matplotlib的概念和簡單應用

一、Matplotlib的概念

Matplotlib 是 Python 的繪相簿。
它可與 NumPy 一起使用,提供了一種有效的 MatLab 開源替代方案。
它也可以和圖形工具包一起使用,如 PyQt 和 wxPython。

Matplotlib的特點:

1.是專門用於開發2D圖示(包括3D圖表)

2.使用起來極其簡單

3.以漸進、互動方式實現資料視覺化

  • matplotlib架構:

    • 上層呼叫下層

    • 後端:實現繪圖區域(分配畫圖資源)

    • 美工:

      • figure、axes、axis
      • xticks,yticks
      • xlabel,ylabel
      • plot(引數)
      • lengend
    • 指令碼:pytplot

      • 美工層

        • figure:指整個圖形(包括所有元素,比如標題、線等)

        • axes(座標系):資料的繪圖區域

        • axis(座標軸):座標系中的一條軸,包含大小限制、刻度和刻度標籤

          特點

          • 一個figure可以包含多個axes(座標系)
          • 一個座標系可以包含多個座標軸

二、Matplotlib的簡單應用

1、折線圖

  • 折線圖:點的座標(橫座標,縱座標)
案例1:實現溫度變化(折線圖)繪製

步驟:

1.先生成figure

2.準備資料,折線圖點,x,y座標個數一一對應

3.顯示呼叫show()

import matplotlib.pyplot as plt
plt.
figure() # 畫幕布 plt.plot([1,2,3,4,5,6,7],[17,17,18,15,11,11,13])# 橫座標,縱座標 plt.savefig("./test.png") # 儲存位置 plt.show()# 顯示

效果如下:

案例2:顯示上海和北京的溫度變化(同一張圖)
import matplotlib.pyplot as plt
import random
plt.rcParams['font.sans-serif']=['SimHei'] #顯示中文標籤
plt.rcParams['axes.unicode_minus']=False
plt.figure(
figsize=(20,10),dpi=80) # 畫幕布 # 準備資料 x = range(60) x_ch = ['11點{}分'.format(i) for i in x] y_shanghai = [random.uniform(15,18) for i in range(60)] # 變化範圍15~18 # 準備北京的溫度 y_beijing = [random.uniform(1,3) for i in range(60)] # 變化範圍1~3 y_ticks = range(40) plt.plot(x,y_shanghai,label = '上海') # 顯示北京的溫度 plt.plot(x,y_beijing,color = 'r',linestyle = '--',label = '北京') # 修改刻度值 # 指定顯示的x刻度的列表 # 第一個引數:必須是指 # 第二個引數:指定跟第一個引數對應的中文 plt.xticks(x[::5],x_ch[::5]) plt.yticks(y_ticks[::5]) # 增加標題,座標描述 plt.xlabel('時間') plt.ylabel('溫度') plt.title('北京和上海:從11點~12點的溫度變化情況') # 增加圖例的顯示 plt.legend(loc = 'best') plt.savefig("./test2.png") plt.show()

效果如下:


案例3:顯示北京和上海的溫度變化(不同圖)
import matplotlib.pyplot as plt
import random
plt.rcParams['font.sans-serif']=['SimHei'] #顯示中文標籤
plt.rcParams['axes.unicode_minus']=False
# plt.figure(figsize=(20,10),dpi=80) # 畫幕布
# 當在多個ax裡面畫圖的時候,標籤,刻度,在相應的座標系裡指定
fig,ax=plt.subplots(nrows=1,ncols=2,figsize=(20,8))
# 準備資料
x = range(60)
x_ch = ['11點{}分'.format(i) for i in x]
y_shanghai = [random.uniform(15,18) for i in range(60)] # 變化範圍15~18
# 準備北京的溫度
y_beijing = [random.uniform(1,3) for i in range(60)] # 變化範圍1~3
y_ticks = range(40)
# plt.plot(x,y_shanghai,label = '上海')
ax[0].plot(x,y_shanghai,label = '上海')
# 顯示北京的溫度
# plt.plot(x,y_beijing,color = 'r',linestyle = '--',label = '北京')
ax[1].plot(x,y_beijing,color = 'r',linestyle = '--',label = '北京')
# 修改刻度值
# 指定顯示的x刻度的列表
# 第一個引數:必須是指
# 第二個引數:指定跟第一個引數對應的中文
# plt是對整理座標系處理,ax是對每個座標系處理
# plt.xticks(x[::5],x_ch[::5])
ax[0].set_xticks(x[::5],x_ch[::5])
ax[1].set_xticks(x[::5],x_ch[::5])
# plt.yticks(y_ticks[::5])
ax[0].set_yticks(y_ticks[::5])
ax[1].set_yticks(y_ticks[::5])
# 增加標題,座標描述
# plt.xlabel('時間')
ax[0].set_xlabel('時間')
ax[1].set_xlabel('時間')
# plt.ylabel('溫度')
ax[0].set_ylabel('溫度')
ax[1].set_ylabel('溫度')
# plt.title('北京和上海:從11點~12點的溫度變化情況')
ax[0].set_title('中午從11點~12點的溫度變化情況')
ax[1].set_title('中午從11點~12點的溫度變化情況')
# 增加圖例的顯示
# plt.legend(loc = 'best')
ax[0].legend(loc = 'best')
ax[1].legend(loc = 'best')
plt.savefig("./test3.png")
plt.show()

效果如下:

2、條形圖

plt.bar(*x**,* *height**,* *width=0.8**,* *bottom=None**, ***,* *align='center'**,* *data=None**, ****kwargs*)

案例1:顯示每部電影的票房
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #顯示中文標籤
plt.rcParams['axes.unicode_minus']=False
# 柱狀圖
plt.figure(figsize=(20,8))
# 電影名字,每部電影對應的票房
movie_name = ['戰狼2','哪吒之魔童降世','流浪地球','復仇者聯盟4:終局之戰','紅海行動']
x = range(len(movie_name))
y = [5639,4934,4618,4205,3622]
# 使用plt.bar顯示
# plt.bar 填入的x座標必須全是數字
plt.bar(x,y,0.2,color = ['b','r','g','y','c','m'])
# 修改刻度,以及電影名字顯示
plt.xticks(x,movie_name)
plt.savefig('./test4')
plt.show()

效果如下:

案例2:顯示每日票房與每週票房的對比
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #顯示中文標籤
plt.rcParams['axes.unicode_minus']=False
# 柱狀圖
plt.figure(figsize=(20,8))
movie_name = ['戰狼2','哪吒之魔童降世','流浪地球']
first_day = [10587.6,10062.5,1275.7]
first_weekend = [36224.9,34479.6,11830]
x = range(len(movie_name))
# 使用plt.bar顯示
plt.bar(x,first_day,width=0.2,label='首日票房')
plt.bar([i+0.2 for i in x],first_weekend,width=0.2,label='首周票房')
plt.xticks([i+0.1 for i in x],movie_name)
plt.legend(loc='best')
plt.title('首日票房與首周票房對比')
plt.savefig('./test5')
plt.show()

效果如下:

3、直方圖

plt.hist

plt.grid
  • 組數:在統計資料時,我們把資料按照不同的範圍分成幾個組,分成的組的個數稱為組數
  • 組距:每一組兩個端點的差

步驟:

1.設定組距

2.設定組數:組數=極差/組距

案例1:顯示豆瓣電影評分分佈直方圖
# 組距為1
# 建立figure
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #顯示中文標籤
plt.rcParams['axes.unicode_minus']=False
plt.figure(figsize=(20,8))
score = [8.7,8.2,8.1,8,8,7.9,7.8,7.8,7.8,7.7,7.6]
bins = 0.05
group = int((max(score)-min(score))/bins)
# 畫直方圖
plt.hist(score,group,density=True) # density 頻率 預設是0
# 指定刻度和步長
plt.xticks(score[::1])
plt.title('電影評分直方圖')
plt.xlabel('電影評分')
plt.ylabel('電影資料量')
# 新增網格
plt.grid(True,linestyle = '--',alpha=1) # alpha表示格子清晰度
plt.savefig('./test6')
plt.show()

效果如下:

直方圖的場景
  • 用於表示分佈情況
  • 通過直方圖還可以觀察和估計哪些資料比較集中,異常或者孤立的資料分佈在何處
  • 利於較小資料的分析
  • 例如:使用者年齡分佈,商品價格分佈
直方圖和柱狀圖對比
  • 直方圖:適合x座標資料:連續的資料,資料量大
  • 柱狀圖:x座標,類別。資料量較小。

4、餅圖

plt.pie(x,labels=,autopct=,colors)

案例1:顯示每個電影的場次佔比
# 電影的排片佔比顯示
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #顯示中文標籤
plt.rcParams['axes.unicode_minus']=False
# 建立figure
plt.figure(figsize=(20,8))
movie_name = ['戰狼2','哪吒之魔童降世','流浪地球','復仇者聯盟4:終局之戰','紅海行動']
# 場次
place_count = [60605,54546,45819,28243,13270]
# 顯示餅圖
plt.pie(place_count,labels=movie_name,autopct='%1.2f%%',colors=['b','r','y','g','c'])
plt.legend(loc='best')# 新增圖例
plt.axis('equal')# 變成圓形
plt.savefig('./test7')
plt.show()

效果如下:

應用場景

分類的佔比情況

例如:班級男女分佈佔比,公司銷售額佔比

說明:

資料來源:豆瓣網和電影網

5、各類統計圖的比較:

  • 條形統計圖是用一個單位長度表示一定的數量,根據數量的多少畫出長短不同的直條,它能很快的看出各種數量的多少;
  • 折線統計圖是用一個單位長度表示一定的數量,根據數量的多少描出各點,然後用線段依次連線起來,它不但可以看出各種數量的多少,而且可以看出數量的增減變化情況;
  • 扇形統計圖是用一個圓表示整體,用圓內各個扇形的大小表示各部分佔總數的百分比,它可以清楚看出各種數量佔整體的百分比。