数据分析mtplotlib模块的使用

matplotlib是在python中进行数据可视化操作非常好用的一个模块,通过它,我们可以完成MATLAB中的大部分操作,而且比MATLAB更为简单好用。
目前只介绍pyplot模块的使用。

pyplot 基础语法

基本绘图流程:
在这里插入图片描述

  1. 创建画布与创建子图:
    第一部分主要作用是构建出一张空白的画布, 并可以选择是否将整个画布划分为多个部
    分, 方便在同一幅图上绘制多个图形的情况。 最简单的绘图可以省略第一部分, 而后直接在
    默认的画布上进行图形绘制。
    在这里插入图片描述

  2. 添加画布内容
    第二部分是绘图的主体部分。 其中添加标题, 坐标轴名称, 绘制图形等步骤是并列的,
    没有先后顺序, 可以先绘制图形, 也可以先添加各类标签。 但是添加图例一定要在绘制图形
    之后。

在这里插入图片描述

  1. 存与展示图形
    第三部分主要用于保存和显示图形。

在这里插入图片描述

设置 pyplot 的动态 rc 参数

pyplot 使用 rc 配置文件来自定义图形的各种默认属性, 被称为 rc 配置或 rc 参数。
在 pyplot 中几乎所有的默认属性都是可以控制的, 例如视图窗口大小以及每英寸点数、线条宽度、 颜色和样式、 坐标轴、 坐标和网格属性、 文本、 字体等。
线条的常用 rc 参数名称、 解释与取值:
在这里插入图片描述
rc参数有两种使用方式:
第一种直接在绘制图形时以参数给出属性值
如:

plt.plot(rang,sin3,color='pink', marker='o', markersize='12', mfc='C', mec='C',linewidth=3, linestyle=':')

第二种使用rcParams以键值对形式进行设置

# 设置中文
plt.rcParams['font.sans-serif'] = 'SimHei'
# 设置正常显示符号,解决保存图像是符号“-”显示方块
# 两个设置一般一起使用
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['lines.linestyle'] = ':'
plt.rcParams['lines.marker'] = '+'
plt.rcParams['lines.linewidth'] = '0.1'

rc常用线条类型解释:
在这里插入图片描述
rc线条标记解释:
在这里插入图片描述

下面是对常用的统计图形的使用方法的介绍,以代码形式给出。
使用的统计文件见这个长长的链接

使用pyplot绘制散点图

import numpy as np
from matplotlib import pyplot as plt
# 设置中文显示
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
# 设置大文本显示
np.set_printoptions(threshold=10000)

data = np.load("matplot_data/国民经济核算季度数据.npz")
# print(type(data))#<class 'numpy.lib.npyio.NpzFile'>
values = data["values"]
columns = data["columns"]
# print(columns)
# print(values)

"""2000-2017 各产业与行业的国民生产总值散点图"""
# 1.创建画布
f = plt.figure(figsize=(10,13))
# 2.创建子视图
f.add_subplot(2,1,1)
# 3.绘制散点图
# 第一产业
plt.scatter(values[:,0],values[:,3],marker="D")
# 第二产业
plt.scatter(values[:,0],values[:,4],marker="o")
# 第三产业
plt.scatter(values[:,0],values[:,5],marker="+")

# 4.设置样式
# plt.xlabel("产业种类")
plt.ylabel("各产业生产总值(单位:亿元)")
plt.title("2000-2017年各产业的国民生产总值散点图")
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.legend(["第一产业","第二产业","第三产业"])

"""2000-2017 各产业与行业的国民生产总值折线图"""
# 1.创建画布
# f = plt.figure(figsize=(8,8),dpi=200)
# 2.创建子视图
f.add_subplot(2,1,2)
# 3.绘制散点图
# 农林牧渔业
plt.scatter(values[:,0],values[:,6],marker="D")
# 工业
plt.scatter(values[:,0],values[:,7],marker="o")
# 建筑业
plt.scatter(values[:,0],values[:,8],marker="+")
# 批发和零售业
plt.scatter(values[:,0],values[:,9],marker="x")
# 交通运输、仓储和邮政业
plt.scatter(values[:,0],values[:,10],marker="v")
# 住宿和餐饮业
plt.scatter(values[:,0],values[:,11],marker="h")
# 金融业
plt.scatter(values[:,0],values[:,12],marker="*")
# 房地产业
plt.scatter(values[:,0],values[:,13],marker="s")
# 其他行业
plt.scatter(values[:,0],values[:,14],marker="8")
# 4.设置样式
# plt.xlabel("产业种类")
plt.ylabel("各行业生产总值(单位:亿元)")
plt.title("2000-2017年各行业的国民生产总值散点图")
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.legend(["农林牧渔业","工业","建筑业","批发和零售业","交通运输、仓储和邮政业","住宿和餐饮业","金融业","房地产业","其他行业"])
# 5.保存与显示
plt.savefig("img/1.散点图1.png")
plt.show()

