开发者

Python可视化工具Matplotlib的20种图表用法

目录
  • 总结了20种最实用的python图表,做数据可视化不用再抓狂了
    • 1. 折线图(Line Chart)
    • 2. 条形图(Bar Chart)
    • 3. 直方图(Histogram)
    • 4. 散点图(Scatter Plot)
    • 5. 饼图(Pie Chart)
    • 6. 面积图(Area Chart)
    • 7. 箱线图(Box Plot)
    • 8. 热力图(Heatmap)
    • 9. 雷达图(Radar Chart)
    • 10. 极坐标图(Polar Chart)
    • 11. 双轴图(Dual Axis)
    • 12. 折线图+散点图混搭(Line + Scatter)
    • 13. 阶梯图(Step Plot)
    • 14. 饼图 + 中心洞(环形图)
    • 15. 误差线图(Error Bar)
    • 16. 等高线图(Contour Plot)
    • 17. 3D 曲面图(3D Surface)
    • 18. 气泡图(Bubble Plot)
    • 19. 漏斗图(Funnel Chart)
    • 20. 动态图(Animation)
  • 最后说一句

    总结了20种最实用的Python图表,做数据可视化不用再抓狂了

    Python可视化工具Matplotlib的20种图表用法

    今天咱不聊鸡汤、不讲情怀,直接开整!花姐带你沉浸式体验 Python 可视化神器——Matplotlib的20种最常见图表玩法。

    不管你是数据分析,机器学习,还是做周报、写PPT,只要掌握了这些图形,绝对是质的飞跃!

    接下来,准备好你的 IDE,我们一个个上手敲起来!

    注:要想Matplotlib支持中文!代码跑之前记得加上这一行解决中文乱码问题:

    plt.rcParams['font.family'] = 'SimHei'  # 黑体支持中文
    

    如何你还没有安装matplotlib请打开你的终端(Terminal)或者命令行(cmd),直接敲:

    pip install matplotlib
    

    回车,喝口水,等一会儿,它自己就装好了。

    1. 折线图(Line Chart)

    常用于趋势变化,比如气温、股价、KPI变化啥的。

    import matplotlib.pyplot as plt
    
    plt.rcParams['font.family'] = 'SimHei'  # 黑体支持中文
    
    x = [1, 2, 3, 4, 5]
    y = [3, 5, 7, 6, 9]
    
    plt.plot(x, y, marker='o')
    plt.title('每日访问量变化')
    plt.xlabel('日期')
    plt.ylabel('访问量')
    plt.grid(True)
    plt.show()
    

    Python可视化工具Matplotlib的20种图表用法

    2. 条形图(Bar Chart)

    横着比数据,适合分类比较。

    import matplotlib.pyplot as plt
    
    plt.rcParams['font.family'] = 'SimHei'  # 黑体支持中文
    
    categories = ['小红', '小明', '小刚', '小美']
    scores = [90, 80, 75, 88]
    
    plt.bar(categories, scores, color='skyblue')
    plt.title('四人考试成绩对比')
    plt.show()
    

    Python可视化工具Matplotlib的20种图表用法

    3. 直方图(Histogram)

    适合看数据分布,比如工资分布、身高、体重这些。

    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.rcParams['font.family'] = 'SimHei'  # 黑体支持中文
    
    data = np.random.normal(170, 10, 200)
    
    plt.hist(data, bins=20, color='orange', edgecolor='black')
    plt.title('身高分布图')
    plt.xlabel('身高')
    plt.ylabel('人数')
    plt.show()
    

    Python可视化工具Matplotlib的20种图表用法

    4. 散点图(Scatter Plot)

    两个变量之间的关系,看是否相关。

    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.rcParams['font.family'] = 'SimHei'  # 黑体支持中文
    
    x = np.random.rand(100)
    y = x + np.random.normal(0, 0.1, 100)
    
    plt.scatter(x, y)
    plt.title('学习时间 vs 成绩')
    plt.xlabel('学习时间')
    plt.ylabel('成绩')
    plt.show()
    

    Python可视化工具Matplotlib的20种图表用法

    5. 饼图(Pie Chart)

    占比图!让老板看谁吃的预算多

    import matplotlib.pyplot as plt
    
    plt.rcParams['font.family'] = 'SimHei'  # 黑体支持中文
    
    labels = ['广告', '运营', '人力', '技术']
    sizes = [30, 20, 10, 40]
    
    plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140)
    plt.title('部门预算占比')
    plt.axis('equal')
    plt.show()
    

    Python可视化工具Matplotlib的20种图表用法

    6. 面积图(Area Chart)

    比折线图多了一点“填充感”,也更直观。

    import matplotlib.pyplot as plt
    
    plt.rcParams['font.family'] = 'SimHei'  # 黑体支持中文
    
    x = range(1, 6)
    y = [1, 3, 4, 8, 12]
    
    plt.fill_between(x, y, color="lightgreen")
    plt.plot(x, y, color="green")
    plt.title('用户增长趋势')
    plt.show()
    

    Python可视化工具Matplotlib的20种图表用法

    7. 箱线图(Box Plot)

    统计分析必备,帮你看离群值、上下四分位这些。

    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.rcParams['font.family'] = 'SimHei'  # 黑体支持中文
    
    data = [np.random.normal(50, std, 100) for std in (5, 10, 20)]
    
    plt.boxplot(data, patch_artist=True)
    plt.title('三组数据分布对比')
    plt.show()
    

    Python可视化工具Matplotlib的20种图表用法

    8. 热力图(Heatmap)

    用颜色来表现数值大小,强烈推荐结合seaborn

    import matplotlib.pyplot as plt
    import numpy as np
    import seaborn as sns
    
    plt.rcParams['font.family'] = 'SimHei'  # 黑体支持中文
    
    data = np.random.rand(6, 6)
    sns.heatmap(data, annot=True)
    plt.title('热力图示例')
    plt.show()
    

    Python可视化工具Matplotlib的20种图表用法

    9. 雷达图(Radar Chart)

    多维指标一图展示,简历必备,别说我没告诉你

    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.rcParams['font.family'] = 'SimHei'  # 黑体支持中文
    
    labels = ['沟通', '编码', '学习', '抗压', '责任心']
    stats = [8, 9, 7, 6, 8]
    
    angles = np.linspace(0, 2*np.pi, len(labels), endpoint=False).tolist()
    stats += stats[:1]
    angles += angles[:1]
    
    fig, ax = plt.subplots(subplot_kw={'polar': True})
    ax.p编程客栈lot(angles, stats, 'o-', linewidth=2)
    ax.fill(angles, stats, alpha=0.25)
    ax.set_thetagrids(np.degrees(angles[:-1]), labels)
    plt.title('我的技能雷达图')
    plt.show()
    

    Python可视化工具Matplotlib的20种图表用法

    10. 极坐标图(Polar Chart)

    散点+极坐标,视觉冲击感超强。

    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.rcParams['font.family'] = 'SimHei'  # 黑体支持中文
    
    r = np.linspace(0, 1, 100)
    theta = 2 * np.pi * r
    
    plt.polar(theta, r)
    plt.title('极坐标示例')
    plt.show()
    

    Python可视化工具Matplotlib的20种图表用法

    11php. 双轴图(Dual Axis)

    两个Y轴,两个变量共用一个X轴,超实用。

    import matplotlib.pyplot as plt
    
    plt.rcParams['font.family'] = 'SimHei'  # 黑体支持中文
    
    # 数据
    months = ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
    sales = [120, 150, 200, 180, 220, 260, 240, 300, 320, 310, 400, 500]
    new_users = [3500, 3800, 4200, 4000, 5000, 5200, 4800, 6000, 6300, 6200, 7500, 8000]
    
    fig, ax1 = plt.subplots(figsize=(10,6))
    
    # 左轴:销售额
    color = 'tab:blue'
    ax1.set_xlabel('月份')
    ax1.set_ylabel('销售额(万元)', color=color)
    ax1.plot(months, sales, color=color, marker='o', label='销售额')
    ax1.tick_params(axis='y', labelcolor=color)
    
    # 右轴:新注册用户
    ax2 = ax1.twinx()
    color = 'tab:red'
    ax2.set_ylabel('新注册用户(人)', color=color)
    ax2.plot(months, new_users, color=color, marker='s', linestyle='--', label='新注册用户')
    ax2.tick_params(axis='y', labelcolor=color)
    
    plt.title('某电商平台2024年月度销售额与新注册用户')
    ax1.grid(True)
    
    plt.show()
    

    Python可视化工具Matplotlib的20种图表用法

    12. 折线图+散点图混搭(Line + Scatter)

    增强折线图表达力的小技巧!编程客栈

    import matplotlib.pyplot as plt
    
    plt.rcParams['font.family'] = 'SimHei'  # 黑体支持中文
    
    # 折线数据
    months = ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
    avg_price = [18500, 18700, 19000, 18800, 19200, 19400, 19500, 19800, 20000, 20200, 20500, 21000]
    
    # 散点数据
    special_months = ['3月', '6月', '8月', '11月']
    special_price = [21000, 22000, 23000, 25000]
    
    fig, ax = plt.subplots(figsize=(10,6))
    
    # 画折线图
    ax.plot(months, avg_price, color='blue', marker='o', label='平均房价(元/㎡)')
    
    # 画散点图
    ax.scatter(special_months, special_price, color='red', s=100, marker='*', label='特殊成交(元/㎡)')
    
    plt.title('2024年某小区月均房价及特殊成交记录')
    plt.xlabel('月份')
    plt.ylabel('价格(元/㎡)')
    plt.legend()
    plt.grid(True)
    
    plt.show()
    

    Python可视化工具Matplotlib的20种图表用法

    13. 阶梯图(Step编程客栈 Plot)

    适合描述“突变”的情况,比如电费、分段计价那种。

    import matplotlib.pyplot as plt
    from datetime import datetime
    import matplotlib.dates as mdates
    
    plt.rcParams['font.family'] = 'SimHei'  # 黑体支持中文
    
    # 数据
    dates = ['2023-10-01', '2023-10-02', '2023-10-03', 
             '2023-10-04', '2023-10-05', '2023-10-06', '2023-10-07']
    temperatures = [22, 23, 20, 19, 18, 20, 21]
    
    # 转换日期格式
    dates = [datetime.strptime(d, '%Y-%m-%d') for d in dates]
    
    # 创建图表
    plt.figure(figsize=(10, 6))
    
    # 绘制阶梯图(post样式的阶梯变化)
    plt.step(
        dates,
        temperatures,
        where='post',    # 阶梯在数据点后变化
        color='#E64A45', # 中国红配色
        linewidth=2.5,
        marker='o',      # 添加数据点标记
        markersize=8,
        markerfacecolor='white',
        markeredgewidth=2,
        label='每日最高气温'
    )
    
    # 添加标题和标签
    plt.title('北京市国庆期间气温变化(2024年10月1-7日)', fontsize=14, pad=20)
    plt.xlabel('日期', fontsize=12)
    plt.ylabel('温度 (C)', fontsize=12)
    
    # 配置坐标轴
    plt.gca().xaxis.set_major_formatter(mdates.Dathttp://www.devze.comeFormatter('%m/%d'))
    plt.gca().xaxis.set_major_locator(mdates.DayLocator())
    plt.xticks(rotation=30)
    plt.ylim(15, 25)
    
    # 添加辅助元素
    plt.grid(axis='y', linestyle='--', alpha=0.7)
    plt.tight_layout()
    plt.legend(loc='upper left', frameon=False)
    
    plt.show()
    

    Python可视化工具Matplotlib的20种图表用法

    14. 饼图 + 中心洞(环形图)

    视觉更舒服,直接用wedgeprops搞定。

    import matplotlib.pyplot as plt
    
    plt.rcParams['font.family'] = 'SimHei'  # 黑体支持中文
    
    # 数据
    categories = [
        '煤炭', 
        '石油', 
        '天然气', 
        '可再生能源\n(水电/风电/光伏)'
    ]
    percentages = [56.2, 18.5, 9.4, 15.9]
    colors = [
        '#6D8698',  # 灰蓝(煤炭)
        '#BE7352',  # 棕褐(石油)
        '#8FA6A2',  # 青灰(天然气)
        '#8FB3B0'   # 浅绿(可再生能源)
    ]
    
    # 创建带中心洞的环形图
    fig, ax = plt.subplots(figsize=(8, 8))
    wedges, texts, autotexts = ax.pie(
        percentages,
        wedgeprops={
            'width': 0.5,          # 环宽=半径的50%
            'edgecolor': 'white',  # 白色分割线
            'linewidth': 1.5       # 分割线粗细
        },
        colors=colors,
        startangle=90,           # 起始角度(12点方向)
        autopct='%1.1f%%',       # 百分比格式
        pctdistance=0.85         # 百分比标签位置(0.85倍半径)
    )
    
    # 设置百分比标签样式
    for autotext in autotexts:
        autotext.set_color('white')
        autotext.set_fontsize(10)
        autotext.set_weight('bold')
    
    # 添加中心标题
    ax.text(
        0, 0, 
        'XX国能源结构\n2024',
        ha='center', 
        va='center',
        fontsize=16,
        fontweight='bold',
        color='#2F4F4F'
    )
    
    # 添加图例(带透明度效果)
    legend = ax.legend(
        wedges,
        categories,
        title="Python可视化工具Matplotlib的20种图表用法",
        loc="center left",
        bbox_to_anchor=(1, 0, 0.5, 1),
        frameon=False,
        labelspacing=1.2
    )
    legend.get_title().set_fontweight('bold')
    
    # 设置长宽比保证正圆形
    ax.axis('equal')  
    
    plt.tight_layout()
    plt.show()
    

    Python可视化工具Matplotlib的20种图表用法

    15. 误差线图(Error Bar)

    实验、分析场景常用。

    import matplotlib.pyplot as plt
    
    plt.rcParams['font.family'] = 'SimHei'  # 黑体支持中文
    
    # 数据 (单位:万辆)
    quarters = ['Q1', 'Q2', 'Q3', 'Q4']
    avg_sales = [158.6, 173.2, 204.6, 227.4]  # 季度平均销量
    std_dev = [8.2, 9.5, 11.3, 13.1]          # 各季度销量标准差
    
    # 创建带误差线的散点图
    plt.figure(figsize=(10, 6))
    
    # 主绘图语句
    main_line = plt.errorbar(
        x=quarters,
        y=avg_sales,
        yerr=std_dev,           # 误差线数据
        fmt='o-',               # 点线组合
        markersize=10,
        markerfacecolor='#2E86C1',
        markeredgecolor='white',
        elinewidth=2,           # 误差线粗细
        ecolor='#E74C3C',       # 误差线颜色
        capsize=8,              # 误差线顶端横杠长度
        linewidth=2.5,
        label='平均销量  标准差'
    )
    
    # 添加数据标签
    for i, (v, s) in enumerate(zip(avg_sales, std_dev)):
        plt.text(i, v + 15, 
                 f'{v}{s}',
                 ha='center', 
                 fontsize=10,
                 bbox=dict(facecolor='white', alpha=0.8))
    
    # 可视化优化
    plt.title('2024年中国新能源汽车季度销量误差分析', fontsize=14, pad=20)
    plt.ylabel('销量 (万辆)', labelpad=12)
    plt.ylim(120, 260)
    plt.grid(axis='y', linestyle='--', alpha=0.6)
    
    # 添加图例
    leg = plt.legend(loc='upper left')
    leg.get_frame().set_linewidth(0.0)  # 移除图例边框
    
    plt.tight_layout()
    plt.show()
    

    Python可视化工具Matplotlib的20种图表用法

    16. 等高线图(Contour Plot)

    展示函数值随二维变量变化的趋势。

    import matplotlib.pyplot as plt
    from matplotlib import cm
    import numpy as np
    
    plt.rcParams['font.family'] = 'SimHei'  # 黑体支持中文
    plt.rcParams['axes.unicode_minus'] = False # 解决负数乱码问题
    
    # 生成地形数据(模拟青海湖周边区域 20x20公里)
    x = np.linspace(-10, 10, 200)
    y = np.linspace(-8, 12, 200)
    X, Y = np.meshgrid(x, y)
    
    # 高程函数(包含湖盆与山脉特征)
    Z = 3200 + 50*Y - 40*X**2 + 30*np.sin(2*X) + 45*np.exp(-(X**2 + Y**2)/25)
    
    # 创建画布
    plt.figure(figsize=(12, 8))
    
    # 绘制填充等高线
    cs = plt.contourf(X, Y, Z, 
                     levels=np.linspace(3100, 3700, 13),
                     cmap=cm.gist_earth,
                     alpha=0.85)
    
    # 绘制等高线
    c_lines = plt.contour(X, Y, Z,
                         levels=np.linspace(3100, 3700, 13),
                         colors='black',
                         linewidths=0.6)
    
    # 添加标签
    plt.clabel(c_lines, 
              inline=True,
              fontsize=8,
              fmt='%d m')  # 添加高程标注
    
    # 添加色标
    cbar = plt.colorbar(cs)
    cbar.set_label('高程(米)', rotation=270, labelpad=20)
    
    # 设置地形图元素
    plt.title('青海湖周边地形等高线模拟图', pad=20, fontsize=14)
    plt.xlabel('东西向距离 (公里)')
    plt.ylabel('南北向距离 (公里)')
    plt.grid(linestyle=':', alpha=0.5)
    
    # 标注特征区域
    plt.text(-8, 10, '日月山脉', ha='left', va='center', 
            fontsize=9, color='#8B0000')
    plt.annotate('青海湖水域', xy=(-1, 3), xytext=(-9, 5),
                arrowprops=dict(arrowstyle="->", color='navy'),
                fontsize=9, color='#00008B')
    
    plt.tight_layout()
    plt.show()
    

    Python可视化工具Matplotlib的20种图表用法

    17. 3D 曲面图(3D Surface)

    你没看错,Matplotlib也能画3D!

    import matplotlib.pyplot as plt
    from matplotlib import cm
    import numpy as np
    
    plt.rcParams['font.family'] = 'SimHei'  # 黑体支持中文
    plt.rcParams['axes.unicode_minus'] = False # 解决负数乱码问题
    
    # 生成真实地形数据(模拟黄石公园44.5N, 110.5W区域)
    x = np.linspace(-5, 5, 150)
    y = np.linspace(-5, 5, 150)
    X, Y = np.meshgrid(x, y)
    
    # 高程函数(包含火山口与地热区特征)
    Z = 2400 + 50*np.exp(-0.3*(X**2 + Y**2)) - 200*np.exp(-0.8*((X+1)**2 + (Y-0.5)**2)) 
    Z += 30*np.sin(2*X) * np.cos(3*Y)
    
    # 创建3D画布
    fig = plt.figure(figsize=(14, 10))
    ax = fig.add_subplot(111, projection='3d')
    
    # 绘制曲面
    surf = ax.plot_surface(X, Y, Z, 
                          cmap=cm.terrain,    # 地形专用色标
                          rstride=2,         # 行采样步长
                          cstride=2,         # 列采样步长
                          alpha=0.95,
                          antialiased=True,
                          linewidth=0.2,
                          edgecolor='#333333')
    
    # 添加色标
    cbar = fig.colorbar(surf, shrink=0.6, ASPect=30)
    cbar.set_label('高程 (米)', rotation=270, labelpad=25)
    
    # 设置观测角度
    ax.view_init(elev=35, azim=300)  # 35度俯角,300度方位角
    
    # 添加标注
    ax.set_xlabel('东西向 (公里)', labelpad=12)
    ax.set_ylabel('南北向 (公里)', labelpad=12)
    ax.set_zlabel('高程', labelpad=12)
    ax.set_title('某国家公园地热区3D地形模型', y=0.98, fontsize=14)
    
    # 添加地形特征标注
    ax.text(-4, -4, 2600, '▲ 火山口', color='#8B0000', fontsize=9)
    ax.text(1.5, 0.8, 2250, '地热喷泉区', color='#2F4F4F', fontsize=9)
    
    # 优化显示效果
    ax.xaxis.pane.fill = False
    ax.yaxis.pane.fill = False
    ax.zaxis.pane.fill = False
    ax.xaxis._axinfo["grid"].update({"linewidth":0.3, "color" : "#666666"})
    ax.yaxis._axinfo["grid"].update({"linewidth":0.3, "color" : "#666666"})
    ax.zaxis._axinfo["grid"].update({"linewidth":0.3, "color" : "#666666"})
    
    plt.tight_layout()
    plt.show()
    

    Python可视化工具Matplotlib的20种图表用法

    18. 气泡图(Bubble Plot)

    其实是散点图加强版,用大小表示变量大小。

    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.rcParams['font.family'] = 'SimHei'  # 黑体支持中文
    plt.rcParams['axes.unicode_minus'] = False # 解决负数乱码问题
    
    
    # 各省份数据(GDP单位:万亿元,人口单位:千万人)
    provinces = [
        '广东', '江苏', '山东', '浙江', '河南',
        '四川', '湖北', '福建', '湖南', '安徽'
    ]
    gdp = [12.91, 12.29, 8.74, 7.77, 6.13, 
           5.67, 5.37, 5.31, 4.87, 4.50]
    population = [126.6, 85.1, 101.6, 65.4, 98.7,
                  83.7, 58.3, 41.8, 66.4, 61.3]
    per_capita_gdp = [10.2, 14.4, 8.6, 11.9, 6.2,
                      6.8, 9.2, 12.7, 7.3, 7.3]  # 单位:万元/人
    
    # 创建画布
    plt.figure(figsize=(14, 8))
    
    # 绘制气泡图
    scatter = plt.scatter(
        x=gdp,
        y=population,
        s=np.array(per_capita_gdp)*400,  # 气泡大小缩放
        c=np.arange(len(provinces)),      # 颜色映射
        cmap='tab20',
        alpha=0.8,
        edgecolors='white',
        linewidths=0.8
    )
    
    # 设置坐标轴
    plt.title('xxxx主要省份经济数据气泡图', fontsize=14, pad=20)
    plt.xlabel('GDP(万亿元)', labelpad=12)
    plt.ylabel('人口(千万人)', labelpad=12)
    plt.grid(linestyle=':', alpha=0.6)
    
    # 设置坐标范围
    plt.xlim(3, 14)
    plt.ylim(30, 130)
    
    plt.tight_layout()
    plt.show()
    

    Python可视化工具Matplotlib的20种图表用法

    19. 漏斗图(Funnel Chart)

    展示“转化率”的神器。

    import matplotlib.pyplot as plt
    
    plt.rcParams['font.family'] = 'SimHei'  # 黑体支持中文
    plt.rcParams['axes.unicode_minus'] = False # 解决负数乱码问题
    
    
    labels = ['访问', '注册', '激活', '付费']
    values = [1000, 800, 400, 100]
    
    plt.barh(labels, values)
    plt.title('用户转化漏斗')
    plt.show()
    

    Python可视化工具Matplotlib的20种图表用法

    20. 动态图(Animation)

    别说静态图无聊,Matplotlib也能动起来!

    import matplotlib.pyplot as plt
    import numpy as np
    from matplotlib import animation
    
    plt.rcParams['font.family'] = 'SimHei'  # 黑体支持中文
    plt.rcParams['axes.unicode_minus'] = False # 解决负数乱码问题
    
    fig, ax = plt.subplots()
    x = np.linspace(0, 2*np.pi, 128)
    line, = ax.plot(x, np.sin(x))
    
    def update(i):
        line.set_ydata(np.sin(x + i / 10.0))
        return line,
    
    ani = animation.FuncAnimation(fig, update, frames=100, interval=50)
    plt.title('动态正弦波')
    plt.show()
    

    Python可视化工具Matplotlib的20种图表用法

    最后说一句

    可视化不仅仅是“画图”,更是讲故事的方式,是你用代码向世界展示洞察力的舞台。别只是盯着那些一眼看完的报表,有时候,一个图胜过千言万语。

    以上就是Python可视化工具Matplotlib的20种图表用法的详细内容,更多关于Python可视化工具Matplotlib用法的资料请关注编程客栈(www.devze.com)其它相关文章!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