2.Matplotlib绘图

本文介绍了如何使用Matplotlib进行绘图,包括状态接口和面向对象的方法,通过Anscombe数据集展示了数据可视化的重要性和实例。还演示了如何使用Matplotlib创建直方图、散点图以及处理多变量数据,如性别和大小的区分。


如果想单独一对一辅导学习C++、Java、Python编程语言的可以加微信咨询

1. Matplotlib绘图

1 Matplotlib绘图入门

1.1 简介

Matplotlib.pyplot 包含一系列绘图函数的相关函数

使用Matplotlib需要导入pyplot

import pandas as pd
import matplotlib.pyplot as plt

Matplotlib提供了两种方法来作图:状态接口和面向对象

1.2 状态接口

x = [-3, 5, 7] #准备数据的x轴坐标
y = [10, 2, 5] #准备数据的y轴坐标

plt.figure(figsize=(15,3)) #figure 创建画布  figsize指定画布大小
plt.plot(x, y) #plot 绘图
plt.xlim(-4, 8) #xlim 设置x轴坐标的范围
plt.ylim(0, 11) #ylim 设置y轴坐标的范围
plt.xlabel('X Axis',size=20) # 设置x轴标签  size字体大小
plt.ylabel('Y axis') # 设置y轴标签
plt.title('Line Plot',size=30) # 设置标题内容, size 字体大小
plt.show() #显示图片

在这里插入图片描述

1.3 面向对象

fig, ax = plt.subplots(figsize=(15,3))  #创建坐标轴对象
ax.plot(x, y) #调用坐标轴的绘图方法
ax.set_xlim(-4, 8) # 调用坐标轴的设置x轴上下限的方法
ax.set_ylim(0, 11) 
ax.set_xlabel('X axis') # 调用坐标轴的设置x轴标签的方法
ax.set_ylabel('Y axis',size = 20) # 调用坐标轴的设置y轴标签的方法
ax.set_title('Line Plot',size = 30) # 调用坐标轴的设置标题的方法
plt.show() 

在这里插入图片描述

2 matplotlib 数据可视化案例

2.1 介绍

通过Anscombe数据集说明数据可视化的重要性

  • Anscombe数据集由英国统计学家Frank Anscombe创建,数据集包含4组数据,每组数据包含两个连续变量。
  • 每组数据的平均值、方差、相关性都相同,但是当它们可视化后,就会发现每组数据的模式明显不同。

