绘制散点图
这里绘制散点图的数据来源为我研究项目的缺陷统计文档,文档格式为.txt格式,数据形式如图1所示,其中,每一行的第一个元素为类别信息,第二个元素为面积信息,第三个元素为标注框的高H,第四个元素为标注框的宽W.
这里绘制的散点图为每一类缺陷的长宽比,假设swelling有100个,则绘制图像的横坐标最大值为100,即横坐标表示的是某一类的数量信息.纵坐标为缺陷的长宽比.
图1 绘制散点图的数据格式截图
对绘制散点图的数据来源有一定了解之后,我们直接编写代码,绘制图像.
from pylab import *
import numpy as np
import pandas as pd
from PIL import Image
#需要修改读取文件的名字和保存文件的名字
#读取存储数据的.txt文档,文档数据格式为:
filename = r'C:\Users\14188\Desktop\1123\数据集分析\面积\analysis_result.txt'
Area,X_dis,Y_dis=[],[],[]
bulge_arr,pit_arr,scratch_arr,hole_arr,wrinkle_arr,crackle_arr,scar_arr,swelling_arr=[],[],[],[],[],[],[],[]
#读取excel文档数据,这里读取的是txt数据.
# loandata=pd.DataFrame(pd.read_excel('loan_data.xlsx'))
classes = ["bulge", "pit", "scratch", "hole", "wrinkle", "crackle", "scar", "swelling"]
#新建列表,分别用于存放不同了类别缺陷的长宽比,这个长宽比最终表现为散点图的纵坐标.
bulge_wh,pit_wh,scratch_wh,hole_wh,wrinkle_wh,crackle_wh,scar_wh,swelling_wh=[],[],[],[],[],[],[],[]
#打开txt文档
with open(filename, 'r') as f:
# 将txt中的数据逐行存到列表lines里 lines的每一个元素对应于txt中的一行。然后将每个元素中的不同信息提取出来
lines = f.readlines()
# i变量,由于这个txt存储时有空行,所以增只读偶数行,主要看txt文件的格式,一般不需要
# j用于判断读了多少条,step为画图的X轴
k=j = 0
#类别_nume用来统计每一类缺陷的数量,即每类缺陷一共有多少个.类别_area用于求每一类缺陷的面积总和,这里绘制散点图是用不到这个变量.
bulge_area, bulge_nume, pit_area, pit_nume, scratch_area, scratch_nume, hole_area, hole_nume = 0, 0, 0, 0, 0, 0, 0, 0
wrinkle_nume, wrinkle_area, crackle_area, crackle_nume, scar_area, scar_nume, swelling_area, swelling_nume = 0, 0, 0, 0, 0, 0, 0, 0
#读取文档的每一行。
for line in lines:
j = j + 1
# #从图1可以看出,数据集中存在没有数据的空行,所以这里使用判断语句,跳过这些空行.
if line!='\n':
#使用','分隔符分割每一行,分割后每一行为含有四个元素的列表.
num = line.split(',')
print("**num[0]**", num[0])
#如果为非空行,则判断该行第一个元素是否等于'bulge',如果等于,则该类别缺陷的数量加1,同时,将该类别缺陷的长宽比添加到bulge_wh列表中.
if num[0]=='bulge':
print("**num[0]**",num[0])
bulge_arr.append(int(num[1]))
bulge_area=int(num[1])+bulge_area
bulge_nume=bulge_nume+1
bulge_wh.append(int(num[2])/int(num[3]))
if num[0]=='pit':
pit_arr.append(int(num[1]))
pit_area=int(num[1])+ pit_area
pit_nume= pit_nume+1
pit_wh.append(int(num[2]) / int(num[3]))
if num[0] == 'scratch':
scratch_arr.append(int(num[1]))
scratch_area = int(num[1]) + scratch_area
scratch_nume = scratch_nume + 1
scratch_wh.append(int(num[2]) / int(num[3]))
if num[0] == 'hole':
hole_arr.append(int(num[1]))
hole_area = int(num[1]) + hole_area
hole_nume = hole_nume + 1
hole_wh.append(int(num[2]) / int(num[3]))
if num[0] == 'wrinkle':
wrinkle_arr.append(int(num[1]))
wrinkle_area =int(num[1]) + wrinkle_area
wrinkle_nume = wrinkle_nume + 1
wrinkle_wh.append(int(num[2]) / int(num[3]))
if num[0] == 'crackle':
crackle_arr.append(int(num[1