使用pyplot绘制折线图

import numpy as np
from matplotlib import pyplot as plt
# 设置中文显示
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
# 设置大文本显示
np.set_printoptions(threshold=10000)

data = np.load("matplot_data/国民经济核算季度数据.npz")
# print(type(data))#<class 'numpy.lib.npyio.NpzFile'>
values = data["values"]
columns = data["columns"]
# print(columns)
# print(values)

"""2000-2017 各产业与行业的国民生产总值散点图"""
# 1.创建画布
f = plt.figure(figsize=(10,13))
# 2.创建子视图
f.add_subplot(2,1,1)
# 3.绘制散点图
# 第一产业
plt.plot(values[:,0],values[:,3],marker="D")
# 第二产业
plt.plot(values[:,0],values[:,4],marker="o")
# 第三产业
plt.plot(values[:,0],values[:,5],marker="+")

# 4.设置样式
# plt.xlabel("产业种类")
plt.ylabel("各产业生产总值(单位:亿元)")
plt.title("2000-2017年各产业的国民生产总值散点图")
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.legend(["第一产业","第二产业","第三产业"])
# 5.保存与显示
# plt.savefig("img/1.散点图1.png")


"""2000-2017 各产业与行业的国民生产总值折线图"""

# 1.创建画布
# f = plt.figure(figsize=(8,8),dpi=200)
# 2.创建子视图
f.add_subplot(2,1,2)
# 3.绘制散点图
# 农林牧渔业
plt.plot(values[:,0],values[:,6],marker="D")
# 工业
plt.plot(values[:,0],values[:,7],marker="o")
# 建筑业
plt.plot(values[:,0],values[:,8],marker="+")
# 批发和零售业
plt.plot(values[:,0],values[:,9],marker="x")
# 交通运输、仓储和邮政业
plt.plot(values[:,0],values[:,10],marker="v")
# 住宿和餐饮业
plt.plot(values[:,0],values[:,11],marker="h")
# 金融业
plt.plot(values[:,0],values[:,12],marker="*")
# 房地产业
plt.plot(values[:,0],values[:,13],marker="s")
# 其他行业
plt.plot(values[:,0],values[:,14],marker="8")

# 4.设置样式
# plt.xlabel("产业种类")
plt.ylabel("各行业生产总值(单位:亿元)")
plt.title("2000-2017年各行业的国民生产总值散点图")
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.legend(["农林牧渔业","工业","建筑业","批发和零售业","交通运输、仓储和邮政业","住宿和餐饮业","金融业","房地产业","其他行业"])
# 5.保存与显示
plt.savefig("img/1.折线图1.png")
plt.show()

使用pyplot绘制柱状图

# 通用设置
import numpy as np
from matplotlib import pyplot as plt
# 设置中文显示
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
# 设置大文本显示
np.set_printoptions(threshold=10000)

# 1.创建画布
f = plt.figure(figsize=(10,12))
# 2.读取数据
data = np.load("./matplot_data/国民经济核算季度数据.npz")
values = data["values"]
columns = data["columns"]
print(columns)
print(values)
"""2000年第一季度各产业生产总值构成分布"""
# 1.创建子视图
f.add_subplot(2,2,1)
# 2.提取数据
value = values[0,3:6]
# print(value)
# 3.绘制柱状图
plt.bar(range(3,6),value,width=0.6)
# 4.样式设计
label=["第一产业","第二产业","第三产业"]
plt.xticks(range(3,6),label)
plt.title("2000年第一季度各产业生产总值构成分布")
plt.xlabel("2000年第一季度")
plt.ylabel("各产业国民生产总值(单位:亿元)")


"""2017年第一季度各产业生产总值构成分布"""
# 1.创建子视图
f.add_subplot(2,2,2)
# 2.提取数据
value = values[-1,3:6]
# print(value)
# 3.绘制直方图
plt.bar(range(3,6),value,width=0.6)
# 4.样式设计
label=["第一产业","第二产业","第三产业"]
plt.xticks(range(3,6),label)
plt.title("2017年第一季度各产业生产总值构成分布")
plt.xlabel("2017年第一季度")
plt.ylabel("各产业国民生产总值(单位:亿元)")


"""2000年第一季度各行业生产总值构成分布"""
# 1.创建子视图
f.add_subplot(2,2,3)
# 2.提取数据
value = values[0,6:]
# print(value)
# 3.绘制柱状图
plt.bar(range(9),value,width=0.3)
# 4.样式设计
label=["农林牧渔业","工业","建筑业","批发和零售业","交通运输、仓储和邮政业","住宿和餐饮业","金融业","房地产业","其他行业"]
plt.xticks(range(9),label,rotation=60)
plt.title("2000年第一季度各产业生产总值构成分布")
plt.xlabel("2000年第一季度")
plt.ylabel("各行业国民生产总值(单位:亿元)")


