-
在Python中進行可視化晶疼,我們需要的是這些庫:
- matplotlib:python中自帶的,也是最常用的可視化工具包笑撞,在Jupyter中甚至可以找到matplotlib的網(wǎng)站
- seaborn:python中可視化的新起之秀棒仍,致力于統(tǒng)計數(shù)據(jù)可視化
- brewer2mpl:brewer2mpl是一個專供python使用的藕畔,用于訪問colorbrewer2色譜的工具川蒙,colorbrewer2是一個專業(yè)顏色顧問公司还最。
-
假設(shè)我有一個數(shù)據(jù)探索,我想了解下人口和面積的關(guān)系韭邓,是不是面積越大澎埠,人口數(shù)量就是越大虽缕?還是面積在一個指定的區(qū)間內(nèi),人口數(shù)量才是最多的蒲稳,如果是氮趋,那么這個區(qū)間是多少呢?對于下圖江耀,我們是如何畫出來的呢剩胁?[圖片上傳失敗...(image-b35bd1-1587003130440)]
# 查看必要庫的版本
import sys
import matplotlib as mlp
import seaborn as sns
import brewer2mpl
print(mlp.__version__)
print(sns.__version__)
print(sys.version)
散點圖
- 散點圖是用于觀測兩兩變量祝賀構(gòu)成的相關(guān)關(guān)系的直觀展現(xiàn),從圖中我們可以看出兩變量的相關(guān)性及其中的線性或非線性的變化規(guī)律祥国。
- 常用的畫散點圖函數(shù)scatte()
- 搬運一下網(wǎng)上已經(jīng)整理好的文檔昵观,自己不用在看著英語翻譯了。
點擊進入python繪圖基礎(chǔ)—scatter用法
- 搬運一下網(wǎng)上已經(jīng)整理好的文檔昵观,自己不用在看著英語翻譯了。
# 導(dǎo)入需要的繪圖
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
# 解決中文顯示問題
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#繪制超簡單的散點圖:變量x1與x2的關(guān)系
#定義橫軸和縱軸數(shù)據(jù)
x1 = np.random.randn(10)
x2 = x1 + x1**2 - 10
#確定畫布舌稀,參數(shù)figsize(width, height)
plt.figure(figsize=(8,3))
#繪圖
plt.scatter(x1,x2, # 橫坐標啊犬,縱坐標
s=50, # 數(shù)據(jù)點的尺寸大小
c="red", # 數(shù)據(jù)點的顏色
label = "Red Points" # 標簽
)
#裝飾圖形
plt.legend() #顯示圖例,和scatter函數(shù)的label參數(shù)標簽聯(lián)用
plt.show() #讓圖形顯示
# 如果我們希望顯示多種顏色的散點圖,并且這個顏色是我們的標簽y所代表的分類
# 思路:每次畫同類標簽的散點圖
#確立顏色列表
colors = ["red","black"]
#確立標簽的類別列表
labels = ["負樣本","正樣本"]
for i in range(2):
plt.scatter(X[y==i,0], # 橫坐標
X[y==i,1], # 縱坐標
c=colors[i], # 顏色
label = labels[i])
plt.legend()
plt.show()
# 如何畫一張多分類的散點圖呢壁查?
#導(dǎo)入數(shù)據(jù)
midwest = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/midwest_filter.csv")
#探索數(shù)據(jù)
print(midwest.shape)
print(midwest.columns)
midwest.head(3)
# 豐富我們的圖像
# 預(yù)設(shè)圖像的各種屬性
large = 22; med = 16; small = 12
params = {'axes.titlesize': large, #子圖上的標題字體大小
'legend.fontsize': med, #圖例的字體大小
'figure.figsize': (16, 10), #圖像的畫布大小
'axes.labelsize': med, #標簽的字體大小
'xtick.labelsize': med, #x軸上的標尺的字體大小
'ytick.labelsize': med, #y軸上的標尺的字體大小
'figure.titlesize': large} #整個畫布的標題字體大小
plt.rcParams.update(params) #設(shè)定各種各樣的默認屬性
plt.style.use('seaborn-whitegrid') #設(shè)定整體風(fēng)格
sns.set_style("white") #設(shè)定整體背景風(fēng)格
# 準備標簽列表和顏色列表
categories = np.unique(midwest['category'])
colors = [plt.cm.tab10(i/float(len(categories)-1)) for i in range(len(categories))]
# 建立畫布
plt.figure(figsize=(16, 10), #繪圖尺寸
dpi=100, #圖像分辨率
facecolor='w', #圖像的背景顏色椒惨,設(shè)置為白色,默認也是白色
edgecolor='k' #圖像的邊框顏色潮罪,設(shè)置為黑色康谆,默認也是黑色
)
# 循環(huán)繪圖
# 我們可以輸入橫縱坐標领斥,也可以輸入橫縱坐標的名字,然后使用data這個參數(shù)來傳入全數(shù)據(jù)集
for i, category in enumerate(categories):
plt.scatter('area', 'poptotal',
data=midwest.loc[midwest.category==category, :],
s=20,
c=np.array(colors[i]).reshape(1,-1),
# c=np.array(plt.cm.tab10(i/len(categories))).reshape(1,-1),
label=str(category))
# 對圖像進行裝飾
# plt.gca() 獲取當(dāng)前的子圖沃暗,如果當(dāng)前沒有任何子圖的話月洛,就幫我創(chuàng)建一個新的子圖
plt.gca().set(xlim=(0, 0.12), ylim=(0, 80000)) #控制橫縱坐標的范圍
plt.xticks(fontsize=12) #坐標軸上的標尺的字的大小
plt.yticks(fontsize=12)
plt.ylabel('Population',fontsize=22) # 坐標軸上的標題和字體大小
plt.xlabel('Area',fontsize=22)
plt.title("Scatterplot of Midwest Area vs Population", fontsize=22) #整個圖像的標題和字體的大小
plt.legend(fontsize=12) #圖例的字體大小
plt.show()
# 分析數(shù)據(jù)
plt.figure(figsize=(16, 10), # 繪圖尺寸
dpi=60, # 圖像分辨率
facecolor='w', # 圖像的背景顏色,設(shè)置為白色孽锥,默認也是白色
edgecolor='k' # 圖像的邊框顏色嚼黔,設(shè)置為黑色,默認也是黑色
)
#進行循環(huán)繪圖
for i, category in enumerate(categories):
plt.scatter('area', 'poptotal',
data=midwest.loc[midwest.category==category, :],
s=20, c=np.array(plt.cm.tab10(i/float(len(categories)-1))).reshape(1,-1),label=str(category))
#高學(xué)歷惜辑,低貧困的地方
plt.scatter("area","poptotal",
data = midwest.loc[midwest.category == "HLU",:],
s=300,
facecolors="None", # 點的填充顏色
edgecolors="red", # 點的邊框顏色
label = "Selected")
#對圖像進行裝飾
plt.gca().set(xlim=(0.0, 0.12), ylim=(0, 90000)) #控制橫縱坐標的范圍
plt.xticks(fontsize=12) #坐標軸上的標尺的字的大小
plt.yticks(fontsize=12)
plt.ylabel('Population',fontsize=22) #坐標軸上的標題和字體大小
plt.xlabel('Area',fontsize=22)
plt.title("Scatterplot of Midwest Area vs Population", fontsize=22) #整個圖像的標題和字體的大小
plt.legend(fontsize=12) #圖例的字體大小
plt.show()