python画误差棒_给妹子讲python-S02E06matplotlib散点图、频次直方图与误差线图
微信公眾號: python數據科學家
【要點搶先看】
1.散點圖的畫法舉例
2.頻次直方圖的畫法舉例
3.誤差線圖的畫法舉例
【妹子說】今天我們繼續學習matplotlib繪圖的相關內容嘛~
對,在這一集,我們介紹在數據分析中使用非常高頻的幾種圖的形式。
首先說散點圖,散點圖和線形圖最大的區別,顧名思義就是這種圖形不再由線段進行連接,而是由一個一個獨立的點、圓圈或者其他指定的形狀構成:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,10,100)
plt.scatter(x, np.sin(x), marker='o')
plt.grid()
plt.show()
【妹子說】如果我們使用上一集中介紹的線形圖的繪制方法,在指定線型的情況下,一樣可以畫出這個圖來,那為什么要單獨再學一個新的函數呢?
這個問題問的好,因為我這個例子舉的過于簡單,沒能體現其優勢。實質上,使用plt.sactter相比plt.plot在創建散點圖時的優勢是具有更高的靈活性,他可以單獨控制每一個散點的不同屬性(顏色、大小等),這樣就可以通過(坐標位置、顏色、大小)這些多維信息,來表征更多的數據特征,并進行更精細的控制。
我們來繪制這樣一組散點圖,每個點的位置坐標(x,y)是服從標準正態分布的隨機值,點的顏色灰度值是位于(0,1)空間中的隨機樣本,點的大小是隨機值得1000倍,單位是像素。這樣通過位置、大小、顏色等多維信息,就能更豐富的表現出散點數據背后所蘊含的多重信息了。
import numpy as np
import matplotlib.pyplot as plt
rng = np.random.RandomState(0)
x = rng.randn(100)
y = rng.randn(100)
colors = rng.rand(100)
sizes = 1000 * rng.rand(100)
plt.scatter(x,y,c=colors,s=sizes,alpha=0.3)
plt.colorbar()
plt.grid(True)
plt.show()
從圖中,我們可以直觀看出散點的大小所對應的數量信息,右側添加的顏色條,同來指示顏色所對應的數值信息。這類多顏色與多特征的散點圖在探索與演示數據時非常有用。
第二類我們要說的圖形類型是頻次直方圖。
我們先畫一個最簡單的頻次直方圖,生成1000個服從標準正態分布的隨機變量,然后觀察他們在每個點的出現次數。
import numpy as np
import matplotlib.pyplot as plt
data = np.random.randn(1000)
ret = plt.hist(data)
print(ret)
plt.show()
(array([ 15., 39., 88., 188., 216., 200., 123., 84., 36., 11.]),
array([-2.68292233, -2.1248507 , -1.56677908, -1.00870746, -0.45063583,
0.10743579, 0.66550742, 1.22357904, 1.78165067, 2.33972229,
2.89779391]), )最簡單的頻次直方圖
仔細琢磨一下其實會有一些疑問,這個圖里面只有10個數據條,但是很顯然1000個隨機變量的取值顯然不止10個。在默認情況下,hist函數會將所有的隨機變量取值劃分為10個取值范圍,然后統計每個取值范圍內的變量數,并繪就此圖。
我們可以從程序結果看出,hist函數是有返回值的,返回的是一個2元元組,元組第一個ndarray對象是數據條的高度序列,元組第二個ndarray對象是每個數據條的邊緣橫坐標。
其實如果我們只想得到上述返回數據,而并不想畫圖,那么可以用下面的方法即可。
import numpy as np
import matplotlib.pyplot as plt
data = np.random.randn(1000)
ret = np.histogram(data)
print(ret)
plt.show()
(array([ 11, 36, 81, 179, 216, 209, 164, 71, 27, 6], dtype=int64),
array([-2.83330638, -2.25443586, -1.67556534, -1.09669482, -0.5178243 ,
0.06104622, 0.63991674, 1.21878726, 1.79765778, 2.3765283 ,
2.95539882]))
那么我們可以通過指定hist函數中的一些參數,來個性化的調整頻次直方圖的顯示效果。
通過bins參數可以指定數據條的個數;normed可以指定是否將頻數進行標準化,alpha指定透明度;還有histtype、color、edgecolor等線性、顏色等參數
import numpy as np
import matplotlib.pyplot as plt
data = np.random.randn(1000)
plt.hist(data, bins=40, normed=True, alpha=0.5,
histtype='stepfilled',color='steelblue')
plt.grid(True)
plt.show()指定參數的頻直方圖次
結合頻次直方圖中的透明度這個參數,我們再來多做做文章,比如,我們想對不同均值、方差分布特征的正態分布隨機變量進行對比,那該怎么做?顯然我們想到的是把不同的幾個正態分布圖畫在一張圖里進行比較。
import numpy as np
import matplotlib.pyplot as plt
data1 = np.random.normal(0, 0.8, 1000)
data2 = np.random.normal(-2, 1, 1000)
data3 = np.random.normal(3, 2, 1000)
plt.grid(True)
kwargs = dict(histtype='stepfilled', alpha=0.5, normed=True, bins=40)
plt.hist(data1, **kwargs)
plt.hist(data2, **kwargs)
plt.hist(data3, **kwargs)
plt.show()
最后我們來介紹基本誤差線圖
我們在圖上畫50個散點,然后每個點的誤差設定為一個隨機值,滿足標準正態分布。同時作為對照,我們在另一個圖中設置每個點的誤差值為一個標量常數而非隨機數組。當然這個例子可能沒有什么物理意義,只是來演示一下這種圖怎么畫
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 50)
dy = np.random.normal(0, 1, 50)
y = np.sin(x) + dy*np.random.randn(50)
plt.subplot(211)
plt.errorbar(x, y, yerr=dy, fmt='.k')
plt.grid(True)
plt.subplot(212)
plt.errorbar(x, y, yerr=0.8, fmt='o')
plt.grid(True)
plt.show()
【妹子說】這兩集,我確實學到了幾種基本的繪圖方法,但是印象中我之前所見到的很多數據可視化圖表貌似比這還要更復雜一些呢~
說的沒錯,不過也別著急,在下一集,我們再深入到一些常用的繪圖細節中一探究竟,進一步豐富我們的繪圖技巧。
總結
以上是生活随笔為你收集整理的python画误差棒_给妹子讲python-S02E06matplotlib散点图、频次直方图与误差线图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab 二维高斯滤波 傅里叶_光电
- 下一篇: python语言语句快的标记是什么_一文