matplotlib数据可视化 (绘图)

一、折线图绘制

1、绘图流程

import matplotlib.pyplot as plt
import numpy as np

# 1、创建画布
# figsize ==画布尺寸
# dpi ---画布像素
plt.figure()

# 默认不支持中文,需要配置RC 参数
plt.rcParams['font.sans-serif'] = 'SimHei'
# 设置字体之后不支持负号,需要去设置RC参数更改编码
plt.rcParams['axes.unicode_minus'] = False

# 2、绘图
# 准备坐标
# 准备x  坐标  准备y 坐标     不这样(x0,y0) (x1,y1)
# 下周北京的天气温度
x = np.arange(1, 8)
y = np.array([30, 29, 28, 22, 23, 30, 32])

# 绘制折线图
plt.plot(x, y)

for i, j in zip(x, y):
    # print(i,j)
    # 参数1  x  轴位置
    # 参数2  标注的y轴位置
    # 参数3  标注的内容
    plt.text(i, j + 0.5, "%d℃" % j, horizontalalignment='center')

# 设置横轴中文 刻度
xticks = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
plt.xticks(x, xticks)
# 3、显示图片
plt.show()

2、详细介绍

import matplotlib.pyplot as plt
import numpy as np

# 1、创建画布
#  figsize=(20, 8), dpi=80
fig = plt.figure()

# 默认不支持中文,需要配置RC 参数
plt.rcParams['font.sans-serif'] = 'SimHei'
# 设置字体之后不支持负号,需要去设置RC参数更改编码
plt.rcParams['axes.unicode_minus'] = False

# 2、绘图
# 绘制sin曲线图
# 准备坐标
x = np.arange(0, 2 * np.pi, 0.1)
y1 = np.sin(x)
y2 = np.cos(x)

# get current axis 获得坐标轴对象
ax = plt.gca()

# 去除上边 和 右边的 坐标边框
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 指定 data  设置的bottom(也就是指定的x轴)绑定到y轴的0这个点上
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))

# 绘图
# color 线的颜色
# linestyle  线性
# linewidth 线宽
# marker  点的形状
# markersize  点的大小
# markerfacecolor 点的填充颜色
# markeredgecolor 点的边缘颜色
plt.plot(x, y1, color='r', linestyle=':', linewidth=1.2, marker="*", markersize=7, markerfacecolor='b',
         markeredgecolor='g')
plt.plot(x, y2)

# https://www.cnblogs.com/darkknightzh/p/6117528.html

#  修饰  建议全部放在绘图之后
# 增加标题
plt.title("sinx/cosx曲线图")

# 添加横轴、纵轴标题
plt.xlabel("横轴")
# 标注框的top位置
plt.ylabel("纵轴", rotation=0, horizontalalignment='right', verticalalignment='top')

# 增加图例
# loc  图例位置
plt.legend(["y=sinx", 'y=cosx'], loc=1)

# 设置横纵坐标刻度
yticks = np.arange(-1, 1.1, 0.5)  # 对于y轴的刻度只能重新设置数组来设置刻度
# 对于x 轴,如果是值,那么必须设置注意值的范围
xticks = np.arange(0, 6.6, 0.5)
plt.xticks(xticks)
plt.yticks(yticks)

# 保存图片
plt.savefig("./sinx、cosx曲线图.png")
# 3、图片显示
plt.show()

二、散点图

import numpy as np
import matplotlib.pyplot as plt

# 1、创建画布
plt.figure()
# 2、绘图
# 构建 x 与 y 轴坐标
x = np.arange(1, 6)

y = np.random.randn(5)

# 绘制散点图---比折线图严格,x,y维数必须一致
# s  点的大小,可以传一个,也可以传一个数组,会从前往后依次使用大小
# c  点的颜色 ,可以传一个,也可以传一个array,会从前往后依次使用大小
# marker  点的形状---,只能传一个字符串"*"
# alpha  --透明度
#
plt.scatter(x, y, s=[20, 50, 30, 18, ], c=['r', 'g', 'pink', 'y'], marker="*", alpha=1)

# 3、展示图片
plt.show()

# 散点图应用场景
# 1、类似于折线图的散点图可以用来描述走势
# 2、聚集的散点图可以用来描述点与点的相关性

三、柱状图

"""
直方图 与柱状图 区别
直方图:---数据的分布情况,横轴是数据范围,纵轴是落在范围内的频数,适用于大数据
柱状图:---统计类别数据的数量,横轴是数据的类别,纵轴是类别的频数,适用于少量数据,而且类别不宜过多
"""
import matplotlib.pyplot as plt
import numpy as np

# 加载数据
res = np.load("./国民经济核算季度数据.npz", allow_pickle=True)
columns = res['columns']
values = res['values']

print("columns:\n", columns)
print("values:\n", values)