"""2017年第一季度各行业生产总值构成分布"""
# 1.创建子视图
f.add_subplot(2,2,4)
# 2.提取数据
value = values[-1,6:]
# print(value)
# 3.绘制柱状图
plt.bar(range(9),value,width=0.3)
# 4.样式设计
label=["农林牧渔业","工业","建筑业","批发和零售业","交通运输、仓储和邮政业","住宿和餐饮业","金融业","房地产业","其他行业"]
plt.xticks(range(9),label,rotation=60)
plt.title("2017年第一季度各行业生产总值构成分布")
plt.xlabel("2017年第一季度")
plt.ylabel("各产业国民生产总值(单位:亿元)")
# 5.保存与显示
plt.savefig("img/1.柱状图.png")
plt.show()

使用pyplot绘制扇形图

# 通用设置
import numpy as np
from matplotlib import pyplot as plt
# 设置中文显示
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
# 设置大文本显示
np.set_printoptions(threshold=10000)

# 1.创建画布
f = plt.figure(figsize=(10,12))
# 2.读取数据
data = np.load("./matplot_data/国民经济核算季度数据.npz")
values = data["values"]
columns = data["columns"]
print(columns)
print(values)
"""2000年各产业生产总值在国民生产总值中构成占比"""
# 1.创建子视图
f.add_subplot(2,2,1)
# 2.提取数据
value = values[0,3:6]
# print(value)
# 3.绘制饼状图
label=["第一产业","第二产业","第三产业"]
plt.pie(value,explode=[0.01,0.01,0.01],labels=label,autopct='%.2f%%')
# 4.样式设计
plt.title("2000年各产业生产总值在国民生产总值中构成占比")



"""2017年各产业生产总值在国民生产总值中构成占比"""
# 1.创建子视图
f.add_subplot(2,2,2)
# 2.提取数据
value = values[-1,3:6]
# print(value)
# 3.绘制饼状图
label=["第一产业","第二产业","第三产业"]
plt.pie(value,explode=[0.01,0.01,0.0],labels=label,autopct='%.2f%%')
# 4.样式设计
plt.title("2017年各产业生产总值在国民生产总值中构成占比")


"""2000年各行业生产总值在国民生产总值中构成占比"""
# 1.创建子视图
f.add_subplot(2,2,3)
# 2.提取数据
value = values[0,6:]
# print(value)
# 3.绘制饼状图
label=["农林牧渔业","工业","建筑业","批发和零售业","交通运输、仓储和邮政业","住宿和餐饮业","金融业","房地产业","其他行业"]
plt.pie(value,explode=[0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01],labels=label,autopct='%.2f%%')
# 4.样式设计
plt.title("2000年各行业生产总值在国民生产总值中构成占比")


"""2017年各行业生产总值在国民生产总值中构成占比"""
# 1.创建子视图
f.add_subplot(2,2,4)
# 2.提取数据
value = values[-1,6:]
# print(value)
# 3.绘制饼状图
label=["农林牧渔业","工业","建筑业","批发和零售业","交通运输、仓储和邮政业","住宿和餐饮业","金融业","房地产业","其他行业"]
plt.pie(value,explode=[0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01],labels=label,autopct='%.2f%%')
# 4.样式设计
plt.title("2017年各行业生产总值在国民生产总值中构成占比")

# 5.保存与显示
plt.savefig("img/1.饼状图.png")
plt.show()

使用pyplot绘制雷达图

import numpy as np
from matplotlib import pyplot as plt
# 设置中文显示
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
"""练习"""
# 1.获取数据
data = [3,4,7,9,5,6,8]
data2 = [2,5,7,3,8,9,4]
# 2.创建画布
plt.figure(figsize=(6,6))
# 3.角度与数据范围设置
angles = np.linspace(0,2*np.pi,7,endpoint=False)
# 使用concatenate组合数据进行数据闭合
new_data = np.concatenate((data,[data[0]]))
new_data2 = np.concatenate((data2,[data2[0]]))
# 使用concatenate组合角度进行角度闭合
new_angles = np.concatenate((angles,[angles[0]]))
# 4.绘制雷达图
plt.polar(new_angles,new_data,marker="+")
plt.polar(new_angles,new_data2,marker="D")

# 5.样式设置
plt.title("小明与小黄个人能力对比")
labels = ["智商","情商","动手能力","工作能力","忍耐力","爆发力","拼爹"]
plt.xticks(new_angles,labels,fontsize=10)
plt.legend(["小明","小黄"],fontsize=10)

# 6.保存与显示
plt.show()
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值