AI基础:数据可视化简易入门(Matplotlib 和 Seaborn)
生活随笔
收集整理的這篇文章主要介紹了
AI基础:数据可视化简易入门(Matplotlib 和 Seaborn)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
0 導語
Matplotlib 是一個 Python 的 2D 繪圖庫,它以各種硬拷貝格式和跨平臺的交互式環境生成出版質量級別的圖形 。
通過 Matplotlib,開發者可以僅需要幾行代碼,便可以生成繪圖,直方圖,功率譜,條形圖,錯誤圖,散點圖等。
Seaborn 是基于 Python 且非常受歡迎的圖形可視化庫,在 Matplotlib 的基礎上,進行了更高級的封裝,使得作圖更加方便快捷。即便是沒有什么基礎的人,也能通過極簡的代碼,做出具有分析價值而又十分美觀的圖形。
在此之前,我已經寫了一篇 Numpy 和 Pandas 的快速入門,本篇文章講解數據可視化快速入門:
AI 基礎:Numpy 簡易入門
AI 基礎:Pandas 簡易入門
備注:本文代碼可以在github下載
https://github.com/fengdu78/Data-Science-Notes/tree/master/5.data-visualization
1.Matplotlib
1.1 通過 figure()函數創建畫布
import matplotlib.pyplot as plt %matplotlib inline import numpy as np data_one = np.arange(100, 201) # 生成包含100~200的數組 plt.plot(data_one) # 繪制data1折線圖 plt.show() # 創建新的空白畫布,返回Figure實例 figure_obj = plt.figure() data_two = np.arange(200, 301) # 生成包含200~300的數組 plt.figure(facecolor='gray') # 創建背景為灰色的新畫布 plt.plot(data_two) # 通過data2繪制折線圖 plt.show()1.2 通過 subplot()函數創建單個子圖
nums = np.arange(0, 101) # 生成0~100的數組 # 分成2*2的矩陣區域,占用編號為1的區域,即第1行第1列的子圖 plt.subplot(221) # 在選中的子圖上作圖 plt.plot(nums, nums) # 分成2*2的矩陣區域,占用編號為2的區域,即第1行第2列的子圖 plt.subplot(222) # 在選中的子圖上作圖 plt.plot(nums, -nums) # 分成2*1的矩陣區域,占用編號為2的區域,即第2行的子圖 plt.subplot(212) # 在選中的子圖上作圖 plt.plot(nums, nums**2) # 在本機上顯示圖形 plt.show()1.3 通過 subplots()函數創建多個子圖
# 生成包含1~100之間所有整數的數組 nums = np.arange(1, 101) # 分成2*2的矩陣區域,返回子圖數組axes fig, axes = plt.subplots(2, 2) ax1 = axes[0, 0] # 根據索引[0,0]從Axes對象數組中獲取第1個子圖 ax2 = axes[0, 1] # 根據索引[0,1]從Axes對象數組中獲取第2個子圖 ax3 = axes[1, 0] # 根據索引[1,0]從Axes對象數組中獲取第3個子圖 ax4 = axes[1, 1] # 根據索引[1,1]從Axes對象數組中獲取第4個子圖 # 在選中的子圖上作圖 ax1.plot(nums, nums) ax2.plot(nums, -nums) ax3.plot(nums, nums**2) ax4.plot(nums, np.log(nums)) plt.show()1.4 通過 add_subplot()方法添加和選中子圖
# 引入matplotlib包 import matplotlib.pyplot as plt import numpy as np # 創建Figure實例 fig = plt.figure() # 添加子圖 fig.add_subplot(2, 2, 1) fig.add_subplot(2, 2, 2) fig.add_subplot(2, 2, 4) fig.add_subplot(2, 2, 3) # 在子圖上作圖 random_arr = np.random.randn(100) # 默認是在最后一次使用subplot的位置上作圖,即編號為3的位置 plt.plot(random_arr) plt.show()1.5 添加各類標簽
import numpy as np data = np.arange(0, 1.1, 0.01) plt.title("Title") # 添加標題 plt.xlabel("x") # 添加x軸的名稱 plt.ylabel("y") # 添加y軸的名稱 # 設置x和y軸的刻度 plt.xticks([0, 0.5, 1]) plt.yticks([0, 0.5, 1.0]) plt.plot(data, data**2) # 繪制y=x^2曲線 plt.plot(data, data**3) # 繪制y=x^3曲線 plt.legend(["y=x^2", "y=x^3"]) # 添加圖例 plt.show() # 在本機上顯示圖形 import numpy as np x=np.linspace(-3,3,50)#產生-3到3之間50個點 y1=2*x+1#定義函數 y2=x**2 # num=3表示圖片上方標題 變為figure3,figsize=(長,寬)設置figure大小 plt.figure(num=3, figsize=(8, 5)) plt.plot(x, y2) # 紅色虛線直線寬度默認1.0 plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')plt.xlim((-1, 2)) #設置x軸范圍 plt.ylim((-2, 3)) #設置軸y范圍#設置坐標軸含義, 注:英文直接寫,中文需要后面加上fontproperties屬性 plt.xlabel(u'價格', fontproperties='SimHei', fontsize=16) plt.ylabel(u'利潤', fontproperties='SimHei', fontsize=16)# 設置x軸刻度 # -1到2區間,5個點,4個區間,平均分:[-1.,-0.25,0.5,1.25,2.] new_ticks = np.linspace(-1, 2, 5) print(new_ticks) plt.xticks(new_ticks)# 設置y軸刻度 ''' 設置對應坐標用漢字或英文表示,后面的屬性fontproperties表示中文可見,不亂碼, 內部英文$$表示將英文括起來,r表示正則匹配,通過這個方式將其變為好看的字體 如果要顯示特殊字符,比如阿爾法,則用轉意符\alpha,前面的\ 表示空格轉意 ''' plt.yticks([-2, -1.8, -1, 1.22, 3.],['非常糟糕', '糟糕', r'$good\ \alpha$', r'$really\ good$', '超級好'],fontproperties='SimHei',fontsize=12) plt.show() [-1. -0.25 0.5 1.25 2. ]1.6 繪制常見類型圖表
arr_random = np.random.randn(100) # 創建隨機數組 plt.hist(arr_random, bins=8, color='g', alpha=0.7) # 繪制直方圖 plt.show() # 顯示圖形 # 創建包含整數0~50的數組,用于表示x軸的數據 x = np.arange(51) # 創建另一數組,用于表示y軸的數據 y = np.random.rand(51) * 10 plt.scatter(x, y) # 繪制散點圖 plt.show() # 創建包含0~4的一維數組 x = np.arange(5) # 從上下限范圍內隨機選取整數,創建兩個2行5列的數組 y1, y2 = np.random.randint(1, 31, size=(2, 5)) width = 0.25 # 條形的寬度 ax = plt.subplot(1, 1, 1) # 創建一個子圖 ax.bar(x, y1, width, color='r') # 繪制紅色的柱形圖 ax.bar(x+width, y2, width, color='g') # 繪制另一個綠色的柱形圖 ax.set_xticks(x+width) # 設置x軸的刻度 # 設置x軸的刻度標簽 ax.set_xticklabels(['January', 'February', 'March', 'April ', 'May ']) plt.show() # 顯示圖形 data = np.arange(1, 3, 0.3) # 繪制直線,顏色為青色,標記為“x”,線型為長虛線 plt.plot(data, color="c", marker="x", linestyle="--") # 繪制直線,顏色為品紅,標記為實心圓圈,線型為短虛線 plt.plot(data+1, color="m", marker="o", linestyle=":") # 繪制直線,顏色為黑色,標記為五邊形,線型為短點相間線 plt.plot(data+2, color="k", marker="p", linestyle="-.") # 也可采用下面的方式繪制三條不同顏色、標記和線型的直線 # plt.plot(data, 'cx--', data+1, 'mo:', data+2, 'kp-.') plt.show()1.7 本地保存圖形
# 創建包含100個數值的隨機數組 import numpy as np random_arr = np.random.randn(100) random_arr array([-2.02009735, -1.21035005, 0.57679581, -0.00584516, 0.59612158,-0.31118333, -0.67245832, -0.56589637, 0.25570972, 0.68256563,-0.45816656, 0.34956566, 0.51020863, -0.75272333, 1.42433863,-0.05658573, 0.35273745, -0.35519388, 0.15499307, 0.39895018,-1.86154032, -1.23949979, -0.63471999, 1.09811855, 0.02552633,-0.16804823, 0.34956809, 0.93485716, 0.37747537, -0.16523647,-1.04335227, -0.01702448, 1.60924259, 1.15294223, -0.15174045,-0.03772519, 1.090792 , 0.65279282, 0.38186503, -1.3393988 ,0.10098444, -0.67411024, -2.39433996, -0.43594683, -0.155494 ,0.54676898, -0.97705035, -1.34799225, 1.64568965, -1.30594202,-0.30704745, -0.61612604, 1.09322798, 0.88921527, -0.22512233,-1.10477607, -0.61717627, 0.73952416, 0.30252205, 0.60808863,-0.3400892 , -2.01174842, -0.46480751, 1.54980369, 1.74610516,-0.53146867, -0.70904096, 1.73856111, -0.09254733, 0.43490467,-0.87201768, -0.73685075, -0.65868507, -0.18305015, 0.62559549,0.30743734, -0.78680136, -0.05808801, -0.23935035, -1.14580197,0.99154585, 0.07974613, 0.61315198, 0.93667393, 0.76542518,1.90500996, 0.0306359 , -2.53801425, 0.17371482, 1.75721226,0.25076371, -1.00032227, 0.20617839, 0.81751139, 0.64920089,1.3145223 , 1.05360644, 2.06404062, 1.7208791 , -0.09375516]) # 將隨機數組的數據繪制線形圖 plt.plot(random_arr) plt.show()2 seaborn—繪制統計圖形
2.1 可視化數據的分布
import seaborn as sns %matplotlib inline import numpy as np sns.set() # 顯式調用set()獲取默認繪圖 np.random.seed(0) # 確定隨機數生成器的種子 arr = np.random.randn(100) # 生成隨機數組 ax = sns.distplot(arr, bins=10) # 繪制直方圖 # 創建包含500個位于[0,100]之間整數的隨機數組 array_random = np.random.randint(0, 100, 500) # 繪制核密度估計曲線 sns.distplot(array_random, hist=False, rug=True) # 創建DataFrame對象 import pandas as pd dataframe_obj = pd.DataFrame({"x": np.random.randn(500),"y": np.random.randn(500)}) dataframe_obj| 0.478215 | 1.246931 |
| -0.053906 | 0.187860 |
| -1.241901 | 1.281412 |
| -1.658495 | 1.375265 |
| -0.353372 | 1.420608 |
| 1.656508 | -0.557275 |
| 1.511913 | 1.657975 |
| -0.906804 | 0.452821 |
| -0.777217 | -0.368433 |
| -0.739228 | -1.286740 |
| 0.987989 | -1.634521 |
| -0.026473 | -0.010277 |
| -1.262669 | -0.256035 |
| -1.561165 | 0.918040 |
| -0.939354 | -0.127256 |
| 0.335453 | 0.217671 |
| -1.489752 | 0.432434 |
| -1.066911 | -0.515731 |
| 1.035863 | -0.297603 |
| 0.631313 | -0.653702 |
| -1.894367 | 1.868757 |
| 0.036571 | 0.237410 |
| -0.312502 | -1.319956 |
| 0.814248 | -0.811489 |
| 0.382404 | -0.449499 |
| 1.646666 | 0.410724 |
| 0.227553 | 0.313078 |
| -1.399875 | 0.431041 |
| -2.161313 | -1.314429 |
| 0.280750 | 2.321291 |
| ... | ... |
| -1.266559 | -0.595866 |
| -0.766566 | 0.096873 |
| 0.205730 | -1.270893 |
| -0.608373 | -1.875642 |
| -0.323170 | 0.336776 |
| -1.615268 | -1.565554 |
| 0.433679 | 1.887319 |
| -0.217975 | -0.728759 |
| 1.023324 | 0.201026 |
| -0.134135 | -0.746496 |
| 0.046724 | 1.299394 |
| -0.595088 | -0.641203 |
| -1.949716 | -0.520380 |
| -0.530026 | -0.348830 |
| -1.060356 | -0.013075 |
| -0.908488 | -0.981377 |
| -0.034975 | -1.450624 |
| -1.426397 | 0.320157 |
| -1.302537 | 1.746811 |
| -1.190758 | 0.407325 |
| -0.170543 | 0.311181 |
| 0.814052 | 0.299761 |
| -0.520146 | 0.591630 |
| 1.934602 | -0.165131 |
| -0.052196 | -0.524848 |
| -1.057486 | 0.939177 |
| -0.158090 | -1.588747 |
| -0.238412 | 1.627092 |
| 0.279500 | -0.218554 |
| 1.962078 | -0.956771 |
500 rows × 2 columns
# 繪制散布圖 sns.jointplot(x="x", y="y", data=dataframe_obj) # 繪制二維直方圖 sns.jointplot(x="x", y="y", data=dataframe_obj, kind="hex")# 核密度估計 sns.jointplot(x="x", y="y", data=dataframe_obj, kind="kde") # 加載seaborn中的數據集 dataset = sns.load_dataset("tips") # 繪制多個成對的雙變量分布 sns.pairplot(dataset)
2.2 用分類數據繪圖
tips = sns.load_dataset("tips") sns.stripplot(x="day", y="total_bill", data=tips) tips = sns.load_dataset("tips") sns.stripplot(x="day", y="total_bill", data=tips, jitter=True) sns.swarmplot(x="day", y="total_bill", data=tips) sns.boxplot(x="day", y="total_bill", data=tips) sns.violinplot(x="day", y="total_bill", data=tips) sns.barplot(x="day", y="total_bill", data=tips) sns.pointplot(x="day", y="total_bill", data=tips)備注:本文代碼可以在github下載
https://github.com/fengdu78/Data-Science-Notes/tree/master/5.data-visualization
往期精彩回顧 那些年做的學術公益-你不是一個人在戰斗適合初學者入門人工智能的路線及資料下載機器學習在線手冊深度學習在線手冊備注:加入本站微信群或者qq群,請回復“加群”加入知識星球(4500+用戶,ID:92416895),請回復“知識星球” 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的AI基础:数据可视化简易入门(Matplotlib 和 Seaborn)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 33万字!深度学习笔记在线版发布!
- 下一篇: AI基础:矩阵求导,你一定要收藏