# 1、创建画布
plt.figure()
# 默认不支持中文,需要配置RC 参数
plt.rcParams['font.sans-serif'] = 'SimHei'
# 设置字体之后不支持负号,需要去设置RC参数更改编码
plt.rcParams['axes.unicode_minus'] = False
# 2、绘图
x = np.arange(1, 4)
y = values[0, 3:6]
# 参数 x    类别数的标号
# 参数y   各个类别所对应的类别的数量
# width 是代表类别之间间距的百分之多少
# color 代表柱子的颜色,可以传带个字符串,也可以传一个列表
plt.bar(x, y, width=0.8, color=['r', 'g', 'b'])

# 设置刻度
plt.xticks(x, ["A", 'B', 'C'])

# 标注
for i, j in zip(x, y):
    plt.text(i, j + 100, "%.2f亿元" % j, horizontalalignment='center')

# 柱状图不需要设置图例
# 3、展示图片
plt.show()

四、直方图

import numpy as np
import matplotlib.pyplot as plt

# 绘制班级同学体重的分布规律直方图


# 1、创建画布
plt.figure()

# 2、绘图
# 假设咱们有20个同学
weight = np.array([40, 44, 48, 46, 51, 56, 58, 62, 69, 75, 89, 78, 69, 56, 88, 57, 49, 60, 50, 61])

# bins = 4  让系统默认进行分组
# 可以自定义进行分组--等宽分组
# 计算最大值与最小值差值---极差
ptp = weight.max() - weight.min()
# 计算步长 并向上取整
step = np.ceil(ptp / 4)
# 设置等宽bins
bins = np.arange(weight.min(), weight.max() + step, step)

# print(bins)

plt.hist(weight, bins=bins, color='r', edgecolor='g')

# 设置x刻度
plt.xticks(bins)

# 增加网格曲线
plt.grid(True, axis='y', alpha=0.2)

# 不需要设置图例

# 3、展示图片
plt.show()

# 统计薪资分布的直方图
# 大家自己创建数据 [3000,20000]之间,创建25个人,自定义分组,去查看薪资分布情况
# 需要写出结论

五、饼图

import matplotlib.pyplot as plt
import numpy as np

# 加载数据
res = np.load("./国民经济核算季度数据.npz", allow_pickle=True)
columns = res['columns']
values = res['values']

print("columns:\n", columns)
print("values:\n", values)

# 1、创建画布
plt.figure()

# 默认不支持中文,需要配置RC 参数
plt.rcParams['font.sans-serif'] = 'SimHei'
# 设置字体之后不支持负号,需要去设置RC参数更改编码
plt.rcParams['axes.unicode_minus'] = False

# 2、绘图
#  x  绘制饼图的真实数据
# explode  部分距离饼心的距离,即缝隙
# labels 饼图各部分的名称
# labeldistance  -名称距离圆心的距离远近
# color -饼图各部分的颜色,可以是一个,也可以传一个数组
# autopct ---占比的显示 以%.2f%%形式设置
#  pctdistance ---显示的占比数据距离圆心的远近
# radius 饼的半径
# shadow  设置阴影
# 设置数据
x = values[-1, 3:6]
# 设置缝隙---长度必须和x 一致
explode = (0.01, 0.01, 0.01)
# 设置label
labels = [tmp[:4] for tmp in columns[3:6]]
# 设置颜色
color = ['r', 'g', 'y']
# 设置显示位数
autopct = "%.1f%%"

plt.pie(x, explode=explode, labels=labels, colors=color, autopct=autopct, shadow=True)

# 将饼子捏圆
plt.axis('equal')

# 3、图形展示
plt.show()

# 场景:
# 部分与整体的关系
# 部分与部分的关系
# 部分不能太多,部分不能太多

六、箱线图

import numpy as  np
import matplotlib.pyplot as plt

# 加载数据
res = np.load("./国民经济核算季度数据.npz", allow_pickle=True)

# 获取数据
columns = res['columns']
values = res['values']

print("columns:\n", columns)
print("values:\n", values)

# 1、创建画布
plt.figure()
# 默认不支持中文,需要配置RC 参数
plt.rcParams['font.sans-serif'] = 'SimHei'
# 设置字体之后不支持负号,需要去设置RC参数更改编码
plt.rcParams['axes.unicode_minus'] = False

# 2、绘图
# 给定x 的时候  每一个要画的箱子的数据必须是一个整体元素
# x = (values[:, 3],values[:, 4],values[:, 5]) # 如果上面这种写法报错
x = list((list(values[:, 3]), list(values[:, 4]), list(values[:, 5])))

#  notch  就是开缺口,---牵扯到数学概念---置信区间
# meanline 均线
# showmeans  展示均线
# labels 名称
labels = [tmp[:4] for tmp in columns[3:6]]
plt.boxplot(x, notch=True, meanline=True, showmeans=True, labels=labels)

plt.grid(True)

# 3、展示图片
plt.show()

#  没有什么具体的应用场景,只要有需求都可以使用

猜你喜欢

转载自blog.csdn.net/qq_40576301/article/details/101530293