2.2 案例步骤

  1. 加载查看数据

    import pandas as pd
    anscombe = pd.read_csv('data/anscombe.csv')
    anscombe # 查看数据
    

    显示结果:

      dataset     x      y
    0        I  10.0   8.04
    1        I   8.0   6.95
    2        I  13.0   7.58
    3        I   9.0   8.81
    4        I  11.0   8.33
    5        I  14.0   9.96
    6        I   6.0   7.24
    7        I   4.0   4.26
    8        I  12.0  10.84
    9        I   7.0   4.82
    10       I   5.0   5.68
    11      II  10.0   9.14
    12      II   8.0   8.14
    13      II  13.0   8.74
    14      II   9.0   8.77
    15      II  11.0   9.26
    16      II  14.0   8.10
    17      II   6.0   6.13
    18      II   4.0   3.10
    19      II  12.0   9.13
    20      II   7.0   7.26
    21      II   5.0   4.74
    22     III  10.0   7.46
    23     III   8.0   6.77
    24     III  13.0  12.74
    25     III   9.0   7.11
    26     III  11.0   7.81
    27     III  14.0   8.84
    28     III   6.0   6.08
    29     III   4.0   5.39
    30     III  12.0   8.15
    31     III   7.0   6.42
    32     III   5.0   5.73
    33      IV   8.0   6.58
    34      IV   8.0   5.76
    35      IV   8.0   7.71
    36      IV   8.0   8.84
    37      IV   8.0   8.47
    38      IV   8.0   7.04
    39      IV   8.0   5.25
    40      IV  19.0  12.50
    41      IV   8.0   5.56
    42      IV   8.0   7.91
    43      IV   8.0   6.89
    
    • 数据中的dataset 列,用来区分整个数据集中的子数据集

      # 取出各部分子集
      dataset_1 = anscombe[anscombe['dataset']=='I']
      dataset_2 = anscombe[anscombe['dataset']=='II']
      dataset_3 = anscombe[anscombe['dataset']=='III']
      dataset_4 = anscombe[anscombe['dataset']=='IV']
      
    • 查看数据的统计分布情况

      dataset_1.describe()
      

    显示结果:

    xy
    count11.00000011.000000
    mean9.0000007.500909
    std3.3166252.031568
    min4.0000004.260000
    25%6.5000006.315000
    50%9.0000007.580000
    75%11.5000008.570000
    max14.00000010.840000
    dataset_2.describe()
    

    显示结果:

    xy
    count11.00000011.000000
    mean9.0000007.500909
    std3.3166252.031657
    min4.0000003.100000
    25%6.5000006.695000
    50%9.0000008.140000
    75%11.5000008.950000
    max14.0000009.260000
    dataset_3.describe()
    

    显示结果:

    xy
    count11.00000011.000000
    mean9.0000007.500000
    std3.3166252.030424
    min4.0000005.390000
    25%6.5000006.250000
    50%9.0000007.110000
    75%11.5000007.980000
    max14.00000012.740000
    dataset_4.describe()
    

    显示结果:

    xy
    count11.00000011.000000
    mean9.0000007.500909
    std3.3166252.030579
    min8.0000005.250000
    25%8.0000006.170000
    50%8.0000007.040000
    75%8.0000008.190000
    max19.00000012.500000
    • 从数据的统计量看,变量X,Y,4个子数据集的平均值和标准差基本相同,但是平均值和标准差相同,几个数据集就完全相同么?
  2. 画图展示

    # 创建画布
    fig = plt.figure(figsize=(16,8))
    # 向画布添加子图
    #子图有两行两列,位置是1
    axes1 = fig.add_subplot(2,2,1)
    #子图有两行两列,位置是2
    axes2 = fig.add_subplot(2,2,2)
    #子图有两行两列,位置是3
    axes3 = fig.add_subplot(2,2,3)
    #子图有两行两列,位置是4
    axes4 = fig.add_subplot(2,2,4)
    
    • 在创建的各个坐标轴中绘制图表
    axes1.plot(dataset_1['x'],dataset_1['y'],'o')
    axes2.plot(dataset_2['x'],dataset_2['y'],'o')
    axes3.plot(dataset_3['x'],dataset_3['y'],'o')
    axes4.plot(dataset_4['x'],dataset_4['y'],'o')
    fig
    

显示结果:

在这里插入图片描述

添加标题

```python
axes1.set_title('dataset_1') # 为子图添加标题
axes2.set_title('dataset_2')
axes3.set_title('dataset_3')
axes4.set_title('dataset_4')
fig.suptitle('Anscombe Data') #为大图添加标题
fig
```

显示结果:
在这里插入图片描述

3 使用matplotlib绘制统计图

  • 本小节使用tips数据集,其中包含了某餐厅服务员收集的顾客付小费的相关数据
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # ⽤来正常显⽰中⽂标签
plt.rcParams['axes.unicode_minus'] = False # ⽤来正常显⽰负号

# 加载tips数据集类
tips = pd.read_csv('data/tips.csv')
tips.head()

显示结果:

  total_bill   tip     sex smoker  day    time  size
0       16.99  1.01  Female     No  Sun  Dinner     2
1       10.34  1.66    Male     No  Sun  Dinner     3
2       21.01  3.50    Male     No  Sun  Dinner     3
3       23.68  3.31    Male     No  Sun  Dinner     2
4       24.59  3.61  Female     No  Sun  Dinner     4

3.1 单变量

  • 在统计学属于中,‘单变量’(univariate)指单个变量
3.1.1 直方图
  • 直方图是观察单个变量最常用的方法。这些值是经过"装箱"(bin)处理的
  • 直方图会将数据分组后绘制成图来显示变量的分布状况
fig = plt.figure()
axes1 = fig.add_subplot(1,1,1)
axes1.hist(tips['total_bill'],bins = 10)
axes1.set_title('Histogram of Total Bill')
axes1.set_xlabel('total bill')
axes1.set_ylabel('freq')

