【python】数据可视化——matplotlib

这篇具有很好参考价值的文章主要介绍了【python】数据可视化——matplotlib。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

matplotlib介绍

matplotlib是一个强大的Python绘图库,用于创建高质量的静态、动态和交互式图表。它提供了广泛的绘图选项,适用于数据可视化、科学计算、工程绘图等多个领域。

主要特点:

  1. 丰富的图表类型:matplotlib支持各种常见的图表类型,包括折线图、散点图、柱状图、饼图、箱线图、等高线图等。这使得你可以根据不同需求选择最适合的图表类型来展示数据。
  2. 高度可定制性:matplotlib提供了丰富的配置选项,允许你自定义图表的各个方面,包括线条样式、颜色、坐标轴刻度、标签、标题等。你可以通过调整这些参数来使图表符合你的需求,并保证图表的美观与易读性。
  3. 支持多种输出格式:matplotlib可以将图表保存为多种格式,如图像文件(PNG、JPEG、SVG等)、PDF文档等。这方便了图表的保存和共享,使其可以在各种媒介上使用。
  4. 支持交互式图表:matplotlib可以与其他库(如NumPy、Pandas、Seaborn)以及IPython等交互式环境相结合,实现动态和交互式的数据可视化。这让你能够通过操作图表来探索和分析数据。

matplotlib安装

pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

import matplotlib
print(matplotlib.__version__)	#3.8.0

绘图核心对象

对象 描述
Figure(图形) 包含了所有的绘图元素
Axes(坐标轴) Figure对象可以包含一个或多个Axes对象。通过add_subplot()方法可以创建和添加多个Axes对象
Axis(坐标系) 控制坐标轴的刻度、标签和范围等属性
Title(标题) Figure对象可以有一个或多个标题
Legend(图例) 显示图例,即解释图表中不同元素的标签和样式
Tick(刻度标签) Tick对象代表坐标轴上的刻度线和刻度标签。
Axis Labels(轴标签) 轴标签,xlable、ylable
Annotation(注释) 添加带有标签的注释
import matplotlib.pyplot as plt

# 创建 Figure 和 Axes 对象
fig, ax = plt.subplots()

# 绘制曲线
x = [1, 2, 3, 4, 5]
y = [10, 20, 30, 40, 50]
ax.plot(x, y, label='Line')

# 设置标题
ax.set_title('My Plot')

# 设置 x 轴和 y 轴标签
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')

# 设置刻度标签
ax.set_xticks([1, 2, 3, 4, 5])   # 设置 x 轴刻度位置
ax.set_xticklabels(['A', 'B', 'C', 'D', 'E'])   # 设置 x 轴刻度标签
ax.set_yticks([0, 20, 40, 60])   # 设置 y 轴刻度位置
ax.set_yticklabels(['zero', 'twenty', 'forty', 'sixty'])   # 设置 y 轴刻度标签

# 添加图例
ax.legend()

# 添加网格
ax.grid()

# 添加注释
ax.annotate('Max value', xy=(4, 40), xytext=(4, 30),
            arrowprops=dict(arrowstyle='->'))

# 保存图形
plt.savefig('my_plot.png')

# 显示图形
plt.show()

matplotlib,Python学习,python,信息可视化,matplotlib

绘制多个子图

创建一个包含多个子图(Axes对象)的Figure对象

fig, ax = plt.subplots(nrows=1, ncols=1, ...)
  • nrows:子图的行数,默认为1。
  • ncols:子图的列数,默认为1。
  • 其他可选参数:如sharexsharey等,用于指定子图是否共享坐标轴、网格等属性。

返回值:一个包含Figure和一个或多个Axes对象的元组(fig, ax)

import matplotlib.pyplot as plt

# 创建一个包含2行2列的子图布局
fig, ax = plt.subplots(nrows=2, ncols=2)	# axes

# 在第一个子图(ax[0, 0])中绘制折线图
ax[0, 0].plot([1, 2, 3], [1, 4, 9])
ax[0, 0].set_title('Subplot 1')

# 在第二个子图(ax[0, 1])中绘制散点图
ax[0, 1].scatter([1, 2, 3], [1, 4, 9])
ax[0, 1].set_title('Subplot 2')

