conda 和 pip安装matplotlib和学习matplotlib

今天安装了一天这个,因为学习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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值