Matplotlib 学习总结

一、Matplotlib 简介

今天我学习了Matplotlib ,它是 Python 的绘图库,能轻松将数据图形化,提供多样化输出格式,可绘制静态、动态、交互式图表,如散点图、柱状图等。

二、安装与导入

1. 安装

  • 使用 pip 安装:pip install matplotlib
  • 使用 conda 安装:conda install matplotlib(可使用清华源:Simple Index

2. 导入

python

运行

import matplotlib.pyplot as plt

三、基本绘图函数 plot ()

plot () 用于画图,可绘制点和线,语法格式为:plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)

  • x, y:点或线的节点,数据可以是列表或数组
  • fmt:可选,定义基本格式(颜色、标记和线条样式)
    -** kwargs:可选,设置指定属性,如标签、线的宽度等

1. 绘制线

python

运行

import matplotlib.pyplot as plt
import numpy as np
xpoints = np.array([1, 8])
ypoints = np.array([3, 10])
plt.plot(xpoints, ypoints)
plt.show()

2. 绘制点

python

运行

import matplotlib.pyplot as plt
import numpy as np
xpoints = np.array([1, 8])
ypoints = np.array([3, 10])
plt.plot(xpoints, ypoints, 'o^')
plt.show()

3. 绘制不规则线

python

运行

import matplotlib.pyplot as plt
import numpy as np
xpoints = np.array([1, 2, 6, 8])
ypoints = np.array([3, 8, 1, 10])
plt.plot(xpoints, ypoints)
plt.show()

4. 不指定 x 轴

若不指定 x 轴上的点,x 会根据 y 的值设置为 0, 1, 2, 3..N-1

python

运行

import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([3, 8, 1, 10, 5, 7])
plt.plot(ypoints)
plt.show()

四、绘图标记

1. marker 参数

用于定义不同标记,部分标记及描述如下:

标记描述标记描述
".""1"下三叉
","像素点"2"上三叉
"o"实心圆"3"左三叉
"v"下三角"4"右三叉
"^"上三角"8"八角形
"<"左三角"s"正方形
">"右三角"p"五边形

示例:

python

运行

import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([1, 3, 4, 5, 8, 9, 6])
plt.plot(ypoints, marker='*')
plt.show()

2. fmt 参数

定义基本格式,格式为[marker][line][color]

  • 标记字符:如 '.'(点标记)、'o'(实心圈标记)等
  • 线型参数:'‐'(实线)、'‐‐'(破折线)、'‐.'(点划线)、':'(虚线)
  • 颜色字符:'b'(蓝色)、'm'(洋红色)、'g'(绿色)等

示例:

python

运行

import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([6, 2, 13, 10])
plt.plot(ypoints, 'o:r')
plt.show()

3. 标记大小与颜色设置

  • markersize(ms):定义标记大小
  • markerfacecolor(mfc):定义标记内部颜色
  • markeredgecolor(mec):定义标记边框颜色

示例 1(设置标记大小):

python

运行

import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([6, 2, 13, 10])
plt.plot(ypoints, marker='o', ms=20)
plt.show()

示例 2(设置标记外边框颜色):

python

运行

import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([6, 2, 13, 10])
plt.plot(ypoints, marker='o', ms=20, mec='r')
plt.show()

示例 3(设置标记内部颜色):

python

运行

import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([6, 2, 13, 10])
plt.plot(ypoints, marker='o', ms=20, mfc='r')
plt.show()

五、绘图线

1. 线的类型

使用 linestyle 参数(简写为 ls)定义,部分类型及说明如下:

类型简写说明
'solid' (默认)'-'实线
'dotted'':'点虚线
'dashed''--'破折线
'dashdot''-.'点划线
'None''' 或 ' '不画线

示例 1:

python

运行

import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([6, 2, 13, 10])
plt.plot(ypoints, linestyle='dotted')
plt.show()

示例 2:

python

运行

import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([6, 2, 13, 10])
plt.plot(ypoints, ls='-.')
plt.show()

2. 线的颜色

使用 color 参数(简写为 c)定义,部分颜色标记及描述如下:

颜色标记描述颜色标记描述
'r'红色'c'青色
'g'绿色'm'品红
'b'蓝色'y'黄色
'k'黑色'w'白色

示例:

python

运行

import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([6, 2, 13, 10])
plt.plot(ypoints, color='r')
plt.show()

