Python實踐:基於Matplotlib實現某產品全年銷量資料視覺化

华为云开发者联盟發表於2024-03-18

本文分享自華為雲社群《畫圖實戰-Python實現某產品全年銷量資料多種樣式視覺化》,作者:蟲無涯。

學習心得

  • 有時候我們需要對某些資料進行分析,得到一些視覺化效果圖,而這些效果圖可以直觀展示給我們資料的變化趨勢;

  • 比如某產品的月銷量資料、銷售額的地區分佈、銷售增長和季節的變化情況、產品的貢獻度分析等等;

  • 本文主要針對某產品全年銷量資料,繪製各種不同樣式的圖表,以不同樣式展示資料;

  • 學習本文建議對Python的matplotlib第三庫有一定的瞭解。

Matplotlib說明

什麼是Matplotlib?

  • Matplotlib是一個Python的2D繪相簿,它以各種硬複製格式和跨平臺的互動式環境生成出版質量級別的圖形;

  • Matplotlib可生成繪圖、直方圖、功率譜、條形圖、錯誤圖、散點圖、折線圖等;

  • Matplotlib是Python生態系統的一個重要組成部分,是用於視覺化的繪相簿;

  • Matplotlib提供了一整套和matlab相似的命令API和視覺化介面,可以生成出版質量級別的精美圖形。

Matplotlib特性

  • Matplotlib圖表中的元素包含以下內容:

A、X軸和Y軸;B、X軸和Y軸刻度;C、X軸和Y軸標籤;D、繪圖區域。

  • 關於hold屬性:

A、hold屬性預設為True,可在一幅圖中繪製多個曲線;B、將hold屬性修改為False,每一個plot都會覆蓋前面的plot(這種方法不推薦,建議使用預設的)。

  • 常用方法:

A、可使用grid方法為圖新增網格線;B、還可以使用其他方法,如axis方法、xlim方法、ylim方法、legend方法;

  • 關於配置方面:

matplotlib配置資訊是從配置檔案讀取的。在配置檔案中可以為matplotlib的幾乎所有屬性指定永久有效的預設;主要為永久配置和動態配置。

Matplotlib安裝

直接使用pip安裝即可:

pip install matplotlib

產品訂單量-折線圖

某產品全年訂單量資料

  • 以下是某產品全年的銷量資料:

  • 全年12個月資料中,每個月對應有產品的訂單量和退貨量。

資料提取和分析

  • 我們可以把月份用以下變數表示:

month = ["Jan", "Feb", "Mar", "Apr", 
         "May", "Jun", "Jul", "Aug", 
         "Sep", "Oct", "Nov", "Dec"]
         
print(f"月份為:{month}")
# 輸出:月份為:['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

複製執行

  • 產品對應的銷量分兩種,一種是訂單量,一種是退貨量,可用兩個變數來存放資料:

# 訂單量
indent = [15, 33, 42, 50, 115, 20, 86, 66, 59, 43, 39, 50]

# 退貨量
returned = [6, 13, 18, 23, 55, 98, 42, 31, 25, 22, 17, 24]

print(f"每月訂單量為:{indent}")
print(f"每月退貨量為:{returned}")

繪製折線圖

  • 折線圖中我們繪製兩條折線,一條是每月的退貨量,一條是每月的訂單量;

  • 而折線就是座標組成,這裡就需要多個兩個座標,比如x1、y1、x2、y2;

  • 針對我們提供的資料,可以把座標定義為:

x1 = month y1 = indentx2= month y2 = returned

  • 那對應的程式碼為:

import subprocess
import sys
subprocess.check_call([sys.executable, "-m", "pip", "install", "matplotlib"])
import matplotlib.pyplot as plt

month = ["Jan", "Feb", "Mar", "Apr",
         "May", "Jun", "Jul", "Aug",
         "Sep", "Oct", "Nov", "Dec"]
print(f"月份為:{month}")

# 訂單量
indent = [15, 33, 42, 50, 115, 20, 86, 66, 59, 43, 39, 50]

# 退貨量
returned = [6, 13, 18, 23, 55, 98, 42, 31, 25, 22, 17, 24]
print(f"每月訂單量為:{indent}")
print(f"每月退貨量為:{returned}")

# 繪製折線圖
plt.plot(month, indent, label='訂單量',
         linewidth=2, color='r', marker='o',
        markerfacecolor='blue', markersize=8)

plt.plot(month, returned, label='退貨量',
        linewidth=2, color='y', marker='o',
        markerfacecolor='blue', markersize=8)

plt.xlabel('月份')
plt.ylabel('數量')
plt.title('某產品全年訂單銷售情況')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.legend()
# plt.show()
plt.savefig("plot.jpg")
  • 執行上邊程式碼後折線圖的效果為:

請在此新增圖片描述

產品訂單&銷售額-條形圖

某產品全年訂單&銷售額資料

  • 以下是某產品全年的銷量資料:

  • 圖中的意思為對應的訂單量的銷售額和對應的退貨量的價格。

