python批量雷达图_python批量制作雷达图

老板要画雷达图,但是数据好多组怎么办?不能一个一个点excel去画吧,那么可以利用python进行批量制作,得到样式如下:

首先制作一个演示的excel,评分为excel随机数生成:

1 =INT((RAND()+4)*10)/10

加入标签等得到的excel样式如下(部分,共计32行):

那么接下来就是打开python写码了,本文是基于python3.4进行编写

1 wb = load_workbook(filename=r'C:\Users\Administrator\Desktop\数据指标.xlsx')  ##读取路径

2     ws = wb.get_sheet_by_name("Sheet1")  ##读取名字为Sheet1的sheet表

3

4     info_id = []

5     info_first = []

6

7     for row_A in range(2, 32):  ## 遍历第2行到32行

8         id = ws.cell(row=row_A, column=1).value  ## 遍历第2行到32行,第1列

9         info_id.append(id)

10     for col in range(2, 9):  ##读取第1到9列

11         first = ws.cell(row=1, column=col).value

12         info_first.append(first)  ##得到1到8列的标签

13

14     info_data = []

15     for row_num_BtoU in range(2, len(info_id) + 2):  ## 遍历第2行到32行

16         row_empty = []  ##建立一个空数组作为临时储存地,每次换行就被清空

17         for i in range(2, 9):  ## 遍历第2行到32行,第2到9列

18             data_excel = ws.cell(row=row_num_BtoU, column=i).value

19             if data_excel == None:

20                 pass

21             else:

22                 row_empty.append(data_excel)  ##将单元格信息储存进去

23         info_data.append(row_empty)

分步讲解:

读取excel表格:

1   wb = load_workbook(filename=r'C:\Users\Administrator\Desktop\数据指标.xlsx')  ##读取路径

2     ws = wb.get_sheet_by_name("Sheet1")  ##读取名字为Sheet1的sheet表

需要用到库:

1 import xlsxwriter

1 from openpyxl import load_workbook

在命令指示符下输入:

1 pip install xlsxwriter

等待安装即可,后面的库也是如此:

将第一列ID储存,以及第一行的标签,标签下面的数值分别储存在:

info_id = []

info_first = []

info_data = []

读取数据后接下来需要设置写入的格式:

1 workbook = xlsxwriter.Workbook('C:\\Users\\Administrator\\Desktop\\result.xlsx')

2     worksheet = workbook.add_worksheet()  # 创建一个工作表对象

3     #字体格式

4     font = workbook.add_format(

5         {'border': 1, 'align': 'center', 'font_size': 11, 'font_name': '微软雅黑'})  ##字体居中,11号,微软雅黑,给一般的信息用的

6     #写下第一行第一列的标签

7     worksheet.write(0, 0, '商品货号', font)

8     ##设置图片的那一列宽度

9     worksheet.set_column(0, len(info_first) + 1, 11)  # 设定第len(info_first) + 1列的宽度为11

将标签数据等写入新的excel表格中:

1 #新建一个excel保存结果

2     workbook = xlsxwriter.Workbook('C:\\Users\\Administrator\\Desktop\\result.xlsx')

3     worksheet = workbook.add_worksheet()  # 创建一个工作表对象

4     #字体格式

5     font = workbook.add_format(

6         {'border': 1, 'align': 'center', 'font_size': 11, 'font_name': '微软雅黑'})  ##字体居中,11号,微软雅黑,给一般的信息用的

7     #写下第一行第一列的标签

8     worksheet.write(0, 0, '商品货号', font)

9     ##设置图片的那一列宽度

10     worksheet.set_column(0, len(info_first) + 1, 11)  # 设定第len(info_first) + 1列的宽度为11

11

12     ##写入标签

13     for k in range(0,7):

14         worksheet.write(0, k + 1, info_first[k], font)

15     #写入最后一列标签

16     worksheet.write(0, len(info_first) + 1, '雷达图', font)

制作雷达图:

1     #设置雷达各个顶点的名称