# 在第三个子图(ax[1, 0])中绘制柱状图
ax[1, 0].bar(['A', 'B', 'C'], [3, 2, 5])
ax[1, 0].set_title('Subplot 3')

# 在第四个子图(ax[1, 1])中绘制饼图
ax[1, 1].pie([2, 4, 6])
ax[1, 1].set_title('Subplot 4')

# 调整子图之间的间距
plt.tight_layout()

# 显示图形
plt.show()

matplotlib,Python学习,python,信息可视化,matplotlib

绘图范式

面向对象(Object-Oriented)范式

  • 这种范式使用FigureAxes和其他绘图对象来构建图表。
  • 首先创建一个Figure对象,然后在其中添加一个或多个Axes对象来绘制数据。
  • 通过对Axes对象调用各种方法来设置坐标轴、添加线条、散点、图例等。
  • 这种范式提供了更灵活的控制和定制图表的方式,适用于更复杂的绘图需求。

以下是一个使用面向对象范式绘制折线图的简单示例:

import matplotlib.pyplot as plt

# 创建一个空白的Figure对象和一个Axes对象
fig, ax = plt.subplots()

# 绘制折线图
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]
ax.plot(x, y)

# 设置标题、坐标轴标签等
ax.set_title('My First Plot')
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')

# 显示图形
plt.show()

快速绘图(Pyplot)范式

  • 这种范式使用pyplot模块中的函数来绘制图表,而不需要显式地创建和操作FigureAxes对象。
  • 使用全局的状态来隐式地操作当前的图表和子图。
  • 这种范式适用于快速绘制简单的图表。

以下是一个使用快速绘图范式绘制折线图的简单示例:

import matplotlib.pyplot as plt
# 绘制折线图
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]
plt.plot(x, y)

# 设置标题、坐标轴标签等
plt.title('My First Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')

# 显示图形
plt.show()

matplotlib,Python学习,python,信息可视化,matplotlib

修改线条颜色

matplotlib中,可以使用color参数来修改线条的颜色。下面介绍两种常用的方法来指定线条的颜色:

预定义颜色

  • matplotlib提供了一些预定义的颜色名称,如'blue''red''green'等。
  • 可以将预定义的颜色名称作为color参数的值传递给绘图函数。
  • 例如,plt.plot(x, y, color='blue')会将线条颜色设置为蓝色。
import matplotlib.pyplot as plt
import numpy as np

# 创建一个包含100个元素的等间隔数组x,其取值范围从0到5(包含0和5)
x = np.linspace(0, 5, 100)

plt.figure(figsize=(10, 5))
# 使用预定义的颜色名称设置线条颜色为红色
plt.subplot(1,2,1)
plt.plot(x, x, 'red')
# 使用预定义的颜色名称设置线条颜色为蓝色
plt.subplot(1,2,2)
plt.plot(x, x**2, 'blue')

# 显示图形
plt.show()

RGB或RGBA颜色值

  • 可以使用RGB(红绿蓝)或RGBA(红绿蓝透明度)颜色值来指定线条的颜色。
  • RGB颜色值由三个0到1之间的浮点数表示,分别代表红、绿和蓝的分量。
  • RGBA颜色值由四个0到1之间的浮点数表示,分别代表红、绿、蓝和透明度的分量。

以下是一个示例,展示如何修改线条的颜色:

import matplotlib.pyplot as plt
import numpy as np

# 创建一个包含100个元素的等间隔数组x,其取值范围从0到5(包含0和5)
x = np.linspace(0, 5, 100)
plt.figure(figsize=(10, 5))

# 使用预定义的颜色名称设置线条颜色为红色
plt.subplot(1,2,1)
plt.plot(x, x, color='red')

# 使用RGBA颜色值设置线条颜色为蓝色,并设置透明度为0.5
plt.subplot(1,2,2)
plt.plot(x, x**2, color=[0, 0, 1, 0.5]) #设置线条颜⾊

# 显示图形
plt.show()

matplotlib,Python学习,python,信息可视化,matplotlib

修改线条线型

  1. 实线:'-''solid'
  2. 虚线:'--''dashed'
  3. 点线:':''dotted'
  4. 点划线:'-.''dashdot'

面向对象(Object-Oriented)范式

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]