繪製條形圖

  • 條形圖中我們繪製雙條形,一條是每月的退貨量及對應價格,一條是每月的訂單量和銷售額;

  • 針對我們提供的資料,可以把座標定義為:

x1 = indent y1 = m1x2= returned y2 = m2

  • 那對應的程式碼為:

import subprocess
import sys
subprocess.check_call([sys.executable, "-m", "pip", "install", "matplotlib"])
import matplotlib.pyplot as plt

# 訂單量
indent = [10, 30, 50, 70, 90, 110, 130, 150]
# 銷售額
m1 = [5, 7, 9, 11, 13, 15, 17, 19]

# 退貨量
returned = [20, 40, 60, 80, 100, 120, 140, 160]
# 價格
m2 = [3, 5, 7, 9, 11, 13, 15, 17]

# 繪製折線圖
plt.bar(indent, m1, width=3, label='訂單量-銷售額', color='r', )
plt.bar(returned, m2, width=3, label='退貨量-價格', color='y')

plt.xlabel('數量')
plt.ylabel('價格')
plt.title('某產品全年訂單&銷售額情況')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.legend()
# plt.show()
plt.savefig("plot.jpg")
  • 執行以上程式碼後效果圖為:

請在此新增圖片描述

注意:後續的資料和操作邏輯和前邊的一樣,為了快速瞭解其使用,不再描述詳細的資料,僅用示例說明。

某產品xx-直方圖

  • 那對應的程式碼為:

import subprocess
import sys
subprocess.check_call([sys.executable, "-m", "pip", "install", "matplotlib"])
import matplotlib.pyplot as plt

data = [15, 33, 42, 50, 115, 20, 86, 66, 59, 43, 39, 50]
x = range(0, 100, 2)

# 繪製直方圖
plt.hist(data, x, rwidth=3, label='直方圖', color='y')

plt.xlabel('X')
plt.ylabel('Y')
plt.title('直方圖')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.legend()
# plt.show()
plt.savefig("plot.jpg")
  • 執行程式碼後效果如下:

請在此新增圖片描述

某產品xx-散點圖

  • 那對應的程式碼為:

import subprocess
import sys
subprocess.check_call([sys.executable, "-m", "pip", "install", "matplotlib"])
import matplotlib.pyplot as plt

data = [15, 33, 42, 50, 115, 20, 86, 66, 59, 43, 39, 50]
x = range(0, len(data))

# 繪製散點圖
plt.scatter(x, data, label='散點圖', s=15)

plt.xlabel('X')
plt.ylabel('Y')
plt.title('散點圖')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.legend()
# plt.show()
plt.savefig("plot.jpg")
  • 執行程式碼後效果為:

請在此新增圖片描述

某產品xx-餅圖

  • 對應程式碼為:

import subprocess
import sys
subprocess.check_call([sys.executable, "-m", "pip", "install", "matplotlib"])
subprocess.check_call([sys.executable, "-m", "pip", "install", "numpy"])
import matplotlib.pyplot as plt
import numpy as np

data = np.array([10, 20, 15, 15, 5, 5, 30])

plt.pie(data,
        labels=['P1', 'P2', 'P3', 'P4', 'P5', 'P6', 'P7'],
        colors=["#8B008B", "#FF1493", "#4B0082", "#B0C4DE", "#E1FFFF", "#008080", "#00FF7F"],
        explode=(0, 0, 0.3, 0, 0, 0.2, 0), 
        autopct='%.2f%%',
        )
plt.title('餅圖')
plt.rcParams['font.sans-serif'] = ['SimHei']
# plt.show()
plt.savefig("plot.jpg")
  • 執行程式碼效果為:

請在此新增圖片描述

某產品xx-多圖效果

  • 對應程式碼為:

import subprocess
import sys
subprocess.check_call([sys.executable, "-m", "pip", "install", "matplotlib"])
subprocess.check_call([sys.executable, "-m", "pip", "install", "numpy"])
import matplotlib.pyplot as plt
import numpy as np

x = np.array([10, 50])
y = np.array([10, 80])
plt.subplot(2, 2, 1)
plt.plot(x, y)
plt.title("圖1")

x = np.array([10, 20, 30, 40])
y = np.array([10, 30, 50, 110])
plt.subplot(2, 2, 2)
plt.plot(x, y)
plt.title("圖2")
x = np.array([10, 20, 30, 40])
y = np.array([50, 60, 70, 80])
plt.subplot(2, 2, 3)
plt.plot(x, y)
plt.title("圖3")
x = np.array([20, 25, 30, 35])
y = np.array([40, 45, 50, 55])
plt.subplot(2, 2, 4)
plt.plot(x, y)
plt.title("圖4")

plt.suptitle("多圖顯示")
plt.rcParams['font.sans-serif'] = ['SimHei']
#plt.show()
plt.savefig("plot.jpg")
  • 執行程式碼後的效果為:

請在此新增圖片描述

總結

Python實現某產品全年銷量資料多種樣式視覺化,主要是應用了python的matplotlib庫進行繪製各種圖表,除了以上的幾種圖表,還有柱狀圖、網格圖等等。學習的時候建議使用真實的資料,可以真正達到分析問題的效果。

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章