2     labels = np.array(info_first)

3     #数据个数

4     data_len = len(info_first)

5     for i in range(0,len(info_id)):

6         data = np.array(info_data[i])

7

8         angles = np.linspace(0, 2*np.pi, data_len, endpoint=False)

9         data = np.concatenate((data, [data[0]])) # 闭合

10         angles = np.concatenate((angles, [angles[0]])) # 闭合

11

12         fig = plt.figure()

13         ax = fig.add_subplot(111, polar=True)# polar参数!!

14         ax.plot(angles, data, 'bo-', linewidth=2)# 画线

15         ax.fill(angles, data, facecolor='r', alpha=0.25)# 填充

16         ax.set_thetagrids(angles * 180/np.pi, labels, fontproperties="SimHei")

17         ax.set_title("商品货号:" + str(info_id[i]), va='bottom', fontproperties="SimHei")

18         ax.set_rlim(3.8,5)# 设置雷达图的范围

19         ax.grid(True)

20         plt.savefig("C:\\Users\\Administrator\\Desktop\\result\\商品货号:" + str(info_id[i]) + ".png", dpi=120)

图片太大怎么办?用库改变大小即可:

1         import Image

2         ##更改图片大小

3         infile = “C:\\Users\\Administrator\\Desktop\\result\\商品货号:" + str(info_id[i]) + ".png“

4         outfile = ”C:\\Users\\Administrator\\Desktop\\result1\\商品货号:" + str(info_id[i]) + ".png”

5         im = Image.open(infile)

6         (x, y) = im.size

7         x_s = 80    ## 设置长

8         y_s = 100  ## 设置宽

9         out = im.resize((x_s, y_s), Image.ANTIALIAS)

10         out.save(outfile,'png',quality = 95)

将大图片和小图片放在了result和result1两个不同的文件夹,需要再前边创建这两个文件夹:

1     if os.path.exists(r'C:\\Users\\Administrator\\Desktop\\result'):  # 建立一个文件夹在桌面,文件夹为result

2         print('result文件夹已经在桌面存在,继续运行程序……')

3     else:

4         print('result文件夹不在桌面,新建文件夹result')

5         os.mkdir(r'C:\\Users\\Administrator\\Desktop\\result')

6         print('文件夹建立成功,继续运行程序')

7

8     if os.path.exists(r'C:\\Users\\Administrator\\Desktop\\result1'):  # 建立一个文件夹在C盘,文件夹为result1

9         print('result1文件夹已经在桌面存在,继续运行程序……')

10     else:

11         print('result1文件夹不在桌面,新建文件夹result1')

12         os.mkdir(r'C:\\Users\\Administrator\\Desktop\\result1')

13         print('文件夹建立成功,继续运行程序')

最后插入图片到excel中:

1         worksheet.insert_image(i + 1, len(info_first) + 1, 'C:\\Users\\Administrator\\Desktop\\result1\\' + "商品货号:" + str(info_id[i]) + '.png')  ##写入图片

2         time.sleep(1)##防止写入太快电脑死机

3         plt.close() #   一定要关掉图片,不然python打开图片20个后会崩溃

4

5     workbook.close()#最后关闭excel

得到的效果如下:

附上完整代码:

1 import numpy as np

2 import matplotlib.pyplot as plt

3 import xlsxwriter

4 from openpyxl import load_workbook

5 import os

6 import time

7 from PIL import Image

8

9 if __name__ == '__main__':

10

11     if os.path.exists(r'C:\\Users\\Administrator\\Desktop\\result'):  # 建立一个文件夹在桌面,文件夹为result

12         print('result文件夹已经在桌面存在,继续运行程序……')

13     else:

14         print('result文件夹不在桌面,新建文件夹result')

15         os.mkdir(r'C:\\Users\\Administrator\\Desktop\\result')

16         print('文件夹建立成功,继续运行程序')

17

18     if os.path.exists(r'C:\\Users\\Administrator\\Desktop\\result1'):  # 建立一个文件夹在C盘,文件夹为result1

