Matplotlib学习

AI 摘要: 本文介绍了使用Matplotlib绘制各种图表的案例,包括折线图、散点图、柱状图等,详细说明了数据准备、图形创建、绘制、设置坐标轴、添加网格、标签和标题、保存图像及显示图像的步骤。总结了不同图表类型的主要用途及相应的Matplotlib API函数。

Untitled

测试一

# plt.figure(figsize=(),dpi=)
# figsize:指定图的长宽
# dpi:图像的清晰度
plt.figure(figsize=(10,10) ,dpi=100) 
plt.plot([1,2,3,4,5,6,7],[12,18,16,19,12,15,10])
plt.showce

Untitled

案例一

需求:画出某城市11点到12点1小时内每分钟的温度变化折线图,温度范围在15度~18度

如图:

Untitled

案例完整代码

import matplotlib.pyplot as plt
import random
from pylab import mpl

# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False

# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]

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

# 2.绘制图像
plt.plot(x, y_shanghai)

# 2.1 添加x,y轴刻度
# 构造x,y轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)

# 刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])

# 2.2 添加网格显示
plt.grid(True, linestyle="--", alpha=0.5)

# 2.3 添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点--12点某城市温度变化图", fontsize=20)

# 2.4 图像保存
plt.savefig("./test.png")

# 3.图像显示
plt.show()

Untitled

案例一文档:

这段代码展示了如何使用Python的Matplotlib库创建一个简单的温度变化图表。下面是代码的详细解释:

导入必要的库

import matplotlib.pyplot as plt
import random
from pylab import mpl

这里导入了matplotlib的pyplot模块、random模块和pylab的mpl模块。

设置中文显示

mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False

这两行代码设置了matplotlib的参数,使其能够正确显示中文字体和负号。

准备数据

x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]

创建了x轴数据(0到59的整数)和y轴数据(15到18之间的随机浮点数)。

创建画布

plt.figure(figsize=(20, 8), dpi=100)

创建一个20x8英寸、分辨率为100dpi的图形。

绘制图像

plt.plot(x, y_shanghai)

使用x和y_shanghai数据绘制折线图。

设置坐标轴

x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)

plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])

设置x轴和y轴的刻度标签。x轴每5分钟显示一次,y轴每5度显示一次。

添加网格

plt.grid(True, linestyle="--", alpha=0.5)

添加网格线,使用虚线样式,透明度为0.5。

添加标签和标题

plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点--12点某城市温度变化图", fontsize=20)

为x轴、y轴添加标签,并设置图表标题。

保存图像

plt.savefig("./test.png")

将图表保存为PNG文件。

显示图像

plt.show()

在屏幕上显示生成的图表。

这段代码生成了一个展示某城市在11点到12点之间温度变化的折线图,并将其保存为图片文件。

案例二

需求: 在一个坐标系中绘制多个图像,再添加一个城市的温度变化

Untitled

# 增加北京的温度数据
y_beijing = [random.uniform(1, 3) for i in x]

# 绘制折线图
plt.plot(x, y_shanghai)
# 使用多次plot可以画多个折线
plt.plot(x, y_beijing, color='r', linestyle='--')

图形风格的说明

颜色字符风格字符
r 红色- 实线
g 绿色- - 虚线
b 蓝色-. 点划线
w 白色: 点虚线
c 青色’ ’ 留空、空格
m 洋红
y 黄色
k 黑色

图例的显示

# 绘制折线图
plt.plot(x, y_shanghai, label="上海")
# 使用多次plot可以画多个折线
plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")

# 显示图例
plt.legend(loc="best")
Location StringLocation Code
‘best’0
‘upper right’1
‘upper left’2
‘lower left’3
‘lower right’4
‘right’5
‘center left’6
‘center right’7
‘lower center’8
‘upper center’9
‘center’10

案例的完整代码

# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1,3) for i in x]

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

# 2.绘制图像
plt.plot(x, y_shanghai, label="上海")
plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")

# 2.1 添加x,y轴刻度
# 构造x,y轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)

# 刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])

# 2.2 添加网格显示
plt.grid(True, linestyle="--", alpha=0.5)

# 2.3 添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点--12点某城市温度变化图", fontsize=20)

# 2.4 图像保存
plt.savefig("./test.png")

# 2.5 添加图例
plt.legend(loc=0)

# 3.图像显示
plt.show()

Untitled

案例二的文档:

准备数据

x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1,3) for i in x]

创建了x轴数据(0到59的整数)和两组y轴数据:

  • 上海:15到18之间的随机温度
  • 北京:1到3之间的随机温度

