前言
本文档旨在记录通过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