19         print('result1文件夹已经在桌面存在,继续运行程序……')

20     else:

21         print('result1文件夹不在桌面,新建文件夹result1')

22         os.mkdir(r'C:\\Users\\Administrator\\Desktop\\result1')

23         print('文件夹建立成功,继续运行程序')

24

25     wb = load_workbook(filename=r'C:\Users\Administrator\Desktop\数据指标.xlsx')  ##读取路径

26     ws = wb.get_sheet_by_name("Sheet1")  ##读取名字为Sheet1的sheet表

27

28     info_id = []

29     info_first = []

30

31     for row_A in range(2, 32):  ## 遍历第2行到32行

32         id = ws.cell(row=row_A, column=1).value  ## 遍历第2行到32行,第1列

33         info_id.append(id)

34     for col in range(2, 9):  ##读取第1到9列

35         first = ws.cell(row=1, column=col).value

36         info_first.append(first)  ##得到1到8列的标签

37     print(info_id)

38     print(info_first)

39

40     info_data = []

41     for row_num_BtoU in range(2, len(info_id) + 2):  ## 遍历第2行到32行

42         row_empty = []  ##建立一个空数组作为临时储存地,每次换行就被清空

43         for i in range(2, 9):  ## 遍历第2行到32行,第2到9列

44             data_excel = ws.cell(row=row_num_BtoU, column=i).value

45             if data_excel == None:

46                 pass

47             else:

48                 row_empty.append(data_excel)  ##将单元格信息储存进去

49         info_data.append(row_empty)

50     print(info_data)

51     print(len(info_data))

52

53     # 设置雷达各个顶点的名称

54     labels = np.array(info_first)

55     # 数据个数

56     data_len = len(info_first)

57     # 新建一个excel保存结果

58     workbook = xlsxwriter.Workbook('C:\\Users\\Administrator\\Desktop\\result.xlsx')

59     worksheet = workbook.add_worksheet()  # 创建一个工作表对象

60     # 字体格式

61     font = workbook.add_format(

62         {'border': 1, 'align': 'center', 'font_size': 11, 'font_name': '微软雅黑'})  ##字体居中,11号,微软雅黑,给一般的信息用的

63     # 写下第一行第一列的标签

64     worksheet.write(0, 0, '商品货号', font)

65     ##设置图片的那一列宽度

66     worksheet.set_column(0, len(info_first) + 1, 11)  # 设定第len(info_first) + 1列的宽度为11

67

68     ##写入标签

69     for k in range(0, 7):

70         worksheet.write(0, k + 1, info_first[k], font)

71     # 写入最后一列标签

72     worksheet.write(0, len(info_first) + 1, '雷达图', font)

73

74     # 将其他参数写入excel中

75     for j in range(0, len(info_id)):

76         worksheet.write(j + 1, 0, info_id[j], font)  # 写入商品货号

77         worksheet.set_row(j, 76)  ##设置行宽

78         for x in range(0, len(info_first)):

79             worksheet.write(j + 1, x + 1, info_data[j][x], font)  # 写入商品的其他参数

80

81     for i in range(0, len(info_id)):

82         data = np.array(info_data[i])

83

84         angles = np.linspace(0, 2 * np.pi, data_len, endpoint=False)

85         data = np.concatenate((data, [data[0]]))  # 闭合

86         angles = np.concatenate((angles, [angles[0]]))  # 闭合

87

88         fig = plt.figure()

89         ax = fig.add_subplot(111, polar=True)  # polar参数!!

90         ax.plot(angles, data, 'bo-', linewidth=2)  # 画线

91         ax.fill(angles, data, facecolor='r', alpha=0.25)  # 填充

92         ax.set_thetagrids(angles * 180 / np.pi, labels, fontproperties="SimHei")

93         ax.set_title("商品货号:" + str(info_id[i]), va='bottom', fontproperties="SimHei")

94         ax.set_rlim(3.8, 5)  # 设置雷达图的范围