创建画布

plt.figure(figsize=(20, 8), dpi=100)

创建一个20x8英寸、分辨率为100dpi的图形。

绘制图像

plt.plot(x, y_shanghai, label="上海")
plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")

绘制两条折线:

  • 上海数据用默认颜色和实线
  • 北京数据用红色和虚线

设置坐标轴

x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)

plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])

设置x轴和y轴的刻度标签。x轴每5分钟显示一次,y轴每5度显示一次。

添加网格

plt.grid(True, linestyle="--", alpha=0.5)

添加网格线,使用虚线样式,透明度为0.5。

添加标签和标题

plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点--12点某城市温度变化图", fontsize=20)

为x轴、y轴添加标签,并设置图表标题。

保存图像

plt.savefig("./test.png")

将图表保存为PNG文件。

添加图例

plt.legend(loc=0)

添加图例,loc=0表示自动选择最佳位置。

显示图像

plt.show()

在屏幕上显示生成的图表。

案例三

需求:多个坐标系显示— plt.subplots(面向对象的画图方法)

Untitled

案例完整代码:

# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1, 5) for i in x]

# 1.创建画布
# plt.figure(figsize=(20, 8), dpi=100)
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100)

# 2.绘制图像
# plt.plot(x, y_shanghai, label="上海")
# plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")
axes[0].plot(x, y_shanghai, label="上海")
axes[1].plot(x, y_beijing, color="r", linestyle="--", label="北京")

# 2.1 添加x,y轴刻度
# 构造x,y轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)

# 刻度显示
# plt.xticks(x[::5], x_ticks_label[::5])
# plt.yticks(y_ticks[::5])
axes[0].set_xticks(x[::5])
axes[0].set_yticks(y_ticks[::5])
axes[0].set_xticklabels(x_ticks_label[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_label[::5])

# 2.2 添加网格显示
# plt.grid(True, linestyle="--", alpha=0.5)
axes[0].grid(True, linestyle="--", alpha=0.5)
axes[1].grid(True, linestyle="--", alpha=0.5)

# 2.3 添加描述信息
# plt.xlabel("时间")
# plt.ylabel("温度")
# plt.title("中午11点--12点某城市温度变化图", fontsize=20)
axes[0].set_xlabel("时间")
axes[0].set_ylabel("温度")
axes[0].set_title("中午11点--12点某城市温度变化图", fontsize=20)
axes[1].set_xlabel("时间")
axes[1].set_ylabel("温度")
axes[1].set_title("中午11点--12点某城市温度变化图", fontsize=20)

# # 2.4 图像保存
plt.savefig("./test.png")

# # 2.5 添加图例
# plt.legend(loc=0)
axes[0].legend(loc=0)
axes[1].legend(loc=0)

# 3.图像显示
plt.show()

Untitled

案例三文档:

准备数据

x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1, 5) for i in x]

创建x轴数据(0到59的整数)和两组y轴数据:

  • 上海:15到18之间的随机温度
  • 北京:1到5之间的随机温度

创建画布和子图

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100)

创建一个包含1行2列子图的画布,大小为20x8英寸,分辨率为100dpi。

绘制图像

axes[0].plot(x, y_shanghai, label="上海")
axes[1].plot(x, y_beijing, color="r", linestyle="--", label="北京")

在左侧子图绘制上海数据,在右侧子图绘制北京数据。

设置坐标轴

x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)

for ax in axes:
    ax.set_xticks(x[::5])
    ax.set_yticks(y_ticks[::5])
    ax.set_xticklabels(x_ticks_label[::5])

为两个子图设置相同的x轴和y轴刻度。

添加网格

for ax in axes:
    ax.grid(True, linestyle="--", alpha=0.5)

为两个子图添加网格线。

添加标签和标题

for ax in axes:
    ax.set_xlabel("时间")
    ax.set_ylabel("温度")
    ax.set_title("中午11点--12点某城市温度变化图", fontsize=20)

为两个子图添加x轴标签、y轴标签和标题。

保存图像

plt.savefig("./test.png")

将整个图表保存为PNG文件。

添加图例

for ax in axes:
    ax.legend(loc=0)

为两个子图添加图例,自动选择最佳位置。

显示图像

plt.show()

在屏幕上显示生成的图表。

这段代码生成了一个包含两个子图的图表,左侧显示上海的温度变化,右侧显示北京的温度变化。这种布局允许直观地比较两个城市的温度趋势,而不会在同一个图中造成视觉混乱。每个子图都有自己的坐标轴、标题和图例,使得信息呈现更加清晰和有组织。