显示结果:

在这里插入图片描述

3.2 双变量

  • 双变量(bivariate)指两个变量
3.2.1 散点图
  • 散点图用于表示一个连续变量随另一个连续变量的变化所呈现的大致趋势
fig = plt.figure()
axes1 = fig.add_subplot(1,1,1)
axes1.scatter(tips['total_bill'],tips['tip'])
axes1.set_title('Scatterplot of Total Bill vs Tip')
axes1.set_xlabel('Total Bill')
axes1.set_ylabel('Tip')

显示结果:

在这里插入图片描述

3.3 多变量数据

  • 二维平面可以用来展示两个变量的数据,如果是多变量,比如添加一个性别变量,可以通过不同的颜色来表示
  • 还可以通过圆点的大小来区分变量的不同,但如果变量的大小区别不大,可能通过圆点大小来区分效果不是很好
def recode_sex(sex):
    if sex =='Female':
        return 0
    else:
        return 1
tips['sex_color'] = tips['sex'].apply(recode_sex)
fig = plt.figure()
axes1 = fig.add_subplot(1,1,1)
scatter = axes1.scatter(x = tips['total_bill'],y=tips['tip'],s = tips['size']*10,c=tips['sex_color'],alpha = 0.5)
legend1 = axes1.legend(*scatter.legend_elements(), loc="upper left", title="性别") # 设置图例
axes1.add_artist(legend1) # 添加图例
axes1.set_title('Total Bill vs Tip Colored by Sex and Sized by Size')
axes1.set_xlabel('total Bill')
axes1.set_ylabel('tip')

显示结果:

在这里插入图片描述

总结结

  • Python常用绘图库
    • Matplotlib,Pandas,Seaborn,pyecharts等
  • Matplotlib绘图步骤
    • 导入Matplotlib.pyplot
    • 准备数据
    • 创建图表,坐标轴
    • 绘制图表
    • 设置标题,x,y轴标题等
