❤【纯干货】Matplotlib总结,任何项目都用得到❤

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

  ❤纯   干   货❤

..

.

.

.

.

.

.

.

.

目录

1、绘制基本图形

2、定制化图形

3、支持多个坐标轴

4、3D绘图

5、动态交互绘图

6、绘制地图

7、绘制统计图表

最后


  Matplotlib 在很多人眼里是无敌的存在,而且可以说是无敌的存在。

走过数据科学的路,路上必然有Matplotlib 的风景在你周围。

如果同一个项目,你的用了matplotlib 不仅有基本图形、定制化图形、多个坐标轴、3D绘图,还有动态交互绘图、绘制地图、绘制统计图表,甚至还有地图分布!那么谁的更吸引人呢?收藏备用,一定用的上!

Matplotlib是一个功能强大且广泛使用的数据可视化工具,特别适用于科学计算、数据分析和数据科学领域。

下面是关于 Matplotlib 的一些主要特点和组成部分的介绍:

1、图表类型:包括折线图、散点图、柱状图、饼图、等高线图、热图、直方图等。这使得使用者可以根据不同的数据和需求创建不同类型的可视化图表。

2、简单易用:Matplotlib 设计简单,容易上手。用户可以使用它的基础功能来创建简单的图表,同时也可以通过自定义配置和调整来创建高度定制化的图表。

3、面向对象的接口:Matplotlib 提供了一个面向对象的接口,允许用户以程序化的方式创建和修改图表。这种接口的优点是可以更灵活地控制图表的各个组成部分,如轴、标签、标题等。

4、多种输出格式:Matplotlib 支持将图表以多种格式保存,包括图像文件(如PNG、JPEG、SVG等)和交互式图表,使用户能够在不同的场景中分享和使用图表。

5、扩展性:Matplotlib 可以通过各种插件和扩展库进行扩展,以满足更高级的数据可视化需求。例如,Seaborn、Pandas 和 Plotly 都是建立在 Matplotlib 基础之上的库。

6、跨平台:Matplotlib 可以在多个操作系统上运行,包括 Windows、Linux 和 macOS,因此适用于各种开发环境。

本文将从绘制基本图形、定制化图形、多个坐标轴、3D绘图、动态交互绘图、绘制地图、绘制统计图表等等方面进行全方位介绍!

大家伙如果觉得还不错!可以点赞、收藏支持一下谢谢。

目录

1、绘制基本图形

2、定制化图形

3、支持多个坐标轴

4、3D绘图

5、动态交互绘图

6、绘制地图

7、绘制统计图表

最后


1、绘制基本图形

Matplotlib 可以绘制许多基本的图形,包括但不限于以下类型:

  1. 折线图(Line Plot):用于显示数据随时间或其他连续变量的变化趋势。

  2. 散点图(Scatter Plot):用于展示两个变量之间的关系,通常用于观察数据的分布和离群点。

  3. 柱状图(Bar Plot):用于比较不同类别的数据,通常用于展示离散数据的分布。

  4. 饼图(Pie Chart):用于表示数据的相对部分,展示各部分在整体中的比例。

  5. 直方图(Histogram):用于展示数据的分布情况,特别适用于连续数据的分布分析。

  6. 箱线图(Box Plot):用于显示数据的统计信息,包括中位数、上下四分位数和离群值等。

  7. 等高线图(Contour Plot):用于可视化二维数据集中的等高线,通常在地理信息系统和物理学领域中使用。

  8. 热图(Heatmap):用于显示数据的热度或相关性,通常以颜色编码方式表示数值。

下面演示一个直方图:

import numpy as np
import matplotlib.pyplot as plt

# 生成大数据量(随机生成)
data = np.random.randn(100000)

# 配置图形和颜色
plt.figure(figsize=(10, 6))  # 设置图形大小
plt.hist(data, bins=50, color='skyblue', edgecolor='black')  # 绘制直方图
plt.title('Histogram of Large Data')  # 设置标题
plt.xlabel('Value')  # 设置X轴标签
plt.ylabel('Frequency')  # 设置Y轴标签