95         ax.grid(True)

96         plt.savefig("C:\\Users\\Administrator\\Desktop\\result\\商品货号:" + str(info_id[i]) + ".png", dpi=120)

97         # plt.show()在python中显示

98

99         ##更改图片大小

100         infile = "C:\\Users\\Administrator\\Desktop\\result\\商品货号:" + str(info_id[i]) + ".png"

101         outfile = "C:\\Users\\Administrator\\Desktop\\result1\\商品货号:" + str(info_id[i]) + ".png"

102         im = Image.open(infile)

103         (x, y) = im.size

104         x_s = 80  ## 设置长

105         y_s = 100  ## 设置宽

106         out = im.resize((x_s, y_s), Image.ANTIALIAS)

107         out.save(outfile, 'png', quality=95)

108

109         worksheet.insert_image(i + 1, len(info_first) + 1,

110                                'C:\\Users\\Administrator\\Desktop\\result1\\' + "商品货号:" + str(

111                                    info_id[i]) + '.png')  ##写入图片

112         time.sleep(1)  ##防止写入太快电脑死机

113         plt.close()  # 一定要关掉图片,不然python打开图片20个后会崩溃

114

115     workbook.close()  # 最后关闭excel

转载于:https://www.cnblogs.com/TTyb/p/5703106.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript中带有示例的Math.log()方法

JavaScript | Math.log()方法 (JavaScript | Math.log() Method) Math.log() is a function in math library of JavaScript that is used to return the value of natural Log i.e. (base e) of the given number. It is also known as ln(x) in mathematical terms. Math.log…

SUI踩坑记录

SUI踩坑记录 最近做了个项目选型了SUI和vue做单页应用。下面记录一下踩坑经历SUI 介绍 sui文档:http://m.sui.taobao.org/SUI Mobile 是一套基于 Framework7 开发的UI库。它非常轻量、精美,只需要引入我们的CDN文件就可以使用,并且能兼容到 i…

java 写入xml文件_java读写xml文件

要读的xml文件李华姓名>14年龄>学生>张三姓名>16年龄>学生>学生花名册>package xml;import java.io.FileOutputStream;import java.io.OutputStreamWriter;import java.io.Writer;import java.util.Iterator;import java.util.Vector;import javax.xml.pa…

JavaScript中带有示例的Math.max()方法

JavaScript | Math.max()方法 (JavaScript | Math.max() Method) Math.max() is a function in math library of JavaScript that is used to return the greatest value of all the passed values to the method. Math.max()是JavaScript数学库中的函数,用于将所有…

java 修饰符默认_Java和C#默认访问修饰符

C#中:针对下面几种类型内部成员的访问修饰符:enum的默认访问修饰符:public。class的默认为private。interface默认为public。struct默认为private。其中:public可以被任意存取;protected只可以被本类和其继承子类存取&…

JavaScript中带有示例的Math.abs()方法

JavaScript | Math.abs()方法 (JavaScript | Math.abs() Method) Math operations in JavaScript are handled using functions of math library in JavaScript. In this tutorial on Math.abs() method, we will learn about the abs() method and its working with examples.…

人脸识别python face_recognize_python2.7使用face_recognition做人脸识别

偶然看到一篇文章,说是可以实时人脸识别,很有兴趣就自己按照文章开始动手人脸识别,但是实现过程中遇到了几个问题这里做个总结,希望可以帮助到大家安装face_recognition这个之前需要先安装编译dlib,如果没有安装dlib&a…

c# reverse_清单 .Reverse()方法,以C#为例

c# reverseC&#xff03;List <T> .Reverse()方法 (C# List<T>.Reverse() Method) List<T>.Reverse() method is used to reverse the all list elements. List <T> .Reverse()方法用于反转所有列表元素。 Syntax: 句法&#xff1a; void List<T&…

cpuinfo详解