<think>嗯,用户现在问的是关于Matplotlib的文件类型和用途。之前他提到了Conda的pkgs目录,不过现在转向了Matplotlib。我需要结合他提供的四个引用内容来回答这个问题。 首先,用户给的引用里提到了全局配置文件matplotlibrc,位于安装目录的mpl-data下,这个文件的作用是设置默认的绘图参数,比如字体、颜色等。所以这个应该是Matplotlib的配置文件类型,用途是全局配置绘图样式。 然后,引用2和4提到了Pandas依赖Matplotlib,以及pyplot模块的工作方式。这可能涉及到脚本文件,比如用户自己写的Python脚本,使用pyplot来生成图表。这类文件通常是.py文件,用途是实现数据可视化。 引用3提到显示中文字体的方法,通过修改rc参数。这可能涉及到用户自定义的配置文件或者代码中的设置,属于运行时配置文件,比如在代码中动态设置字体,而不是修改全局的matplotlibrc。 另外,Matplotlib可能还有其他类型的文件,比如缓存文件或样式文件。比如,用户可能通过plt.style.use('ggplot')来使用样式文件,这些样式文件可能是.mplstyle格式,存放在安装目录的stylelib文件夹下,用于预定义样式组合。 还有,生成的图像文件,比如保存为PNG、PDF等格式,这些虽然是由Matplotlib生成的,但用户可能也关心这些输出文件的类型和用途。 总结一下,Matplotlib涉及的文件类型包括:配置文件(matplotlibrc和.mplstyle)、脚本文件(.py)、缓存文件(fontList.json)、输出文件(图像格式)以及文档和示例文件。用途方面,配置文件用于设置绘图参数,脚本用于编写绘图代码,缓存文件管理字体,输出文件保存图像,示例文件帮助学习。 需要注意用户可能想知道如何修改这些文件,比如调整全局配置或使用自定义样式,或者如何处理字体显示问题,如引用3中的中文字体设置。所以回答中需要涵盖这些方面,并参考之前的引用内容,确保信息准确,同时结构清晰,分点说明。</think>### Matplotlib文件类型及作用详解 --- #### **1. 核心配置文件** - **matplotlibrc**(全局配置文件) - 文件路径示例: ```python # Windows系统 D:\Python39\Lib\site-packages\matplotlib\mpl-data\matplotlibrc # Linux系统 /usr/local/lib/python3.9/site-packages/matplotlib/mpl-data/matplotlibrc ``` - **作用**: - 控制所有绘图元素的默认参数(线宽、字体、颜色方案等) - 包含500+可配置项,如`axes.grid`(坐标轴网格)、`figure.dpi`(图像分辨率) - **操作示例**: ```python import matplotlib as mpl print(mpl.matplotlib_fname()) # 查看当前生效的配置文件路径 ``` - **特点**: - 支持**三级配置覆盖**机制(全局 > 用户级 > 代码级)[^1][^4] - **.mplstyle**(样式文件) - 文件路径: ```bash matplotlib/stylelib/*.mplstyle # 内置样式 ~/.config/matplotlib/stylelib/ # 自定义样式 ``` - **作用**: - 预定义样式组合(如`ggplot`、`seaborn`) - 通过`plt.style.use('dark_background')`快速切换主题 - **文件结构**: ```ini axes.facecolor: black # 坐标轴背景 lines.linewidth: 1.5 # 线宽 font.family: sans-serif # 字体 ``` --- #### **2. 运行时文件** - **fontList.json**(字体缓存) - 生成路径: ```python import matplotlib as mpl print(mpl.get_cachedir()) # 输出缓存目录路径 ``` - **作用**: - 记录系统可用字体列表及其路径 - 加速字体加载(首次扫描后缓存) - **典型问题处理**: ```python # 中文字体配置(参考引用[3]) mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei'] mpl.rcParams['axes.unicode_minus'] = False # 解决负号显示 ``` - **tex.cache/**(LaTeX渲染缓存) - **作用**: - 存储通过`usetex=True`生成的公式渲染结果 - 避免重复编译LaTeX公式提升性能 --- #### **3. 输出文件** - **图像输出格式**: | 格式类型 | 生成命令示例 | 特点 | |---------|--------------|------| | 矢量图 | `plt.savefig('plot.pdf')` | 无限缩放,适合论文出版 | | 位图 | `plt.savefig('heatmap.png', dpi=300)` | 指定分辨率,适合网页展示 | | 交互式 | `plt.savefig('scatter.svg')` | 可编辑矢量格式 | - **元数据存储**: ```python fig = plt.figure() fig.canvas.print_figure('plot.png', metadata={'Creator': 'My Script', 'Keywords': 'experiment A'}) ``` --- #### **4. 代码文件** - **绘图脚本**(.py文件) ```python # 典型绘图流程(参考引用[2][4]) import matplotlib.pyplot as plt plt.plot([1,2,3], [4,5,6]) # 创建坐标系 plt.title("示例图表") # 添加标题 plt.xlabel("X轴", fontsize=12) # 坐标轴标签 plt.savefig('output.svg') # 保存矢量图 plt.close() # 释放内存 ``` --- #### **5. 文档与示例** - **示例库**: ```python # 查看所有示例代码路径 import matplotlib as mpl print(mpl.__path__[0] + '/examples/') ``` - 包含200+官方示例,涵盖2D/3D绘图、动画、交互控件等 --- ### 文件关系图示 ```mermaid graph TD A[用户脚本.py] --> B[读取matplotlibrc] A --> C[调用pyplot接口] C --> D{输出选择} D --> E[显示窗口] D --> F[保存为PDF/PNG] B --> G[加载字体缓存] G --> H[生成图像] ``` --- ### 常见问题解决方案 **Q1 如何自定义全局配置?** - 复制默认配置文件到用户目录: ```bash cp $(python -c "import matplotlib; print(matplotlib.matplotlib_fname())") ~/.matplotlib/matplotlibrc ``` - 修改后通过`mpl.rc_file('~/.matplotlib/matplotlibrc')`加载 **Q2 为什么中文显示为方框?** - 需完成两步配置: ```python plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 指定字体 plt.rcParams['axes.unicode_minus'] = False # 修复负号 ``` 参考引用[3] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

编程牛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值