python程序画图

一、引入matplotlib库

1、简介

Matplotlib是一个用于创建可视化图表的Python库。它提供了一种简单而灵活的方式来绘制各种类型的图表,包括线图、散点图、条形图、饼图、直方图等。

Matplotlib的主要特点包括:

简单易用:Matplotlib提供了直观的API,使得创建基本图表变得简单。只需几行代码,就可以创建一个基本的图表。

多样化的图表类型:Matplotlib支持各种类型的图表,包括线图、散点图、条形图、饼图、直方图、等高线图、3D图等。你可以根据需要选择合适的图表类型来展示数据。

定制化:Matplotlib允许用户对图表进行高度的定制。你可以设置图表的标题、轴标签、刻度、线条样式、颜色等各种属性,以满足特定的需求。

支持多种输出格式:Matplotlib可以将图表保存为各种常见的图像格式,如PNG、JPEG、PDF等。这使得你可以方便地将图表插入到文档、报告或网页中。

丰富的文档和社区支持:Matplotlib有详细的文档,包括官方文档和用户指南,涵盖了库的各个方面。此外,Matplotlib有一个活跃的社区,你可以在社区中提问、分享经验和获取帮助。

2、下载

pip install matplotlib

在这里插入图片描述

二、代码示例

1、简单直方图

import matplotlib.pyplot as plt#导入了matplotlib.pyplot库并将其重命名为plt

# 样本数据
data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 6, 6, 7]
#1有1个
#2有两个
#3有三个 。。。
# 使用plt.hist()函数绘制直方图
# 参数data传入样本数据,bins指定直方图的箱数(即柱子的数量)
# edgecolor设置柱子的边缘颜色
# 绘制直方图
plt.hist(data, bins=6, edgecolor='black')

# 设置标题和轴标签
plt.title('Histogram')
plt.xlabel('Value')
plt.ylabel('Frequency')

# 显示图形
plt.show()

结果
在这里插入图片描述

2、3D图

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 定义马鞍面的参数范围
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
x, y = np.meshgrid(x, y)

# 计算马鞍面的高度函数
z = x**2 - y**2

# 创建一个3D图形对象
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 绘制马鞍面
ax.plot_surface(x, y, z, cmap='viridis')

# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

# 显示图形
plt.show()

结果:
在这里插入图片描述

3、在指定区域化框

使用背景:
在一帧图片当中出现人的时候,需要给人画一个框,将人的位置标记处理,会出现多人的框重叠的情况,现在需要将这些框合并一下,是的最后给出的框是单连通区域,现在将合并前和后的两种图像都绘制出来。

import matplotlib.pyplot as plt #导入了matplotlib.pyplot库并将其重命名为plt
import matplotlib.patches as patches #matplotlib.patches库并将其重命名为patches


# 存储了合并前和合并后的矩形框的信息
# 每个矩形框都以字典的形式表示
# 包括x(左上角 x 坐标)、y(左上角 y 坐标)、w(宽度)和h(高度)

# 合并前的结果
rectangles_before = [
    {'x': 10, 'y': 10, 'w': 20, 'h': 20},
    {'x': 15, 'y': 15, 'w': 30, 'h': 30},
    {'x': 25, 'y': 25, 'w': 20, 'h': 20},
    {'x': 50, 'y': 50, 'w': 30, 'h': 30}
]

# 合并后的结果
rectangles_after = [
    {'x': 10, 'y': 10, 'w': 35, 'h': 35},
    {'x': 50, 'y': 50, 'w': 30, 'h': 30}
]

# 创建画布和子图
# 函数创建了一个包含两个子图的画布
# 返回的对象包括画布和子图的引用
# 其中,fig表示画布对象
# (ax1, ax2)表示两个子图对象。
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 5))

# 绘制合并前的画面
#设置子图1的标题为"合并前
ax1.set_title('合并前')

for rect in rectangles_before:
    x = rect['x']
    y = rect['y']
    w = rect['w']
    h = rect['h']
    #使用patches.Rectangle()函数创建一个矩形对象rect_patch
    rect_patch = patches.Rectangle((x, y), w, h, linewidth=1, edgecolor='r', facecolor='none')
    #使用ax1.add_patch()方法将矩形对象添加到子图1中
    ax1.add_patch(rect_patch)
#设置子图1的坐标轴范围和纵横比
ax1.set_xlim(0, 100)
ax1.set_ylim(0, 100)
ax1.set_aspect('equal')

# 绘制合并后的画面
ax2.set_title('合并后')
for rect in rectangles_after:
    x = rect['x']
    y = rect['y']
    w = rect['w']
    h = rect['h']
    rect_patch = patches.Rectangle((x, y), w, h, linewidth=1, edgecolor='b', facecolor='none')
    # ax1.add_patch(rect_patch)
    ax2.add_patch(rect_patch)
ax2.set_xlim(0, 100)
ax2.set_ylim(0, 100)
#设置子图2的纵横比(aspect ratio)为相等的意思
ax2.set_aspect('equal')

# 显示图形
#使用plt.show()函数显示图形,将子图显示在画布上
plt.show()

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

li星野

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值