# 显示图形
plt.show()

上述代码创建了一个直方图,包括以下特点:

  • 使用 np.random.randn 生成了大量随机数据,模拟了大数据量。

  • 通过 plt.figure 来设置图形的大小。

  • 使用 plt.hist 创建直方图,配置了颜色为天蓝色 ('skyblue'),边缘颜色为黑色 ('black'),并设置了数据分组的数量 (bins)。

  • 添加了标题、X轴标签和Y轴标签。

  • 最后,通过 plt.show() 显示图形。

实际情况中,可以根据需要自定义图形的颜色、样式、标签等属性,以满足具体的可视化需求。

2、定制化图形

Matplotlib 提供了丰富的选项来自定义图形,包括颜色、线型、标签、标题和图例等。

下面演示如何使用 Matplotlib 定制化一个图形,分别单独调整这些属性。

我们绘制一个简单的折线图,并对其进行定制化:

import numpy as np
import matplotlib.pyplot as plt

# 创建数据
x = np.linspace(0, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# 创建图形
plt.figure(figsize=(10, 6))  # 设置图形大小

# 绘制两个曲线,分别定制化颜色、线型、标签
plt.plot(x, y1, color='blue', linestyle='-', linewidth=2, label='Sine Wave')
plt.plot(x, y2, color='red', linestyle='--', linewidth=2, label='Cosine Wave')

# 设置标题和坐标轴标签
plt.title('Customized Sine and Cosine Waves')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')

# 添加图例,并设置位置、标题
plt.legend(loc='upper right', title='Legend')
plt.grid(True)  # 添加网格线

# 注释一些特殊点
plt.annotate('Peak', xy=(np.pi / 2, 1), xytext=(np.pi / 2, 1.5),
             arrowprops=dict(facecolor='black', shrink=0.05),
             )
plt.annotate('Trough', xy=(3 * np.pi / 2, -1), xytext=(3 * np.pi / 2, -1.5),
             arrowprops=dict(facecolor='black', shrink=0.05),
             )

# 设置坐标轴范围
plt.xlim(0, 2 * np.pi)
plt.ylim(-2, 2)

# 显示图形
plt.show()

上述代码创建了一个折线图:

  • color='blue':设置折线的颜色为蓝色。

  • linestyle='--':设置折线的线型为虚线。

  • linewidth=2:设置折线的宽度为2。

  • label='Sine Wave':设置图例的标签为"Sine Wave"。

  • plt.titleplt.xlabelplt.ylabel 分别用于设置标题、X轴标签和Y轴标签。

  • plt.legend(loc='upper right'):添加图例并指定位置为右上角。

通过类似的方式,可以进一步定制化其他类型的图形,例如散点图、柱状图等,并根据需求调整颜色、线型、标签、标题和图例等属性。

Matplotlib 提供了丰富的选项,完全可以满足各种数据可视化需求。

3、支持多个坐标轴

Matplotlib是一个强大的Python数据可视化库,允许在同一个图中使用多个坐标轴,创建更加灵活和丰富的图形。

下面的示例中,创建一个包含主轴和次轴的复杂图形,展示Matplotlib中多个坐标轴的使用方法。

这个示例图形将包括一条正弦曲线和一条余弦曲线,它们使用不同的刻度和坐标轴。

import matplotlib.pyplot as plt
import numpy as np

# 创建新的图形和主要坐标轴
fig, ax1 = plt.subplots()

# 设置主要坐标轴的标签和标题
ax1.set_xlabel('X-axis')
ax1.set_ylabel('Primary Axis - Sine Curve', color='tab:blue')

# 生成X轴数据
x = np.linspace(0, 10, 100)
# 生成正弦曲线的Y轴数据
y1 = np.sin(x)

# 在主要坐标轴上绘制正弦曲线
ax1.plot(x, y1, color='tab:blue')

# 创建共享相同X轴的次要坐标轴
ax2 = ax1.twinx()

# 设置次要坐标轴的标签
ax2.set_ylabel('Secondary Axis - Cosine Curve', color='tab:red')

# 生成余弦曲线的Y轴数据
y2 = np.cos(x)

# 在次要坐标轴上绘制余弦曲线
ax2.plot(x, y2, color='tab:red')

# 添加图例
ax1.legend(['Sine Curve'], loc='upper left')
ax2.legend(['Cosine Curve'], loc='upper right')

# 添加网格线
ax1.grid()

plt.title('Primary and Secondary Axis Example')
plt.show()

在这个示例中,首先创建了一个包含主轴(ax1)的Figure,并绘制了正弦曲线。

然后,我们创建了一个共享X轴的次轴(ax2),并在次轴上绘制了余弦曲线。

还对每个轴设置了标题、标签、颜色,并添加了图例和网格线,以增强图形的可读性。

这个示例展示了使用多个坐标轴创建的图形,实际使用中可以根据自己的需求进一步自定义和扩展图形。

4、3D绘图

Matplotlib是一个用于数据可视化的Python库,它支持绘制各种类型的图形,包括三维图形。

在Matplotlib中,比如可以使用mpl_toolkits.mplot3d模块来创建和绘制三维图形。

下面绘制一个简单的三维表面图,包括主轴和次轴,大家可以简单看下,明白其中的原理。

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

# 创建一个三维图形的figure
fig = plt.figure()

# 创建一个三维坐标轴
ax = fig.add_subplot(111, projection='3d')

# 创建数据
# 这里我们以一个二维的网格为例,生成X和Y坐标,然后使用一个函数来计算Z坐标
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
Z = np.sin(np.sqrt(X**2 + Y**2))

# 绘制表面图
surf = ax.plot_surface(X, Y, Z, cmap='viridis')

# 添加颜色条
fig.colorbar(surf)

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

# 显示图形
plt.show()

上述代码中,首先创建了一个figure,然后在该figure上创建了一个三维坐标轴ax

接下来,生成了X、Y坐标的网格数据,并使用一个简单的函数计算Z坐标。

然后,使用plot_surface方法绘制了表面图,并使用cmap参数设置了颜色映射。

最后,我们添加了颜色条和坐标轴标签,并显示了图形。

Matplotlib提供了丰富的功能和选项来创建各种类型的三维图形,以展示更复杂的数据关系。

5、动态交互绘图

Matplotlib还可以用于创建静态和动态交互图形。

这个知识点中,简要介绍如何使用Matplotlib创建一个允许用户进行交互操作的动态图形。

接下来,我们将使用Matplotlib的FuncAnimation类来创建一个动态图形,同时也会使用IPython的display函数来在Jupyter Notebook中实时显示动画。

这里绘制一个简单的正弦波,并且可以通过滑块来控制波的频率。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from IPython.display import display, clear_output

# 创建一个空白图形
fig, ax = plt.subplots()

# 定义正弦波的参数
x = np.linspace(0, 2 * np.pi, 1000)
freq = 1.0  # 初始频率

# 初始绘制正弦波
line, = ax.plot(x, np.sin(freq * x))

# 添加滑块用于控制频率
from ipywidgets import interactive
import ipywidgets as widgets

def update(freq=1.0):
    # 更新正弦波的频率
    line.set_ydata(np.sin(freq * x))
    ax.set_ylim(-1.5, 1.5)
    ax.set_title(f'Sine Wave (Frequency: {freq:.2f} Hz)')
    display(fig)

# 创建交互式滑块
slider = widgets.FloatSlider(value=1.0, min=0.1, max=5.0, step=0.1, description='Frequency')
interactive_plot = interactive(update, freq=slider)

# 显示动态图形
display(interactive_plot)

# 如果在Jupyter Notebook中使用,你会看到一个滑块,通过滑块可以调整正弦波的频率。

可以通过滑块来调整波的频率。

在Jupyter Notebook中执行这段代码,然后通过滑动滑块来与图形进行交互。

FuncAnimation类用于创建动画效果,interactive函数用于创建交互式滑块。

可以使用Matplotlib创建各种类型的交互式图形,以满足具体的需求。

6、绘制地图

Matplotlib 还可以绘制地图和等高线图。

如果要绘制一个复杂一些的等高线图,需要使用一些额外的库,比如 NumPy 和 Cartopy(用于地图投影)。

下面演示如何使用 Matplotlib、NumPy 和 Cartopy 来绘制一个地理高程的等高线图。

除了Matplotlib、NumPy,记得需要把 Cartopy 安装好。

pip install cartopy

然后,使用以下示例代码来绘制等高线图:

import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature

# 创建一个地图投影
projection = ccrs.PlateCarree()

# 创建一个 Matplotlib 图形窗口
fig, ax = plt.subplots(subplot_kw={'projection': projection}, figsize=(10, 8))

# 创建一些示例数据(高程数据)
# 这里使用 NumPy 创建一个 2D 数组,表示高程值
# 你可以根据你的数据替换这些值
lats = np.linspace(-90, 90, 360)
lons = np.linspace(-180, 180, 720)
lons, lats = np.meshgrid(lons, lats)
elevation_data = np.sin(np.radians(lats)) * np.cos(np.radians(lons)) * 1000

# 添加等高线图
contour = plt.contourf(lons, lats, elevation_data, levels=20, cmap='terrain')

# 添加海岸线和国界线
ax.add_feature(cfeature.COASTLINE)
ax.add_feature(cfeature.BORDERS, linestyle=':')

# 添加颜色条
cbar = plt.colorbar(contour, ax=ax, shrink=0.8, orientation='horizontal')
cbar.set_label('Elevation (m)')

# 设置地图范围(中国)
ax.set_extent([73, 135, 8, 53], crs=projection)

# 添加标题
plt.title('Elevation Contour Map')

# 显示图形
plt.show()

上述代码创建了一个基本的等高线图,使用了 Cartopy 进行地图投影和地图要素的添加,以及 Matplotlib 进行绘图和图形设置。

如果显示范围是世界地图的话,修改这里的设置即可!

# 设置地图范围
ax.set_extent([-180, 180, -90, 90], crs=projection)

7、绘制统计图表

Matplotlib 也可以绘制统计图表,包括箱线图(Box Plot),也称为盒图或箱型图。

箱线图是一种可视化数据分布的方式,它显示了数据的中位数、四分位数、异常值等信息。

下面是一个使用Matplotlib绘制箱线图的示例:

import matplotlib.pyplot as plt
import numpy as np

# 创建示例数据
data = [np.random.normal(0, std, 100) for std in range(1, 5)]

# 创建箱线图
plt.figure(figsize=(8, 6))
plt.boxplot(data, vert=True, patch_artist=True, labels=['A', 'B', 'C', 'D'], notch=True)

# 添加标题和标签
plt.title('Box Plot Example')
plt.xlabel('Groups')
plt.ylabel('Values')

# 自定义箱线的填充颜色
box_colors = ['lightblue', 'lightgreen', 'lightpink', 'lightyellow']
for box, color in zip(plt.boxplot(data, vert=True, patch_artist=True)['boxes'], box_colors):
    box.set_facecolor(color)

# 添加网格线
plt.grid(True, linestyle='--', alpha=0.7)

# 显示图形
plt.show()

首先创建了一些示例数据,其中包括四组具有不同标准差的正态分布数据。

然后,我们使用plt.boxplot函数绘制箱线图。参数解释如下:

  • data:包含数据的列表,每个列表对应一个箱线图。

  • vert:设置为True以垂直绘制箱线图。

  • patch_artist:设置为True以允许自定义箱线图的样式。

  • labels:用于指定每个箱线图的标签。

  • notch:设置为True以在箱线图的中位数处添加缺口。

还自定义了箱线的填充颜色,并添加了标题、标签和网格线。

这个示例中的箱线图是一个简单示例,你可以根据实际情况对其进行更复杂的定制。

最后

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

.Boss.清华学子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值