1. 程式人生 > >matplotlib 使用總結——散點圖

matplotlib 使用總結——散點圖

一、散點圖引入 
什麼是散點圖? 
反映兩組變數每個資料點的值,並且從散點圖可以看出它們之間的相關性。單看概念可能不太好理解,我們可以從一個例子說起。下面我們通過例子邊學邊做。 
在做散點圖之前,最重要的是我們得有資料啊,資料很重要。這裡我們利用關於karate--deepwalk.embeddings的資料,假設儲存在目錄C:\Users\WBL\Desktop\DeepWalk\karate--deepwalk.embeddings.csv中,資料全文為

label x y
34 -0.60476
-0.71091
1 0.311671 -0.88602
33 -0.7206 -0.72734
3 -0.12409 -0.77231
2 0.284264 -0.8668
4 0.273538 -0.86838
32 -0.4155 -0.74076
14 0.066654 -0.81539
24
-0.80765 -0.69245
9 -0.23795 -0.74187
6 0.801222 -1.01542
7 1.02443 -1.12159
28 -0.63256 -0.71611
30 -0.89666 -0.69355
8 0.081434 -0.81575
31 -0.39702 -0.72797
25 -0.83234 -0.69107
5 0.805114 -1.02388
20 -0.0225 -0.80833
26 -0.78295 -0.70043
11 0.776621 -1.00543
29 -0.41022 -0.7247
17 1.083 -1.10963
19 -0.83465 -0.70858
15 -0.75736 -0.69438
13 0.340806 -0.87363
10 -0.44032 -0.72752
22 0.422973 -0.90371
21 -0.78695 -0.69475
27 -0.9448 -0.66912
16 -0.75029 -0.69804
18 0.382226 -0.90165
23 -0.78915 -0.73798
12 0.563045 -0.94381

首先要將資料讀取進來,大致對資料進行瀏覽,看以下程式碼:

import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_csv(r"C:\Users\WBL\Desktop\DeepWalk\karate--deepwalk.embeddings.csv") ---r為轉義字元
print(df.head())

輸出為:

     label           x                    y
0     34    -0.604761     -0.710905
1      1    0.311671       -0.886024
2     33   -0.720595     -0.727339
3      3   -0.124094      -0.772308
4      2    0.284264      -0.866799

df.head()預設返回資料集的前五行資料,瀏覽以下資料集的所有屬性,以及取值如何,這裡我們先拿“x”和“y”來做例項以理解散點圖。當然,你也可以用其他屬性。

plt.scatter(df["x"],df["y"])
plt.show()

完善的散點的圖是怎樣的,它需要哪些引數呢? 

首先要 生成一個figure物件和一個座標系(理解為子圖也可以)axes物件,並且建立一個圖形區域寬和高的比例為8:5(可以自行設定),解析度為每英寸80畫素的圖,還有fontsize則是字型的大小(可自行設定)

 

上例子及程式碼中可以看到,我們在繪製散點圖時候,用到了ax.scatter(df[“mpg”],df[“wt”])函式,關於scatter()函式看下都有哪些引數:ax.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None,vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, , data=None, *kwargs) 
其中的x和y在上面我們的例子中應該就已經理解了,而s代表了點的大小,如果s輸入的是一個固定值,那麼就只是單純的改變散點的大小(可以自己設定),這裡我們增加一些知識,如果讓點的大小也成為一個維度,這樣的話就可以表示三個維度資料之間的聯絡,先看示例:

這個圖相比一般散點圖多了一個維度的資料,即將第三個維度的資料大小(這裡是資料集中的“disp”)以氣泡(引數alpha表示透明度,可以自行設定)大小示意。像這樣需要第三個維度的應用場景為:在研究2個變數的關係時,需要加入連續型變數作為第三維度。 
而c代表的是點的填充顏色,可以參考文件設定定值來填充不同的顏色。這裡我們還利用該資料集的一個“vs”特徵來作為第三維度,通過的“vs”的觀察可以看出vs只有兩個不同的取值0和1。我們就用“vs”的值來作為c的值,以此來檢視資料的分步情況:

但是我們發現好像缺了點什麼:我們不知道黃色代表什麼值,紫色代表什麼值,對吧?因此我們需要新增1個圖例來表明每個顏色代表的是什麼資料,思路是因為vs只有0,1兩種值,那麼我只需要提取出滿足vs==0的資料(mpg和wt)和滿足vs==1的資料(mpg和wt),然後在1張圖上用2套資料來源畫2種顏色的散點圖即可: 

# -- coding: utf-8
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_csv(r"C:\Users\WBL\Desktop\DeepWalk\karate--deepwalk.embeddings.csv")  # r為轉義字元
# print(df.head())
# plt.scatter(df["x"],df["y"])
# plt.show()

fig,ax = plt.subplots(figsize = (8,5),dpi = 70)  #figsize:寬和高比例,dpi:解析度
ax.scatter(df["x"],df["y"],alpha=1,c=df["label"])  #製作關於x,y的散點圖
ax.set_xlabel("x",fontsize=15)
ax.set_ylabel("y",fontsize=15)
ax.set_title("karate--deepwalk.embeddings",fontsize=20)
# ax.set_xlim(1.5,1.5) #x軸調整取值範圍
# ax.set_ylim(-1.5,0)
plt.show()