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()