cat /proc/cpuinfo processor: 23&#xff1a;超线程技术的虚拟逻辑核第24个 ###一般看最后一个0...23 表示24线程 vendor_id: GenuineIntel&#xff1a;CPU制造商cpu family: 6&#xff1a;CPU产品系列代号model: 44&#xff1a;CPU属于其系列中的哪一代号model name: Intel…

jvm延迟偏向_用于偏向硬币翻转模拟的Python程序

jvm延迟偏向Here, we will be simulating the occurrence coin face i.e. H - HEAD, T - TAIL. Simply we are going to use an inbuilt library called as random to call a random value from given set and thereby we can stimulate the occurrence value by storing the o…

java项目没有bin_WebAPI项目似乎没有将转换后的web.config发布到bin文件夹?

我很擅长.NET配置转换 . 我现在将它们放在用于数据使用的类库和WPF应用程序上 .但是&#xff0c;当我尝试使用ASP.NET WebAPI项目进行设置时&#xff0c;似乎发生了一些奇怪的事情 .配置文件永远不会显示在我的bin目录中&#xff0c;因此web.config始终显示为预先形成的配置文件…

opengl es的射线拾取

2019独角兽企业重金招聘Python工程师标准>>> 在opengl中关于拾取有封装好的选择模式&#xff0c;名字栈&#xff0c;命中记录&#xff0c;实现拾取的功能&#xff0c;相对容易一些。但是到了opengl es里面就比较倒霉了&#xff0c;因为opengl es是opengl的简化版&am…

java timezone_Java TimeZone useDaylightTime()方法与示例

java timezoneTimeZone类useDaylightTime()方法 (TimeZone Class useDaylightTime() method) useDaylightTime() method is available in java.util package. useDaylightTime()方法在java.util包中可用。 useDaylightTime() method is used to check whether this time zone u…

视觉学习(4) —— 添加地址传递数据

Modbus Slave 选择一个地址右键&#xff0c;选择发送的数据类型 视觉软件 一、添加地址 当地址为100时&#xff0c;先将首地址改为100&#xff0c;第0个地址为100&#xff0c;第1个地址为101&#xff0c;往后累加 若想使用100—150的地址&#xff0c;即首地址为100&#xff…

某个JAVA类断点无效_解决eclipse中断点调试不起作用的问题

最近几天&#xff0c;遇到了一个问题&#xff0c;就是在eclipse中进行断点调试程序到时候&#xff0c;跟踪不到我设置的断点。困惑了很久&#xff0c;在网上也查阅了很多资料&#xff0c;都没能解决我的问题。今天早上&#xff0c;我试着把eclipse的工作空间重新换了一个&#…

jquery中阻止事件冒泡的方法

2019独角兽企业重金招聘Python工程师标准>>> 根据《jquery基础教程》 第一种方法&#xff1a;判断事件的“直接”目标是否是自身&#xff0c;如果不是自身&#xff0c;不予处理 $(div.outter).click(function(event) {if (event.target this) {$(p).css(color, red…

java swing 组织机构_课内资源 - 基于Java Swing的小型社团成员管理系统

一、需求分析1.1 个人信息学号、姓名、性别、年级、系别、专业、出生日期、联系方式、个性签名、地址、照片。1.2 基本功能要求管理员信息管理登录、注销功能修改密码功能部落成员信息管理添加成员删除成员修改成员信息按条件查找筛选成员1.3 高级特性管理员权限管理成员信息包…

Java System类loadLibrary()方法与示例

系统类loadLibrary()方法 (System class loadLibrary() method) loadLibrary() method is available in java.lang package. loadLibrary()方法在java.lang包中可用。 loadLibrary() method is used to load the library with the given parameter named library_name(library …

CCF201509-2 日期计算(100分)

试题编号&#xff1a; 201509-2 试题名称&#xff1a; 日期计算 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 256.0MB 问题描述&#xff1a; 问题描述给定一个年份y和一个整数d&#xff0c;问这一年的第d天是几月几日&#xff1f;注意闰年的2月有29天。满足下面条件之一的…