使用Excel和matplotlib繪製3D折線圖

一、前言

在希望將多個折線圖繪製在一起時,除了在2D平面上繪製多條折線圖外,我們還可以在3維立體空間裏去繪製它們,這樣可以更加清晰地觀察它們之間的差距。

本博文將使用Excel和基於python的matplotlib庫這兩種方式去完成3D折線圖的繪製。其中使用Excel軟件繪製3D折線圖不需要編程,操作簡單,而使用matplotlib庫繪製3D折線圖雖然需要編程但是也並不困難。故使用哪一種方式完成3D折線圖的繪製其實都可以,看讀者喜歡哪一種方法制作出來的效果。同時本文經過實驗發現這兩種方式在爲有較多數據的數據集繪製其3D折線圖時都存在得到的圖像表述效果不好的情況,故針對有較多數據的數據集而言可能不適合使用它們去繪製其3D折線圖。

 

二、實驗

2.1 使用Excel軟件繪製3D折線圖

如下圖所示,首先我們需要準備一個類似這樣的Excel數據表格

這裏我們使用的是使用Excel的RANDBETWEEN函數造出來的,某路段檢測點在週一到週三收集來的通過的交通車流量數據。表格中每一行的含義是在該行對應的時間跨度內週一到週三該檢測點檢測得到的通過該路段的車流量數據。注:這裏其實你換成你自己想要畫3D折線圖的數據集就可以,然後注意表格第一行要寫清楚每一列的含義。

在數據表格準備好後,我們選中數據表格中我們需要對其進行3D折線圖繪製的部分,然後如下圖所示,我們點擊Excel上方工具欄中的“插入”那一項,再點擊“折線圖”圖標,選擇並點擊其中的“三維折線圖”,這樣一個使用Excel繪製的3D折線圖就繪製完成啦。

繪製出來的折線圖是下面這個樣子:

 

 

2.2 使用基於python的matplotlib庫繪製3D折線圖

這裏我們直接上python代碼,代碼中有註釋,下面這段代碼的含義在一個3D空間內繪製3條折線圖(可以理解爲繪製某一個主體在週一到週三某個數據的情況),同樣使用的隨機生成的假數據。

import random
import matplotlib.pyplot as plt
import numpy as np
import pylab as mpl
mpl.rcParams['font.sans-serif'] = ['FangSong']  # 指定默認字體
mpl.rcParams['axes.unicode_minus'] = False  # 解決保存圖像是負號'-'顯示爲方塊的問題


fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
xs = list(range(0,24)) #數據在x軸上的座標


for z in range(3):#這裏我們設置z=0到2,代表週一到週三
    ys = np.random.rand(24)*100 #數據在y軸上的座標
    color = plt.cm.Set2(random.choice(range(plt.cm.Set2.N))) #得到一個隨機的顏色用於下面繪製該條折線圖
    ax.plot(xs, ys, zs=z, zdir='y',color=color,marker='o', alpha=0.8)

#在設置zdir = 'y'的情形下,其實y軸纔是z軸,然後z軸變成了y軸
ax.set_xlabel('X軸')
ax.set_ylabel('Z軸')
ax.set_zlabel('Y軸')

plt.show()

繪製出的3D折線圖如下:

2.3 在繪製相對較多的數據時這兩種方式的對比情況

這裏我們將數據點由前面的十幾個,二十幾個擴充到每一條折線上有288個數據,然後使用上述兩種方法進行繪圖,得到的圖形如下:

Excel繪製的3D折線圖如下:

matplotlib繪製的3D折線圖如下:

可見,在數據體量較大的數據集上,Excel和matplotlib的繪製效果均不太好,可能使用matplotlib繪製出來的3D折線圖效果更好一點。

 

三、總結

本文使用Excel軟件和基於python的matplotlib庫完成了繪製數據集3D折線圖的工作。文中實驗證明,在數據量較小的情況下,使用上述兩種方式繪製3D折線圖得到的效果均較好,而在數據量較大的情況下上述兩種方式繪製出來的圖像其表徵效果均不太好,可能需要進一步的優化或選擇其他方式進行繪製。

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