Python視覺化-散點圖與彩色散點圖

kewlgrl發表於2018-04-24

散點圖與彩色散點圖都是表示XY軸座標之間的變化關係。

但是彩色散點圖中點的顏色各有不同。

一、資料檔案準備

1、value.txt

0,3.19
1,2.7
2,2.51
3,2.78
4,2.61
5,3.13
6,3.14
7,2.69
8,2.51
9,3.15
10,3.15
11,3.15
12,3.15

第一列是序號索引,第二列是價格數值。

散點圖X軸和Y軸分別描繪序號與價格。

2、PeopleNumber.csv

city,people,price
NJ ,823,3.19
XZ ,866,2.7
HA,487,2.51
YC,723,2.78
SQ,485,2.61
TZ,464,3.13
YZ,448,3.14
NT,730,2.69
LYG ,447,2.51
ZJ,318,3.15
WX,651,3.15
SZ,1061,3.15
CZ,470,3.15

彩色散點圖X軸和Y軸分別描繪人口與價格的關係,用不同顏色標識不同城市。

第一列是城市(縮寫)索引,第二列是人口數值,

第三列是價格數值(原為空,由彩色散點圖程式碼中函式寫入)。

csv檔案本質上就是以逗號(,)分隔開的txt檔案,所以用excel開啟形式為:


二、匯入模組包

可參考Windows下安裝Python、matplotlib包 及相關
https://blog.csdn.net/mikasa3/article/details/78942650 

1、numpy

2、pandas

3、seaborn

4、matplotlib

三、完整程式碼

如下:

import numpy as np  
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
def DrawScatter(read_name):#散點圖
    x = np.arange(0,13)  #生成X軸資料,要與Y軸維度相同
    fr = open(read_name,'r')#開啟讀取的檔案
    value_list = []
    value_data = []
    count = 0
    for line in fr.readlines():#遍歷開啟的檔案
        if not len(line):#跳過空行
          continue
        line = line.strip()
        value_list.append(line.split(','))
        value_data.append(float(value_list[count][1]))
        count += 1
    fig = plt.figure()  
    ax1 = fig.add_subplot(111)  #將畫布分割成1行1列,影象畫在從左到右從上到下的第1塊
    ax1.set_title('Scatter Plot')#散點圖的標題
    plt.xlabel('people')#X軸標籤 
    plt.ylabel('price')#Y軸標籤
    #以X軸Y軸資料集分別為x,value_data開始畫圖,落點顏色為red,樣式marker為o
    ax1.scatter(x, value_data, c = 'r',marker = 'o')
    plt.legend("c")#圖例  
    plt.show() #顯示散點圖 
def DrawColorScatter(read_name,write_name):#彩色散點圖,讀取的檔名和要寫入的檔名
    fr = open(read_name,'r')#開啟讀取value檔案
    value_list = []
    value_data = []
    count = 0
    for line in fr.readlines():
        if not len(line):
          continue
        line = line.strip()
        value_list.append(line.split(','))
        value_data.append(float(value_list[count][1]))
        count += 1
    fp = pd.read_csv(write_name)#開啟寫入檔案,準備將value寫入第三列
    count = -1
    flen = fp.iloc[:,0].size
    for item in range(flen):
        if (count == -1):#特殊處理檔案第一行index
          count += 1
          continue
        fp.loc[count,['price']] = value_data[count]#修改檔案中價格
        count += 1
    fp.to_csv(write_name,index = False,sep=',')#寫入檔案,預設不含index,以逗號分隔
    #以下開始畫圖
    g=sns.FacetGrid(fp, hue = "city", palette = "Set1", size = 6)
    #hue指色彩,是散點不同顏色的來源
    g.map(plt.scatter, "people", "price", s = 250, linewidth = 0.65, edgecolor = "white")
    #第2,3個引數是X,Y座標的標籤,s表示散點大小,linewidth表示散點邊緣線寬,edgecolor表示散點邊緣線色
    g.add_legend()
    plt.show()#顯示散點圖
if __name__=='__main__':
    DrawScatter("value.txt")#散點圖
    DrawColorScatter("value.txt","PeopleNumber.csv")#彩色散點圖


四、執行結果

1、散點圖


2、彩色散點圖


相關文章