案例四

需求:折线图的应用场景

  • 呈现公司产品(不同区域)每天活跃用户数
  • 呈现app每天下载数量
  • 呈现产品新功能上线后,用户点击次数随时间的变化
  • 拓展:画各种数学函数图像

Untitled

import numpy as np
# 0.准备数据
x = np.linspace(-10, 10, 1000)
y = np.sin(x)

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

# 2.绘制函数图像
plt.plot(x, y)
# 2.1 添加网格显示
plt.grid()

# 3.显示图像
plt.show()

常见图形种类及意义

  • 折线图:以折线的上升或下降来表示统计数量的增减变化的统计图

    特点:能够显示数据的变化趋势,反映事物的变化情况。(变化)

    api:plt.plot(x, y)

    Untitled

  • **散点图:**用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。

    特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)

    api:plt.scatter(x, y)

    Untitled

  • **柱状图:**排列在工作表的列或行中的数据可以绘制到柱状图中。

    特点:绘制连离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计/对比)

    api:plt.bar(x, width, align=‘center’, **kwargs)

    Parameters:
    x : 需要传递的数据
    ​
    width : 柱状图的宽度
    ​
    align : 每个柱状图的位置对齐方式
        {‘center’, ‘edge’}, optional, default: ‘center’
    ​
    **kwargs :
    color:选择柱状图的颜色
    

    Untitled

  • **直方图:**由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据范围,纵轴表示分布情况。

    特点:绘制连续性的数据展示一组或者多组数据的分布状况(统计)

    api:matplotlib.pyplot.hist(x, bins=None)

    Parameters:
    x : 需要传递的数据
    bins : 组距
    

    Untitled

  • **饼图:**用于表示不同分类的占比情况,通过弧度大小来对比各种分类。

    特点:分类数据的占比情况(占比)

    api:plt.pie(x, labels=,autopct=,colors)

    Parameters:
    x:数量,自动算百分比
    labels:每部分名称
    autopct:占比显示指定%1.2f%%
    colors:每部分颜色
    

Untitled

散点图绘制

需求:探究房屋面积和房屋价格的关系

房屋面积数据:

x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01,  20.67, 288.64,
       163.56, 120.06, 207.83, 342.75, 147.9 ,  53.06, 224.72,  29.51,
        21.61, 483.21, 245.25, 399.25, 343.35]

房屋价格数据:

y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61,  24.9 , 239.34,
       140.32, 104.15, 176.84, 288.23, 128.79,  49.64, 191.74,  33.1 ,
        30.74, 400.02, 205.35, 330.64, 283.45]
# 0.准备数据
x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01,  20.67, 288.64,
       163.56, 120.06, 207.83, 342.75, 147.9 ,  53.06, 224.72,  29.51,
        21.61, 483.21, 245.25, 399.25, 343.35]
y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61,  24.9 , 239.34,
       140.32, 104.15, 176.84, 288.23, 128.79,  49.64, 191.74,  33.1 ,
        30.74, 400.02, 205.35, 330.64, 283.45]

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

# 2.绘制散点图
plt.scatter(x, y)

# 3.显示图像
plt.show()

Untitled

柱状图绘制

需求-对比每部电影的票房收入

Untitled

电影数据如下图所示:

Untitled

  • 准备数据
['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴', '降魔传','追捕','七十七天','密战','狂兽','其它']
[73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]
  • 绘制柱状图

代码:

# 0.准备数据
# 电影名字
movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其它']
# 横坐标
x = range(len(movie_name))
# 票房数据
y = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)# 2.绘制柱状图
plt.bar(x, y, width=0.5, color=['b','r','g','y','c','m','y','k','c','g','b'])# 2.1b修改x轴的刻度显示
plt.xticks(x, movie_name)# 2.2 添加网格显示
plt.grid(linestyle="--", alpha=0.5)# 2.3 添加标题
plt.title("电影票房收入对比")# 3.显示图像
plt.show()

总结

图表类型主要用途Matplotlib API函数
折线图显示数据的变化趋势,反映事物的变化情况plt.plot()
散点图判断变量之间是否存在数量关联趋势,展示离群点plt.scatter()
柱状图绘制离散的数据,直观比较数据之间的差别plt.bar(x, width, align=“center”)
直方图绘制连续性数据,展示一组或多组数据的分布状况plt.hist(x, bins)
饼图表示不同分类的占比情况,通过弧度大小对比各种分类plt.pie(x, labels, autopct, colors)
  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值