# 创建一个2x2的子图布局,将整个图形分割为2行2列
fig, axes = plt.subplots(2, 2)
# 在第一个子图中绘制数据
axes[0, 0].plot(x, y, linestyle='-')
axes[0, 0].set_title('Plot 1')
# 在第二个子图中绘制数据
axes[0, 1].plot(x, y, linestyle='--')
axes[0, 1].set_title('Plot 2')
# 在第三个子图中绘制数据
axes[1, 0].plot(x, y, linestyle=':')
axes[1, 0].set_title('Plot 3')
# 在第四个子图中绘制数据
axes[1, 1].plot(x, y, linestyle='-.')
axes[1, 1].set_title('Plot 4')
# 调整子图之间的间距
plt.tight_layout()
# 显示图形
plt.show()

matplotlib,Python学习,python,信息可视化,matplotlib

快速绘图(Pyplot)范式

import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]

plt.figure(figsize=(10, 5))
plt.subplot(2,2,1)
plt.plot(x, y, 'C0', linewidth=3, linestyle='solid')
plt.title('Plot 1')

plt.subplot(2,2,2)
plt.plot(x, y,'C1', linewidth=5, linestyle='dashed')
plt.title('Plot 2')

plt.subplot(2,2,3)
plt.plot(x, y,'C2', linewidth=5, linestyle='dotted')
plt.title('Plot 3')

plt.subplot(2,2,4)
plt.plot(x, y,'C3', linewidth=5, linestyle='dashdot')
plt.title('Plot 4')

# 调整子图之间的间距
plt.tight_layout()
plt.show()

matplotlib,Python学习,python,信息可视化,matplotlib

matplotlib综合案例

import matplotlib.pyplot as plt
import numpy as np

plt.figure(figsize=(12,8))
fontsize = 16

# 绘制第⼀幅图:双折线图
plt.subplot(2,2,1) 
# 创建一个包含100个元素的等间隔数组x,其取值范围从0到3(包含0和3)
x = np.linspace(0,3,100)
# 刻度设置为从0到4.5,步长为0.5的位置
plt.xticks(np.arange(0,4.5,0.5))
plt.yticks(np.arange(0,10,1))
#设置显示范围
plt.xlim(left=0, right=4)
plt.ylim(bottom=0, top=10)
plt.plot(x, x, 'C0', linewidth=3, linestyle='solid', label='$y=x$')
plt.plot(x, x**2, 'C1', linewidth=3, linestyle='solid', label='$y=x^2$')
plt.title('双折线图', fontsize=fontsize)
plt.xlabel('x轴标签', fontsize=fontsize)
plt.ylabel('y轴标签', fontsize=fontsize)
plt.annotate('$y=x$', xy=(2,2), fontsize=fontsize, color='C0',xytext= (+40,-40),textcoords='offset points',arrowprops = dict(arrowstyle='->'))
plt.annotate('$y=x^2$', xy=(2.5,6.25), fontsize=fontsize, color='C1',xytext= (+40,-40),textcoords='offset points',arrowprops = dict(arrowstyle='->'))
plt.legend(loc='upper left')
plt.grid()

#第⼆幅⼦图:绘制双柱状图
plt.subplot(2,2,2) #axes
labels = ['组1', '组2', '组3', '组4', '组5']
car1_sale = [20, 29, 32, 30, 27]
car2_sale = [23, 32, 30, 25, 25]
#创建一个与labels长度相同的数组,表示每个柱子的x坐标位置
x = np.arange(len(labels)) 
width = 0.35  # 柱状图的宽度
rects1 = plt.bar(x - width / 2, car1_sale, width, label='阿迪达斯', color='C1')
rects2 = plt.bar(x + width / 2, car2_sale, width, label='耐克', color='C2')
plt.ylabel('销量', fontsize=fontsize)
plt.title('两种品牌销量对比', fontsize=fontsize)
plt.xticks(x, labels, fontsize=fontsize)
plt.legend()
# 每个柱⼦上绘制y值
plt.bar_label(rects1, padding=3, fontsize=fontsize)
plt.bar_label(rects2, padding=3, fontsize=fontsize)

# 第三幅⼦图:绘制散点图
plt.subplot(2, 2, 3)
N = 45  # 散点个数
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (30 * np.random.rand(N)) ** 2
plt.scatter(x, y, s=area, c=colors, alpha=0.76)
plt.xlabel('x坐标', fontsize=fontsize)
plt.ylabel('y坐标', fontsize=fontsize)
plt.title('45个散点', fontsize=fontsize)

