相關學習推薦:python教學
#先來跟大家介紹另一個很有用的資料分析庫——matplotlib。
如果你在大學參加過數學建模競賽或是用過MATLAB的話,相較會對這款軟體中的畫圖功能印象深刻。 MATLAB可以做出各種函數以及數值分佈影像非常的好用和方便。如果你沒用過呢也沒關係,知道這麼一回事就好了。 MATLAB雖然好用,但畢竟是收費軟體,而且比起MATLAB,許多人比較喜歡Python的語法。
所以呢MATLAB就被惦記上了,後來有大神仿照MATLAB當中的畫圖工具,也在Python當中開發了一個類似的作圖工具。這也就是我們今天這篇文章要講的matplotlib,也是Python、數據分析以及機器學習領域當中使用最廣泛的作圖工具包,幾乎沒有之一。前段時間不是美國政府搞事情,導致MATLAB公司宣布對中國的幾所高校禁止使用MATLAB嘛,有一些人就提出來說我們可以使用Python當中的一些開源工具代替,當然MATLAB當中還有很多其他厲害的功能,Python可能不一定能代替,但至少在作圖這個領域是沒問題的。
matplotlib廣泛流行的一個非常主要的原因就是它方便、好用,我們來看幾個經典的例子就知道了,短短幾行程式碼就可以做出非常高品質的圖。
我們使用的是matplotlib這個套件下的pyplot這個函式庫,從名字上我們也看得出來它是Python函式庫。如果你安裝了像Anaconda這樣完整的Python套件管理工具的話,那麼這個套件預設應該已經裝好了。如果沒有,可以使用pip安裝一下,指令也非常簡單。
pip install matplotlib复制代码
裝好了套件之後,我們通常的使用慣例是將它重命名成plt#,所以如果你閱讀一些源碼以及其他大神的代碼,作圖的時候經常會出現plt. xxx,就是這麼來的。
import matplotlib.pyplot as plt复制代码
plot當中有幾個常用的作圖工具,第一種是作折線圖或是曲線圖的,叫做plot。第二種是作長條圖的叫做hist,第三種是作散點圖的,叫做scatter,第四種是作餅狀圖的。除此之外還可以作一些立體的圖像,但是一般日常當中使用得比較少,大部分是用來炫技的。
#plot其實是用來作曲線圖的,所採用的方法是描點呈現,它會將我們的資料點串聯起來,成為一條光滑的曲線。當然,作折線、直線也都是可以的,最後成圖的效果完全是由我們的數據決定的。
它的使用方法很簡單,在最基本的用法當中,我們只需要傳入兩個list,分別代表x軸和y軸的值即可。例如我們要作出一個logistic的函數圖像。我們可以這樣:
x = np.linspace(-10, 10, 100)y = 1 / (1 + np.exp(-x))plt.plot(x, y)plt.show()复制代码
在上面的程式碼當中我們先使用numpy當中的linspace函數產生了一個-10到10之間的numpy陣列。這個數組當中有100個點,在-10到10之間均勻分佈。我們對它計算對應的logistic函數的值,也就是。這個函數我想大家都應該很熟悉了,x是一個一百點的list,對應的y也是一個一百個點的list。也就是說一個x對應一個y構成了一個點對,代表圖中的一個座標。
我們不需要做任何轉化,只要要把這兩個陣列傳入plt當中,它就會自動替我們完成座標的映射。最後呈現的效果如下。
我們可以看到作圖的效果還是不錯的,除了把圖像完成的繪製出來之外,還替我們在座標軸上畫上了點位,方便我們查看數據。
#hist可以用來繪製直方圖,這也是我們非常常見的圖像。在財經領域我們常用直方圖反應一個資料的走勢,在資料分析和機器學習當中我們也常用直方圖來反應某一個特徵或是值的分佈。
在直方图当中我们只需要传入一个数组,就是我们要求分布的数组,另外我们需要再输入一个参数bins,表示我们希望将数据分桶的数量。然后它会绘制出每个桶中数据数量的直方图,这样我们就可以很直观地看出分布来了。
x = np.random.normal(size=200)plt.hist(x,bins=30)plt.show()复制代码
这里我们调用numpy当中以正态分布概率随机的函数,得到的结果应该是正态分布的。
我们查看图像,这个结果和我们的预期基本吻合。
第三种图像叫做散点图,它反应的是每个点的分布情况。比如我们之前在介绍KNN和Kmeans模型的时候曾经都作过散点图,一个点代表一个样本,通过散点图我们观察的也是样本和数据分布的情况。但是和直方图相比它更加得直观,我们能直接看到分布,而不是一个分布的统计结果。
但是它也有缺点,缺点就是我们只能观察二维平面当中的点的分布,毕竟超过3维的维度就没办法绘制了。而且3维的数据分布也不是很好观察。
同样散点图的绘制也很简单,我们只需要调用scatter函数传入x和y的数组即可。
x = np.random.rand(100)y = np.random.rand(100)plt.scatter(x, y)复制代码
这里我们的x和y都是随机分布,所以得到的结果是散乱没有规律的点。
最后我们来看下饼状图,饼状图也很常用,虽然也是反映的数据分布,但是它更多是体现某一个值占的比例。通过饼状图,我们可以很直观地了解到这点。
我们可以传入一个list进入pie函数,plot会根据list当中值在总体的占比绘制饼状图。我们来看个很简单的例子:
a = np.array([0.5, 0.3, 0.2, 0.1, 0.8])plt.pie(a)复制代码
得到的结果如下:
和之前的結果相比餅狀圖稍稍不清晰一些,因為它雖然用不同顏色區分了不同的區域的,但是我們很難直觀地看出來每一個區域分別代表什麼。這個問題是可以解決的,我們可以透過傳入一些參數和設定來讓它展示更多的信息,讓數據變得更加生動以及清晰。
#想了解更多程式設計學習,請關注php培訓欄位!
以上是從此駕馭圖表的神器matplotlib,Python強大的作圖工具的詳細內容。更多資訊請關注PHP中文網其他相關文章!