前言
本文檔旨在記錄通過python的matplotlib包繪制散點圖的實現細節
需求分析
1.將excel的數據導入python
2.通過python繪制散點圖
1)不同類別的點標注不同的顏色;
2)繪制圖例;
具體實現
需求1:將excel的數據導入python
在之前的博文里已經實現了,具體請參見:https://www.cnblogs.com/serenelian/p/12801733.html
然而這一次的excel文件中數據長度不一致,python會讀取長度為最長列長度(MaxRow)的所有數據,如果某些列的長度小於最長列長度(MaxRow),python會將其處理為空值;空值為str,這樣運行會報錯說str和float類型不一致,如果直接處理成0會有問題;
因此,我們需要去除空值,通過filter(None,(你的List)來去除空值和None;
需求2:繪制散點圖
散點圖在之前的博文里也實現了,具體參見同上鏈接;
今天的散點圖要給不同的類別添加上不同的顏色,實際上實現很簡單,直接多些幾行plt.scatter即可。
需求3:繪制圖例
通過plt.legend()實現,要想寫明圖例當中的標注,需要在plt.scatter(label='')寫明label的參數即可。
可以通過設置loc的參數來改變圖例的位置,具體如下:
具體在圖中的位置見下圖:
參考代碼

#-*- coding:utf-8 -*- import matplotlib.pyplot as plt import xlrd import numpy as np from scipy.optimize import curve_fit import math rbook = xlrd.open_workbook('data.xlsx') table = rbook.sheet_by_index(0) nrows = table.nrows ncols = table.ncols a0_values = table.col_values(0) a1_values = table.col_values(1) a2_values = table.col_values(2) a3_values = table.col_values(3) a4_values = table.col_values(4) a5_values = table.col_values(5) a0 = list(filter(None,a0_values)) a1 = list(filter(None,a1_values)) a2 = list(filter(None,a2_values)) a3 = list(filter(None,a3_values)) a4 = list(filter(None,a4_values)) a5 = list(filter(None,a5_values)) plt.title("散點圖") plt.xlabel("x軸") plt.ylabel("y軸") plt.xlim([0,1]) # x軸邊界 plt.ylim([100,300]) # y軸邊界 #消除中文亂碼 plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus'] = False color1 = '#FF0000' color2 = '#1E90FF' color3 = '#228B22' plt.scatter(a0,a1,s=30,c=color1,label = 'x1') plt.scatter(a2,a3,s=30,c=color2,label = 'x2') plt.scatter(a4,a5,s=30,c=color3,label = 'x3') plt.subplots_adjust(left=None, bottom=None, right=None, top=None,wspace=0.3, hspace=0.3) plt.savefig('test.png') plt.legend(loc='upper left') plt.show()
實現結果
可優化部分
現在的數據是將不同的類別放在不同的列上,如果有很多很多類都在同一列里,通過python直接處理,要寫一個循環,將不同類的數據放到各類的list當中即可。
參考資料
1.去除list當中的空字符:https://www.bbsmax.com/A/n2d9a7vYdD/
2.python圖例位置:https://blog.csdn.net/Wannna/article/details/102751689
3.scatter參數:https://blog.csdn.net/m0_37393514/article/details/81298503
4.scatter參數:https://www.jianshu.com/p/1e84915c7c30
5.scatter顏色大全:https://blog.csdn.net/w576233728/article/details/86538060