Python数据可视化

Python数据可视化

一、柱状图

下面展示一些 内联代码片


import numpy as np
import matplotlib.pyplot as plt
#从csv文件中读取数据
arrstd=np.loadtxt("student.csv",dtype=bytes,delimiter=",",skiprows=1).astype(str)
# print(arrstd)
#使用numpy的直方图统计功能histogram()获取每个分数段的人数:
sarr=arrstd[:,7:8]#获取所有学生总成绩,形成一个数组
sarr=sarr.astype(np.int32)#将学生成绩由字符串类型转换成整形
# print(sarr)
tarr=arrstd[:,1:7]#获取所有学生各个题目得分数据
tarr=tarr.astype(np.int32)#
# print(sarr)
hist,bins=np.histogram(sarr,bins=[0,60,70,80,90,100],range=(0,100))
# print(hist)#hist表示直方图统计结果
# print(bins)#bins表示hist对应区间数据
#             #hist和bins均为ndarray类型
# print(tarr)
tmean=tarr.mean(axis=0)#计算每道题目的平均值
# print(tmean)
tdfl=tmean/np.array([20])#计算得分率
# print(tdfl)
"""
Matplotlib是Python数据分析、
数据探索中数据可视化的重要第三方库。
与numpy构成有效的 MatLab 开源替代方案,
也可与其他图形工具包(如:PyQt、wxPython等)联合使用。
可以生成点线图plot、柱状图bar、饼状图pie、散点图scatter、极坐标图polar等各种数据图表。
Matplotlib库内部结构复杂,通常导入matplotlib.pyplot基础模块,
该模块是绘制各类可视化图形的命令子库,用于绘制各种图形。

"""
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['font.serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
x=bins[0:-1]
y=hist
# plt.bar(x,y,width=5,color='pink')
plt.title("成绩分布图")
plt.xlabel('分数段')
plt.ylabel('人数')
bins[0]=50#50代表60分以下的成绩,个数与hist数组相同
print(bins)
x=bins[0:-1]
# print(x)
#修改坐标轴的刻度值
plt.axis([40,100,0,10])#设置坐标值范围, x轴范围[40,100],y轴范围[0,40]
plt.xticks(x, ['60分以下', '60-70分', '70-80分', '80-90分', '90-100分'])
# ticks:设置X轴刻度间隔
# labels: 设置每个间隔的显示标签
plt.bar(x, y, width=5,color='pink', align='center')#调整x轴对齐方式
# plt.text(x横坐标,y纵坐标,显示数据,水平对齐,垂直对齐)
for x,y in zip(x,hist):
    plt.text(x,y+0.05,str(y),ha='center',va='bottom')
plt.grid()#添加背景网格
plt.show()

在这里插入图片描述

二、雷达图

下面展示一些 内联代码片


"""
雷达图(rader)常用于对多项指标的全面对比分析,
各项指标在雷达图分别绘制出来,可以进行直观的比较。
用Matplotlib画雷达图需要使用极坐标体系(polar)。
"""
import numpy as np
import matplotlib.pyplot as plt
arrstd=np.loadtxt('student.csv',dtype=bytes,delimiter=",",skiprows=1).astype(str)
#获得所有学生总成绩
sarr=arrstd[:,7:8]
sarr=sarr.astype(np.int32)
#获得学生各个题目的成绩
tarr=arrstd[:,1:7]
tarr=tarr.astype(np.int32)
plt.rcParams['font.family']=['SimHei']
plt.rcParams['axes.unicode_minus']="False"
tmean=tarr.mean(axis=0)#用mean()计算每道题目的平均分
tdfl=tmean/np.array([20])#计算每道题目的得分率
#将整圆2π平均分成6份,极坐标中endpoint必须设置为False
# numpy在numpy.linspace()为我们提供了一个单独的序列生成器,通过适当的参数可以和arange()得到相同的输出
angles=np.linspace(0,2*np.pi,6,endpoint=False)#极角数据
data=tdfl
labels= ['选择题','填空题','判断题','简答题','程序编写题','程序填空题']#极经数据
plt.polar(angles,data,'bo-',lw=1)#绘制极坐标
plt.title("得分率雷达图",y=1.06,fontsize=15)#title方法必须写在polar方法之后
"""
用法: 
lines, labels = thetagrids(angles, labels=None, fmt=%d’, frac = 1.5)
参数:
Angles:
将角度设置为theta网格的位置(这些网格线沿theta尺寸相等)
labels:如果不是None,则为len(angles)或在每个角度使用的标签字符串列表。如果标签为None,则标签为fmt%angle。
frac:它是极坐标半径在标签位置的分数(1是边)。例如1.25在轴外,而0.75在轴内。
"""
plt.thetagrids(angles*180/np.pi,labels,y=0.02)#设置极角标签#angles*180/np.pi弧度转角度
angles = np.concatenate((angles, [angles[0]]))  # 角度数据首尾相接,曲线闭合
data = np.concatenate((data, [data[0]]))        #得分率数据首尾相接,曲线闭合
plt.polar(angles,data,'bo-',lw=1)#绘制修改之后的雷达图
plt.fill(angles,data,"r",alpha=0.2)#填充闭合连线区域,r表示填充颜色,alpha表示填充的透明度,1表示不透明
plt.ylim(0,1)#修改极坐标位置为0-1
#添加数据点数据显示
for x,y in zip(angles,data):
    plt.text(x,y+0.09,round(y,2),ha='center',va='bottom')
plt.show()

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值