python+matplotlib制作雷达图3例分析和pandas读取csv操作
1.例一
图1
代码1
#第1步:导出模块
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import font_manager # 中文字体设置第1步,导出模块 #中文字体设置第2步:引出字体模块和位置
my_font = font_manager.FontProperties(fname="/usr/share/fonts/truetype/noto/simsun.ttf") #数据来源,单独设定,非文件来源
#dataLenth = 8 #数据个数,8组数据
#标签
labels = np.array(['3℃','5℃','6℃','3℃','1℃','3℃','3℃','2℃'])
data = np.array([3,5,6,3,1,3,3,2]) #数据值,与上面labels有对应关系 #雷达图的数据格式,基本固定
#angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False)
#如果没有dataLenth = 8==len(labels),也可以这样
angles = np.linspace(0, 2*np.pi, len(labels), endpoint=False) data = np.concatenate((data, [data[0]]))
angles = np.concatenate((angles, [angles[0]])) #导出fig图片设置,雷达图这种格式基本固定
fig = plt.figure()
#polar=true,就是ax.set_thetagrids可以显示
ax = fig.add_subplot(111, polar=True)
#数据线的宽度2,ro-代表red-;bo-代表blue-;yo-代表yellow-;o-代表深蓝deepblue-
ax.plot(angles, data, 'ro-', linewidth=2) #ax.set_thetagrids(angles * 180/np.pi, labels, fontproperties="SimHei") #bug,本机报错
ax.set_thetagrids(angles * 180/np.pi, labels, fontproperties=my_font) #fig标题设置,中文字体设置
#中文字体设置第3步,在显示中文的地方,增加u和fontproperties=my_font
#ax.set_title("温度变化雷达图", va='bottom', fontproperties="SimHei")
ax.set_title(u"温度变化雷达图", va='bottom', fontproperties=my_font)
ax.grid(True) #显示雷达图的一圈一圈的线,8个圈线 #显示图片
plt.show()
2.例二
图2
代码二
#导出模块
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import font_manager # 中文字体设置第1步,导出模块 #中文字体设置
#plt.rcParams['font.sans-serif'] = ['KaiTi'] # 显示中文,本机不行
#中文字体设置第2步:引出字体模块和位置
my_font = font_manager.FontProperties(fname="/usr/share/fonts/truetype/noto/simsun.ttf") #中文字体设置第3步,在显示中文的地方,在这里增加u
labels = np.array([u'李白', u'王维', u'杜甫',u'白居易']) # 这种中文字体设置很难,分2个地方
#dataLenth = 4 # 数据长度
data_radar = np.array([63, 1, 15, 13]) # 数据 #angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False) # 分割圆周长
#如果不设置dataLenth = 4,也可以len(labels)=4,代表4组数据
angles = np.linspace(0, 2*np.pi, len(labels), endpoint=False) # 分割圆周长 data_radar = np.concatenate((data_radar, [data_radar[0]])) # 闭合
angles = np.concatenate((angles, [angles[0]])) # 闭合 plt.polar(angles, data_radar, 'bo-', linewidth=1) # 做极坐标系
# 中文设置的labels,在这里加fontproperties=my_font
plt.thetagrids(angles * 180/np.pi, labels,fontproperties=my_font)
plt.fill(angles, data_radar, facecolor='r', alpha=0.25)# 填充 plt.ylim(0, 70)
#中文字体设置第3步,在显示中文的地方,增加u和fontproperties=my_font
#va='bottom',默认这个;top可能与王维重叠
plt.title(u'四个人的年总收入', fontproperties=my_font) #标题设置 plt.show()
3.例三
3.1 读取csv数据
L R F M C
customer0 -0.18851 0.701298 -0.66178 -0.68228 -0.43681
customer1 0.050142 -0.33906 0.092392 0.065064 0.09756
customer2 -0.05403 -0.03271 -0.30585 -0.33106 0.011589
customer3 0.309113 -0.64527 1.378002 1.4691 0.3989
customer4 -0.12259 0.332883 -0.53543 -0.54537 -0.08043
3.2 图3
3.3 代码3
#导出模块
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt #定义
def result_pic(result):
# 解析出类别标签和种类
labels = ['L', 'R', 'F', 'M', 'C']
kinds = list(result.iloc[:, 0])
# 由于在雷达图中,要保证数据闭合,这里就再添加L列,并转换为 np.ndarray
result = pd.concat([result, result[['L']]], axis=1)
centers = np.array(result.iloc[:, 1:])
angle = np.linspace(0, 2 * np.pi, len(labels), endpoint=False)
angle = np.concatenate((angle, [angle[0]]))
# 绘图
fig = plt.figure()
ax = fig.add_subplot(111, polar=True) # 参数polar, 以极坐标的形式绘制图形
# 画线
for i in range(len(kinds)):
ax.plot(angle, centers[i], linewidth=2, label=kinds[i])
# 添加属性标签
ax.set_thetagrids(angle * 180 / np.pi, labels)
plt.title('data show')
plt.legend(loc='lower right')
plt.show() if __name__ == '__main__':
result = pd.read_csv('data2.csv', sep=',')
result_pic(result) #注意细节:一般我们都是喜欢用excel或者wps表格进行数据的输入
#但是在保存数据时,喜欢直接更改文件的属性,导致数据读不出来
#应该是将文件另存为.csv格式
python+matplotlib制作雷达图3例分析和pandas读取csv操作的更多相关文章
- python批量制作雷达图
老板要画雷达图,但是数据好多组怎么办?不能一个一个点excel去画吧,那么可以利用python进行批量制作,得到样式如下: 首先制作一个演示的excel,评分为excel随机数生成: 1 =INT(( ...
- 在Excel中制作雷达图
雷达图的作用 雷达图是专门用来进行多指标体系比较分析的专业图表.从雷达图中可以看出指标的实际值与参照值的偏离程度,从而为分析者提供有益的信息.雷达图一般用于成绩展示.效果对比量化.多维数据对比等等,只 ...
- Matplotlib学习---用matplotlib画雷达图(radar chart)
雷达图常用于对多项指标的全面分析.例如:HR想要比较两个应聘者的综合素质,用雷达图分别画出来,就可以进行直观的比较. 用Matplotlib画雷达图需要使用极坐标体系,可点击此链接,查看对极坐标体系的 ...
- HTML5 Canvas制作雷达图实战
雷达图又叫蜘蛛网图,是一种对各项数据查看很明显的表现图,在很多游戏中,对游戏中的每个角色的分析图一般也用这种图. 下面,用HTML5的Cavas来实现雷达图. 效果 一.创建Canvas var mW ...
- DevExpressXtraReport—制作雷达图
存储过程: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ========================================== ...
- python matplotlib imshow热图坐标替换/映射
今天遇到了这样一个问题,使用matplotlib绘制热图数组中横纵坐标自然是图片的像素排列顺序, 但是这样带来的问题就是画出来的x,y轴中坐标点的数据任然是x,y在数组中的下标, 实际中我们可能期望坐 ...
- Python+Matplotlib制作动画
注: 在"实验设计与数据处理"的课后作业中,有一个数据可视化的作业,利用课程上学习的某种方法找一个二维函数的最大值,并将这个寻找的过程可视化.在作业里面利用了Matplotlib的 ...
- python matplotlib 简单生成图
import numpy as np import pandas as pd from matplotlib import pyplot as plt data = pd.DataFrame([[1, ...
- python matplotlib.pyplot画矩形图 以及plt.gca()
plt的Rectangle参数: 第一个参数是坐标(x,y),即矩形的画图的起点坐标,这个起点坐标不是一味地从左下角开始画,而是对应整个图中坐标原点,即(0,0). 第二个参数是矩形宽度 第三个坐标是 ...
随机推荐
- vue制作滚动条幅-跑马灯效果实例代码
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 修复ThinkPHP导出excel数字过大时显示为科学记数法
修复ThinkPHP导出excel数字过大时显示为科学记数法,这种显示对于查看的用户来说是及其不友好的.所以,我们要使其转化为正常的数字串! 我在google 的过程中,查了一些资料.其中 1).// ...
- Selenium3+python自动化010-UnitTest框架简介和单元测试框架使用
一.UnitTest介绍 unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过, ...
- AngularJS中transclude用法详解
这篇文章主要介绍了AngularJS中transclude用法,详细分析了transclude的具体功能.使用技巧与相关注意事项,需要的朋友可以参考下 本文实例讲述了AngularJS中transcl ...
- ssm开发垃圾分类查询系统 源码 mysql
需求 基于SSM实现一个垃圾分类查询管理系统, 用户可以根据自定义查询分类信息, 管理员可以对分类信息, 垃圾详情信息进行增删改查的管理 运行环境 jdk1.8,tomcat8.5,mysql5.6, ...
- mysql行级锁 select for update
mysql行级锁 select for update 1.属于行级锁 2.where条件后需要写出明确的索引条件(如果有多个条件,可以建立联合索引) 3.如果其所在的事务提交或者回滚后,或者更新该条数 ...
- python之路set
一.set和其他集合的区别: list :允许重复的集合,修改 tuple:允许重复的集合,不修改 dict:字典 set:不允许重复的集合,set不允许重复的,列表是无序的 1.创建一个set s= ...
- 如何在Word中排出漂亮的代码,去除回车符,去除拼写检查
这位博主写到很到位,这里补充一下在VBA里用模块的部分. https://blog.csdn.net/code4101/article/details/41802715 1.放代码的方式是贴纯文本. ...
- 《TCP/IP入门经典》摘录--Part 3
TCP/IP协议系统 3.子网划分和CIDR 子网 划分网络 为什么需要划分子网? 子网划分就是在网络 ID 之下提供了第 2 层逻辑组织.路由器能够把数据报发送给网络里的某个子网地址(一般对应于一个 ...
- [CF755B] PolandBall and Game - 博弈论
[CF755B] Description 两个人轮流说单词,每个人只能说自己的的单词库里的单词.被任意方说过的单词不能再说.一个单词只会在某个人的单词库中出现一次,但是可能同时出现在两个人的单词库中. ...