3. 线的宽度

使用 linewidth 参数(简写为 lw)定义。

六、轴标签和标题

  • xlabel ():设置 x 轴标签
  • ylabel ():设置 y 轴标签
  • title ():设置标题

示例 1(设置轴标签):

python

运行

import numpy as np
import matplotlib.pyplot as plt
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.plot(x, y)
plt.xlabel("x - label")
plt.ylabel("y - label")
plt.show()

示例 2(设置标题和轴标签):

python

运行

import numpy as np
import matplotlib.pyplot as plt
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.plot(x, y)
plt.title("TITLE")
plt.xlabel("x - label")
plt.ylabel("y - label")
plt.show()

七、网格线

grid () 用于设置图表中的网格线,语法格式:matplotlib.pyplot.grid(b=None, which='major', axis='both', )

  • b:可选,设置布尔值,true 显示网格线,false 不显示
  • which:可选,可选值有 'major'、'minor' 和 'both',默认 'major'
  • axis:可选,设置显示网格线的方向,'both'、'x' 或 'y'
    -** kwargs:可选,设置网格样式,如 color、linestyle、linewidth 等

示例 1:

python

运行

import numpy as np
import matplotlib.pyplot as plt
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.title("TITLE")
plt.xlabel("x - label")
plt.ylabel("y - label")
plt.plot(x, y)
plt.grid()
plt.show()

示例 2(设置 x 轴方向网格线):

python

运行

import numpy as np
import matplotlib.pyplot as plt
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.title("TITLE")
plt.xlabel("x - label")
plt.ylabel("y - label")
plt.plot(x, y)
plt.grid(axis='x')
plt.show()

示例 3(设置网格样式):

python

运行

import numpy as np
import matplotlib.pyplot as plt
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.title("TITLE")
plt.xlabel("x - label")
plt.ylabel("y - label")
plt.plot(x, y)
plt.grid(color='r', linestyle='-', linewidth=0.5)
plt.show()

八、绘制多图

subplot () 用于绘制多个子图,语法:subplot(nrows, ncols, index),其中 nrows 为行数,ncols 为列数,index 为索引。

示例:

python

运行

import matplotlib.pyplot as plt
import numpy as np
# plot 1:
xpoints = np.array([0, 6])
ypoints = np.array([0, 100])
plt.subplot(1, 2, 1)
plt.plot(xpoints, ypoints)
plt.title("plot 1")

# plot 2:
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.subplot(1, 2, 2)
plt.plot(x, y)
plt.title("plot 2")

plt.suptitle("TITLE")
plt.show()

九、散点图

scatter () 用于绘制散点图。

1. 基本散点图

python

运行

import matplotlib.pyplot as plt
import numpy as np
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
plt.scatter(x, y)
plt.show()

2. 设置图标大小

python

运行

import matplotlib.pyplot as plt
import numpy as np
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
sizes = np.array([20, 50, 100, 200, 500, 1000, 60, 90])
plt.scatter(x, y, s=sizes)
plt.show()

3. 自定义点的颜色

python

运行

import matplotlib.pyplot as plt
import numpy as np
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
colors = np.array(["red", "green", "black", "orange", "purple", "beige", "cyan", "magenta"])
plt.scatter(x, y, c=colors)
plt.show()

4. 设置两组散点图

python

运行

import matplotlib.pyplot as plt
import numpy as np
x = np.array([5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6])
y = np.array([99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86])
plt.scatter(x, y, color='hotpink')

x = np.array([2, 2, 8, 1, 15, 8, 12, 9, 7, 3, 11, 4, 7, 14, 12])
y = np.array([100, 105, 84, 105, 90, 99, 90, 95, 94, 100, 79, 112, 91, 80, 85])
plt.scatter(x, y, color='#88c999')
plt.show()

十、柱形图

1. 基本柱形图(bar ())

python

运行

import matplotlib.pyplot as plt
import numpy as np
x = np.array(["a", "b", "c", "d"])
y = np.array([12, 22, 6, 18])
plt.bar(x, y)
plt.show()

2. 设置柱形图颜色

python

运行

import matplotlib.pyplot as plt
import numpy as np
x = np.array(["a", "b", "c", "d"])
y = np.array([12, 22, 6, 18])
plt.bar(x, y, color="#4CAF50")
plt.show()

