今天安装了一天这个,因为学习matplotlib所以需要安装,找了很多办法最后发现版本兼容,自己一开始下载的是matplotlib3.10.0版本,会出现不兼容从而无法使用。
首先如果是使用conda,先找到环境
也可以创建新的环境(会创建一个名为 python-base 的新环境,并安装 Python 3.12 )
conda create --name python-base python=3.12
然后是激活环境
conda activate python-base
列出所有环境: conda env list或者 conda info --envs显示所有 conda 环境。
安装mapotlib
pip install matplotlib==3.9.4
conda install matplotlib==3.9.4
然后如果发现找不到模块可以先卸载包再重新安装
其中还要注意在创建项目的时候需要配置解释器以及,项目包命名不能与库的名字一样。
maplotlib的学习:
以下是对Matplotlib知识点的结构化总结:
一、基础绘图
1. plt.plot()
作用:绘制曲线图
关键参数:
x, y:数据
format_string:设置颜色、线型(如 `'r:'` 表示红色点线)
2 图形显示
plt.show():显示图形
二、画布与子图
1. 创建画布
plt.figure(figsize=(w, h))`:生成画布,figsize单位是英寸
2. 添加绘图区域
add_axes([left, bottom, width, height])`:手动指定区域位置和大小(相对比例,0~1)
3. 子图布局
方法:add_subplot(nrows, ncols, index)
ax1 = fig.add_subplot(131) # 1行3列,第1个子图
方法2:plt.subplots(nrows, ncols)`批量生成子图
fig, axs = plt.subplots(1, 3) # 1行3列,axs是数组
axs[0].plot(x, y1)
复杂布局:`subplot2grid(grid_shape, loc, colspan/rowspan)
ax1 = plt.subplot2grid((3,3), (0,0), colspan=2) # 占据两列
三、图形属性设置
1. 图例 (Legend)
方式1:通过 handles和 labels
line = ax.plot(x, y)
ax.legend(handles=line, labels=['Label'], loc='upper center')
方式2(推荐):在 plot() 中设置 `label`,再调用 `legend()`
ax.plot(x, y, label='sin(x)')
ax.legend() # 自动识别标签
2. 网格线
plt.grid(b, axis, which, color, linestyle, linewidth)
plt.grid(True, axis='both', color='r', linestyle='--', linewidth=1)
3. 坐标轴调整
范围:set_xlim(), set_ylim()
ax.set_xlim(0, 5) # x轴范围0~5
刻度:set_xticks(), set_yticks()
ax.set_xticks([0, 2, 4, 6]) # 手动设置刻度
刻度类型:xscale(), yscale()
plt.xscale('log') # 对数坐标
4. 共享坐标轴
twinx():共享x轴,新建y轴
twiny():共享y轴,新建x轴
ax2 = ax.twinx() # 共享x轴
ax2.plot(x, y2, 'r')
四、多图绘制
1. 同一区域绘制多条曲线
ax.plot(x, y1, 'r')
ax.plot(x, y2, 'b') # 自动叠加
2. 子图间独立绘制
fig, axs = plt.subplots(2, 2)
axs[0,0].plot(x, y1) # 左上子图
axs[1,1].plot(x, y2) # 右下子图
五、注意事项
1. Figure与Axes对象
Figure` 是画布,Axes是绘图区域,所有图形绘制在 Axes上。
2. 返回值处理
plot()返回线条对象列表,需用 `handles=line` 传递图例。
3. 子图索引
subplots()` 返回的 `axs` 可能是数组(如多行多列),需通过索引操作。
标题中文乱码
如果标题设置的是中文,会出现乱码
局部处理:
plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False
全局处理:
首先,找到 matplotlibrc 文件的位置,可以使用以下代码:
import matplotlib
print(matplotlib.matplotlib_fname())
然后,修改 matplotlibrc 文件,找到 font.family 和 font.sans-serif 项,设置为支持中文的字体,如 SimHei。
同时,设置 axes.unicode_minus 为 False 以正常显示负号。
修改完成后,重启pyCharm。如果不能解决,尝试运行以下代码来实现:
from matplotlib.font_manager import _rebuild _rebuild()
如果后面有这种报错信息:
Traceback (most recent call last): File "C:\Users\admin\Desktop\NumPy\matplotlib_demo\1.matlib.绘图方法plot.py", line 62, in <module> test02() File "C:\Users\admin\Desktop\NumPy\matplotlib_demo\1.matlib.绘图方法plot.py", line 32, in test02 plt.show() File "C:\Users\admin\.conda\envs\python-base\Lib\site-packages\matplotlib\pyplot.py", line 614, in show return _get_backend_mod().show(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\Program Files\JeBrains\PyCharm 2024.1.4\plugins\python\helpers\pycharm_matplotlib_backend\backend_interagg.py", line 41, in __call__ manager.show(**kwargs) File "D:\Program Files\JeBrains\PyCharm 2024.1.4\plugins\python\helpers\pycharm_matplotlib_backend\backend_interagg.py", line 144, in show self.canvas.show() File "D:\Program Files\JeBrains\PyCharm 2024.1.4\plugins\python\helpers\pycharm_matplotlib_backend\backend_interagg.py", line 85, in show buffer = self.tostring_rgb() ^^^^^^^^^^^^^^^^^ AttributeError: 'FigureCanvasInterAgg' object has no attribute 'tostring_rgb'. Did you mean: 'tostring_argb'? 进程已结束,退出代码为 1
问题原因
这种错误通常是由于 matplotlib 版本更新后,部分 API 发生了变化。在较新的 matplotlib 版本中,FigureCanvasAgg 类(FigureCanvasInterAgg 继承自它)的 tostring_rgb 方法可能已被移除或者重命名。
改进方式: 修改 matplotlib 后端
你可以尝试修改 matplotlib 的后端,使用其他后端来显示图形。在代码开头添加以下代码:
import matplotlib
matplotlib.use('TkAgg') # 使用 TkAgg 后端
import matplotlib.pyplot as plt