matplotlib 机器学习绘图
<p>安装:</p><pre><code class="language-python">pip install matplotlib
</code></pre>
<h1 id="介绍">介绍</h1>
<p>Matplotlib 是 Python 中最常用的 2D 绘图库,也可以用来绘制 3D 图形。它提供了一套面向对象(OO)和基于 pyplot 的 MATLAB 风格接口,几乎能画出所有静态、动态、交互式的图表。</p>
<pre><code class="language-python">matplotlib/
├─ init.py # 顶层命名空间,常用别名 import matplotlib as mpl
├─ pyplot.py # MATLAB 风格接口,最常用 import matplotlib.pyplot as plt
├─ artist.py # 绘图元素基类
├─ axes.py # Axes 对象
├─ figure.py # Figure 对象
├─ axis.py # X/YAxis 对象
├─ backend_*.py # 各后端实现
</code></pre>
<p><strong>matplotlib.pyplot</strong></p>
<p>最常用的高层接口,直接操作当前 figure/axes,函数式调用。</p>
<p>典型函数:plot、scatter、hist、imshow、subplots、savefig、show 等。</p>
<p><strong>matplotlib.figure</strong></p>
<p>管理整张图(Figure 对象),包含一个或多个 Axes。</p>
<p><strong>matplotlib.axes</strong></p>
<p>真正的“画布”,所有绘图都在 Axes 上完成。</p>
<p>关键方法:plot、bar、pie、contour、pcolormesh、annotate 等。</p>
<p>子模块 matplotlib.axes.Axes 中 >200 个绘图/辅助方法。</p>
<table>
<thead>
<tr>
<th>函数名称</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>Plot</td>
<td>折线图或点图</td>
</tr>
<tr>
<td>Scatter</td>
<td>绘制x与y的散点图</td>
</tr>
<tr>
<td>Bar</td>
<td>绘制条形图</td>
</tr>
<tr>
<td>Barh</td>
<td>绘制水平条形图</td>
</tr>
<tr>
<td>Stem</td>
<td>棉签图</td>
</tr>
<tr>
<td>Boxplot</td>
<td>绘制箱型图</td>
</tr>
<tr>
<td>Hist</td>
<td>绘制直方图</td>
</tr>
<tr>
<td>his2d</td>
<td>绘制2D直方图</td>
</tr>
<tr>
<td>Pie</td>
<td>绘制饼状图</td>
</tr>
<tr>
<td>Step</td>
<td>绘制阶梯图</td>
</tr>
<tr>
<td>Quiver</td>
<td>绘制一个二维按箭头</td>
</tr>
<tr>
<td>Stackplot</td>
<td>绘制堆叠图</td>
</tr>
<tr>
<td>Polar</td>
<td>绘制极坐标图</td>
</tr>
</tbody>
</table>
<h1 id="折线图">折线图</h1>
<p>plot() 用于画图它可以绘制点和线,语法格式如下:</p>
<pre><code class="language-python"># 画单条线
plot(, y, , *, data=None, **kwargs)
# 画多条线
plot(, y, , , y2, , ..., **kwargs)
</code></pre>
<p>参数说明:</p>
<p>x, y:点或线的节点,x 为 x 轴数据,y 为 y 轴数据,数据可以列表或数组。x 轴是可选,不指定则以y轴长度为个数,生成从0开始的整数数组为x轴。</p>
<p>fmt:可选,定义基本格式(如颜色、标记和线条样式)。</p>
<p>**kwargs:可选,用在二维平面图上,设置指定属性,如标签,线的宽度等。</p>
<p>基础折线图:</p>
<pre><code class="language-python">import matplotlib.pyplot as plt
x =
y =
plt.plot(x,y)
plt.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/1060878/202508/1060878-20250819091930059-761993864.png" alt="image" loading="lazy"></p>
<p>标签信息:</p>
<p>在画布中添加标签信息:</p>
<ul>
<li>plt.xlabel(): x轴坐标信息</li>
<li>plt.ylabel(): y轴坐标信息</li>
<li>plt.title(): 顶部标题信息</li>
</ul>
<pre><code class="language-python">import matplotlib.pyplot as plt
x =
y =
plt.plot(x,y)
plt.xlabel("x")
plt.ylabel("y")
plt.title("title")
plt.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/1060878/202508/1060878-20250819091942526-208030099.png" alt="image" loading="lazy"></p>
<p>网格:</p>
<p>plt.grid(): 设置画布中显示网格线</p>
<pre><code class="language-python">import matplotlib.pyplot as plt
x =
y =
plt.plot(x,y)
plt.xlabel("x")
plt.ylabel("y")
plt.title("title")
plt.grid()
plt.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/1060878/202508/1060878-20250819091951059-129746971.png" alt="image" loading="lazy"></p>
<p>点图:</p>
<p>设置fmt参数,绘制点图</p>
<pre><code class="language-python">import matplotlib.pyplot as plt
x =
y =
plt.plot(x,y, "o")
plt.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/1060878/202508/1060878-20250819092000338-1833093798.png" alt="image" loading="lazy"></p>
<h1 id="柱状图">柱状图</h1>
<p>bar() 方法语法格式如下:</p>
<pre><code class="language-python">matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
</code></pre>
<p>参数说明:</p>
<ul>
<li>x:数组,柱形图的 x 轴数据。</li>
<li>height:数组,柱形图的高度。</li>
<li>width:浮点型数组,柱形图的宽度。</li>
<li>bottom:数组,底座的 y 坐标,默认 0。</li>
<li>align:柱形图与 x 坐标的对齐方式
<ul>
<li>'center' 以 x 位置为中心,这是默认值。</li>
<li>'edge':将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形,可以传递负数的宽度值及 align='edge'。</li>
</ul>
</li>
<li>**kwargs::其他参数。</li>
</ul>
<p>基础柱状图:</p>
<pre><code class="language-python">import matplotlib.pyplot as plt
x = ["apple", "banana", "origin", "watermelon"]
y =
plt.bar(x, y)
plt.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/1060878/202508/1060878-20250819092011315-1789217184.png" alt="image" loading="lazy"></p>
<p>设置柱状图颜色:</p>
<pre><code class="language-python">import matplotlib.pyplot as plt
x = ["apple", "banana", "origin", "watermelon"]
y =
plt.bar(x, y, color="blue")
plt.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/1060878/202508/1060878-20250819092018207-255072407.png" alt="image" loading="lazy"></p>
<pre><code class="language-python">import matplotlib.pyplot as plt
x = ["apple", "banana", "origin", "watermelon"]
y =
plt.bar(x, y, color=["skyblue", "origin", "magenta", "cyan"])
plt.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/1060878/202508/1060878-20250819092027201-1699819658.png" alt="image" loading="lazy"></p>
<p>柱状图填充</p>
<p>使用 hatch 参数可以指定柱状图填充形状, 取值包括:<code>'/', '\', '|', '-', '+', 'x', 'o', 'O', '.', '*'</code></p>
<pre><code class="language-python">import matplotlib.pyplot as plt
x = ["apple", "banana", "origin", "watermelon"]
y =
plt.bar(x, y, hatch="/")
plt.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/1060878/202508/1060878-20250819092035330-175763711.png" alt="image" loading="lazy"></p>
<p>设置数值</p>
<p>使用 plt.bar_label 函数给柱状图设置数值参数</p>
<pre><code class="language-python">import matplotlib.pyplot as plt
x = ["apple", "banana", "origin", "watermelon"]
y =
bar = plt.bar(x, y)
plt.bar_label(bar)
plt.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/1060878/202508/1060878-20250819092042996-881223891.png" alt="image" loading="lazy"></p>
<p>柱状对比图:</p>
<pre><code class="language-python">import matplotlib.pyplot as plt
y_1 =
y_2 =
#2、创建画布
plt.figure(figsize=(20,8))
plt.bar(, y_1, width=0.2, label='before optimize')
plt.bar(, y_2, width=0.2, label='after optimize')
#4、修改X刻度
plt.xticks(, ['MSE', 'RMSE', 'MAE', 'R2'])
plt.legend()
plt.grid(True)
plt.title("model optimize compare")
plt.xlabel("metrics")
plt.ylabel("value")
plt.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/1060878/202508/1060878-20250819092053639-876881147.png" alt="image" loading="lazy"></p>
<h1 id="饼图">饼图</h1>
<p>pie 是饼图的函数,下面是函数接口:</p>
<pre><code class="language-python">pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)
</code></pre>
<ul>
<li>x:浮点型数组或列表,用于绘制饼图的数据,表示每个扇形的面积。</li>
<li>labels:列表,各个扇形的标签,默认值为 None。</li>
<li>colors:数组,表示各个扇形的颜色,默认值为 None。</li>
</ul>
<p>基础饼图:</p>
<pre><code class="language-python">import matplotlib.pyplot as plt
import numpy as np
x = np.array()
plt.pie(x)
plt.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/1060878/202508/1060878-20250819092101665-2041166254.png" alt="image" loading="lazy"></p>
<p>标签和颜色:</p>
<p>labels:设置每一个饼图的标签,和饼图个数不一致会报错</p>
<p>colors:设置每一个饼图的颜色,和饼图个数不一致会报错</p>
<pre><code class="language-python">x =
label = ['apple', "banana", "orange", "watermelon"]
color=["skyblue", "pink", "teal", "cyan"]
plt.pie(x, labels=label, colors=color)
plt.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/1060878/202508/1060878-20250819092109163-230490975.png" alt="image" loading="lazy"></p>
<p>添加百分比:</p>
<p>autopct: 设置百分比,<strong>%0.1f%%</strong> 代表小数点后一位的带百分号的百分比</p>
<pre><code class="language-python">x =
label = ['apple', "banana", "orange", "watermelon"]
color=["skyblue", "pink", "teal", "cyan"]
plt.pie(x, labels=label, colors=color, autopct="%0.1f%%")
plt.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/1060878/202508/1060878-20250819092116363-824064094.png" alt="image" loading="lazy"></p>
<h1 id="棉签图">棉签图</h1>
<pre><code class="language-python">import numpy as np
pred = np.array()
y_test = np.array()
diff = pred - y_test
plt.stem(list(range(len(diff))), diff, linefmt="-.")
plt.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/1060878/202508/1060878-20250819092124079-651389314.png" alt="image" loading="lazy"></p>
<h1 id="箱线图">箱线图</h1>
<p>boxplot(箱线图,又称为盒须图、盒式图)是在1977年由美国统计学家John Tukey发明,分析数据需要为定量数据。通过箱线图,可以直观的探索数据特征,比如观察数据中是否存在异常数据,离群数据。</p>
<p>箱线图共由五个数值点构成,分别是最小观察值,25%分位数(Q1),中位数,75%分位数(Q3),最大观察值,</p>
<ul>
<li>最小观察值 = Q1 – 1.5(IQR), IQR = Q3 –Q1</li>
<li>最大观察值 = Q3 + 1.5(IQR), IQR = Q3 –Q1</li>
</ul>
<p>下图显示了箱型图与正态分布的概率分布函数的比较。</p>
<p><img src="https://img2024.cnblogs.com/blog/1060878/202508/1060878-20250819092137083-1004932084.png" alt="image" loading="lazy"></p>
<p>箱线图查看:</p>
<p>下极限(Min):数据集中最小的值。</p>
<p>下四分位数(Q1):数据的第25百分位数。</p>
<p>中位数(Q2):数据的第50百分位数。</p>
<p>上四分位数(Q3):数据的第75百分位数。</p>
<p>上极限(Max):数据集中最大的值。</p>
<p>注意:</p>
<p>上下限:上下限并不是整个数据样本的最大值和最小值,而是</p>
<ul>
<li>上限 = 去除异常值的最大值(Q3+1.5IQR)</li>
<li>下限 = 去除异常值的最小值(Q1-1.5IQR)</li>
</ul>
<p>在上下限这里分别划出两条线段作为异常值的分界点。</p>
<p><img src="https://img2024.cnblogs.com/blog/1060878/202508/1060878-20250819092151856-321985472.png" alt="image" loading="lazy"></p>
<pre><code class="language-python">
import numpy as np
arr = np.array()
plt.boxplot(arr)
plt.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/1060878/202508/1060878-20250819092200321-1528879289.png" alt="image" loading="lazy"></p>
<p>存在异常值的数据:</p>
<pre><code class="language-python">
import numpy as np
arr = np.array()
plt.boxplot(arr)
plt.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/1060878/202508/1060878-20250819092212563-853835662.png" alt="image" loading="lazy"></p>
<p>箱体填充:</p>
<pre><code class="language-python">
import numpy as np
arr = np.array()
plt.boxplot(arr, patch_artist=True)
plt.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/1060878/202508/1060878-20250819092222993-698661681.png" alt="image" loading="lazy"></p>
<p>中位线样式:</p>
<pre><code class="language-python">
import numpy as np
arr = np.array()
plt.boxplot(arr, patch_artist=True, medianprops={'linestyle': '-', 'color': 'y', 'linewidth': 1.5})
plt.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/1060878/202508/1060878-20250819092232463-1393021309.png" alt="image" loading="lazy"></p><br><br>
来源:https://www.cnblogs.com/goldsunshine/p/19045905
頁:
[1]