3. 自定义各个柱形的颜色

python

运行

import matplotlib.pyplot as plt
import numpy as np
x = np.array(["a", "b", "c", "d"])
y = np.array([12, 22, 6, 18])
plt.bar(x, y, color=["#4CAF50", "red", "hotpink", "#556B2F"])
plt.show()

4. 设置柱形图宽度

python

运行

import matplotlib.pyplot as plt
import numpy as np
x = np.array(["a", "b", "c", "d"])
y = np.array([12, 22, 6, 18])
plt.bar(x, y, width=0.1)
plt.show()

5. 垂直方向柱形图(barh ())

python

运行

import matplotlib.pyplot as plt
import numpy as np
x = np.array(["a", "b", "c", "d"])
y = np.array([12, 22, 6, 18])
plt.barh(x, y)
plt.show()

十一、饼图

pie () 用于绘制饼图。

示例:

python

运行

import matplotlib.pyplot as plt
import numpy as np
y = np.array([35, 25, 25, 15])
plt.pie(y,
        labels=['A', 'B', 'C', 'D'],  # 设置饼图标签
        colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"],  # 设置饼图颜色
        explode=(0, 0.2, 0, 0),  # 第二部分突出显示
        autopct='%.2f%%'  # 格式化输出百分比
        )
plt.title("TITLE")
plt.show()

十二、直方图

使用 hist () 方法绘制直方图,格式:matplotlib.pyplot.hist(x, bins=None, color=None, label=None, **kwargs)

  • x:要绘制直方图的数据
  • bins:可选,直方图的箱数,默认为 10
  • color:可选,直方图的颜色
  • label:可选,直方图的标签

1. 基本直方图

python

运行

import matplotlib.pyplot as plt
import numpy as np
# 生成一组随机数据
data = np.random.randn(1000)
# 绘制直方图
plt.hist(data, bins=30, color='skyblue', alpha=0.8)
# 设置图表属性
plt.title('RUNOOB hist() Test')
plt.xlabel('Value')
plt.ylabel('Frequency')
# 显示图表
plt.show()

2. 多组数据直方图

python

运行

import matplotlib.pyplot as plt
import numpy as np
# 生成三组随机数据
data1 = np.random.normal(0, 1, 1000)
data2 = np.random.normal(2, 1, 1000)
data3 = np.random.normal(-2, 1, 1000)
# 绘制直方图
plt.hist(data1, bins=30, alpha=0.5, label='Data 1')
plt.hist(data2, bins=30, alpha=0.5, label='Data 2')
plt.hist(data3, bins=30, alpha=0.5, label='Data 3')
# 设置图表属性
plt.title('RUNOOB hist() TEST')
plt.xlabel('Value')
plt.ylabel('

我还运用今天的指示表完成了几个练习

  1. 在同一张图中分别绘制正弦图和余弦图。
  2. 《python 数据分析实战》在亚马逊、当当网、中国图书网、京东和天猫的最低价格分别为 39.5、39.9、45.4、38.9、33.34,使用水平柱形图显示这些数据。
  3. 五年级三班的同学中,喜欢篮球的同学占 20%,喜欢乒乓球的同学占 30%,喜欢羽毛球的同学占 20%,喜欢足球的同学占 18%,喜欢排球的同学占 12%,根据这些数据绘制饼图。

    import matplotlib.pyplot as plt
    import numpy as np
    import matplotlib

    # 设置matplotlib的字体,确保负号和中文可以正确显示
    matplotlib.rcParams['axes.unicode_minus'] = False  # 正确显示负号
    matplotlib.rcParams['font.family'] = 'SimHei'  # 使用黑体
    matplotlib.rcParams['font.size'] = 12  # 设置字体大小

    # 创建数据点
    x = np.linspace(0, 4 * np.pi, 100)  # 生成从0到4π的100个等间距的数据点
    y_sin = np.sin(x)  # 计算正弦值
    y_cos = np.cos(x)  # 计算余弦值
    # 绘制正弦图和余弦图
    plt.plot(x, y_sin, label='sin(x)')  # 绘制正弦图,设置标签
    plt.plot(x, y_cos, label='cos(x)')  # 绘制余弦图,设置标签
    # 添加图例
    plt.legend()
    # 显示图形
    plt.show()


    y = np.array([20, 30, 18, 12, 20]) # 设置饼图的占比
    plt.pie(y, labels=['篮球', '乒乓球', '足球', '排球', '羽毛球'], autopct='%.2f%%')  # 百分比形式输出
    plt.title("球类运动")
    plt.show()


    # 创建数据点
    x = np.array(["亚马逊", "当当网", "中国图书网", "京东", "天猫"])  # 创建一个包含网站名称的数组
    y = np.array([39.5, 39.9, 45.4, 38.9, 33.34])  # 创建一个包含相应数据的数组
    # 绘制水平柱状图
    plt.barh(x, y, height=0.5)  # 使用barh函数绘制水平柱状图,height参数设置柱状图的高度
    # 添加标题
    plt.title("python数据分析实战")  # 使用title函数添加图表标题
    # 显示图形
    plt.show()  # 使用show函数显示图形

在使用 matplotlib 时我还遇到了一个问题,遇到图形不显示或只弹出空白窗口的问题,通常与绘图后端设置有关。我使用的解决方法:

添加阻塞模式显示
在 plt.show() 前添加 plt.ion() 开启交互模式,或者尝试在 plt.show() 后添加阻塞语句:

python
运行
import matplotlib.pyplot as plt
import numpy as np

xpoints = np.array([1,8])
ypoints = np.array([3,10])

plt.plot(xpoints, ypoints)
plt.show(block=True)  # 强制阻塞模式,确保窗口保持显示

### Matplotlib 库使用教程 #### 安装 Matplotlib 要开始使用 Matplotlib,首先需要确保已正确安装该库。可以通过以下命令轻松完成安装: ```bash pip install matplotlib ``` 这一步骤提供了必要的基础环境支持[^1]。 --- #### 基本概念:Figure 和 Axes Matplotlib 的核心组件包括 `Figure` 和 `Axes`。 - **Figure** 表示整个画布或图像区域。 - **Axes** 则表示具体的坐标系(即图表所在的子区域)。 通过这些对象的操作,可以灵活控制图形的布局和样式[^2]。 --- #### 创建简单图表 以下是几个常见的图表类型及其绘制方法: ##### 折线图 折线图是最基本的数据展示形式之一。下面是一个简单的例子: ```python import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 10, 100) # 在区间 [0, 10] 上生成均匀分布的 100 个点 y = np.sin(x) plt.plot(x, y, label='Sine Wave') # 添加标签以便后续标注 plt.title('Simple Sine Wave Plot') plt.xlabel('X-axis Label') plt.ylabel('Y-axis Label') plt.legend() plt.show() ``` 此代码展示了如何利用 `plot()` 函数绘制一条正弦曲线,并设置了标题、轴标签以及图例。 --- ##### 柱状图 柱状图适用于比较不同类别的数量关系。例如: ```python import matplotlib.pyplot as plt data = [5, 20, 15, 25, 10] plt.bar(range(len(data)), data, color=['red', 'blue', 'green', 'purple', 'orange']) plt.xticks(range(len(data)), ['A', 'B', 'C', 'D', 'E']) # 设置 X 轴刻度名称 plt.title('Bar Chart Example') plt.show() ``` 上述脚本定义了一组高度值并调用了 `bar()` 方法生成对应的条形图[^4]。 --- ##### 三维线框图 对于更复杂的空间数据分析场景,可借助 Matplotlib 实现三维可视化效果。如下所示为一个典型的三维线框图实现方式: ```python import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D x1 = np.arange(-5, 5, 0.25) y1 = np.arange(-5, 5, 0.25) X, Y = np.meshgrid(x1, y1) Z = np.sin(np.sqrt(X**2 + Y**2)) fig = plt.figure() ax = fig.add_subplot(111, projection="3d") ax.plot_wireframe(X, Y, Z, rstride=3, cstride=2) plt.show() ``` 这段代码构建了一个基于网格数据集的三维表面模型,并应用了特定步长参数调整细节密度[^5]。 --- #### 图像保存功能 除了实时预览外,还可以将最终成果导出至文件系统中永久存储下来。比如采用 PNG 格式的输出操作如下: ```python plt.savefig('output_figure.png', dpi=300) ``` 这里指定了目标路径名以及分辨率选项以优化质量表现。 --- ### 总结 以上内容涵盖了从入门到高级的一些常用技巧介绍,帮助初学者快速上手掌握 Matplotlib 工具箱的核心能力。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值