# 第四个⼦图:饼图
plt.subplot(2, 2, 4)
labels = [u'西兰花', u'土豆', u'胡罗卜', u'茄⼦']  # 定义标签
sizes = [120, 255, 300, 80]  # 每块值
colors = ['C0', 'C1', 'C2', 'C3']  # 每块颜⾊定义
explode = (0, 0, 0.03, 0)  # 某⼀块分割,值越⼤分割间隙越⼤
_, text1, text2 = plt.pie(sizes,
                          explode=explode,
                          labels=labels,
                          colors=colors,
                          labeldistance=1.2,  # 图例距圆⼼半径倍距离
                          autopct='%3.2f%%',  # 数值保留固定⼩数位
                          shadow=False,  # ⽆阴影设置
                          startangle=90,  # 逆时针起始⻆度设置
                          pctdistance=0.8)  # 数值距圆⼼半径倍数距离
# texts1饼图外label,texts2饼图内
for t in text1:
    t.set_size(fontsize)
for t in text2:
    t.set_size(fontsize)

plt.axis('equal')
plt.legend()
plt.tight_layout()
plt.show()

matplotlib,Python学习,python,信息可视化,matplotlib文章来源地址https://www.toymoban.com/news/detail-765671.html

到了这里,关于【python】数据可视化——matplotlib的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 81 | Python可视化篇 —— Seaborn数据可视化

    Seaborn是Python中一个基于Matplotlib的高级数据可视化库,它提供了更简单的API和更美观的图形样式,适用于数据探索和展示。在本教程中,我们将介绍Seaborn的基本概念和用法,并通过一些示例演示如何使用Seaborn来创建各种图表和图形。

    2024年02月14日
    浏览(43)
  • 83 | Python可视化篇 —— Bokeh数据可视化

    Bokeh 是一种交互式数据可视化库,它可以在 Python 中使用。它的设计目标是提供一个简单、灵活和强大的方式来创建现代数据可视化,同时保持良好的性能。Bokeh 支持多种图表类型,包括线图、散点图、柱状图、饼图、区域图、热力图等。此外,它还支持将这些图表组合在一

    2024年02月13日
    浏览(45)
  • 大数据可视化——基于Python豆瓣电影数据可视化分析系统

    本项目旨在通过对豆瓣电影数据进行综合分析与可视化展示,构建一个基于Python的大数据可视化系统。通过数据爬取收集、清洗、分析豆瓣电影数据,我们提供了一个全面的电影信息平台,为用户提供深入了解电影产业趋势、影片评价与演员表现的工具。项目的关键步骤包括

    2024年01月21日
    浏览(59)
  • python毕设选题 - 大数据二手房数据爬取与分析可视化 -python 数据分析 可视化

    # 1 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项

    2024年01月20日
    浏览(63)
  • python毕设选题 - 大数据上海租房数据爬取与分析可视化 -python 数据分析 可视化

    # 1 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项

    2024年02月19日
    浏览(59)
  • 【100天精通Python】Day71:Python可视化_一文掌握Seaborn库的使用《一》_数据分布可视化,数据关系可视化,示例+代码

    目录 1. 数据分布的可视化 1.1 直方图(Histograms) 1.2 核密度估计图(Kernel Density Estimation Plot)

    2024年02月06日
    浏览(54)
  • Python 数据可视化

    Python提供了多个用于数据可视化的工具和库。其中最常用的包括: 1. Matplotlib:Matplotlib 是一个用于绘制二维图形的 Python 库。它提供了广泛的绘图选项,可以帮助您创建线图、散点图、柱状图、饼图、等高线图、3D 图形等。 2. Seaborn:Seaborn 是基于 Matplotlib 的图形可视化库,它

    2024年02月08日
    浏览(85)
  • 【Python学习】—Python数据可视化(八)

    JSON是一种轻量级的数据交互格式,可以按照JSON指定的格式去组织和封装数据 JSON本质上是 一个带有特定格式的字符串 JSON就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互 如果想要做出可视画效果图,可以借助pyecharts模块来完成 Echarts 是一

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包