serenelian

前言

本文档旨在记录通过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()
View Code

实现结果

 

可优化部分

现在的数据是将不同的类别放在不同的列上,如果有很多很多类都在同一列里,通过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

 

分类:

技术点:

相关文章: