Python中八种常用的可视化图表绘制完整代码

 更新时间:2026年08月23日 09:59:06   作者:Li Ming&  
数据可视化是数据分析中不可或缺的一环,而Matplotlib是Python生态中最基础、最强大的绘图库,本文基于一段典型的可视化代码,带您逐行拆解8种常用图表的绘制方法,希望对大家有所帮助

前言

数据可视化是数据分析中不可或缺的一环,而Matplotlib是Python生态中最基础、最强大的绘图库。本文基于一段典型的可视化代码,带您逐行拆解8种常用图表的绘制方法,包括:

  • 折线图
  • 柱形图(含并列柱状图)
  • 饼图
  • 直方图
  • 极轴饼图(雷达图变体)
  • 三维散点图
  • 三维曲面图

一、环境准备与通用设置

安装依赖

pip install matplotlib numpy

中文字体与负号显示

Matplotlib默认不支持中文,需设置字体,并解决负号显示为方块的问题:

plt.rcParams["font.sans-serif"] = ["SimHei"]   # 使用黑体
plt.rcParams["axes.unicode_minus"] = False    # 正常显示负号

二、效果展示

三、完整代码

# -*- coding: utf-8 -*-
# 安装所需模块 
# pip install matplotlib
# pip install numpy
'''Python绘制八种可视化常用的图表'''
import numpy as np
import matplotlib.pyplot as plt
import random
from mpl_toolkits.mplot3d import Axes3D
'''折线图绘制'''
x_data = ['职场','美食','摄影','情感','艺术','影视','穿搭','绘画','搞笑','游戏','动漫','音乐']
x = np.linspace(1, 2, 100)
for i in range(len(x_data)):
	plt.plot(x, x**(i+1), label=x_data[i])
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# 设置x轴标签名
plt.xlabel('笔记分类')
# 设置y轴标签名
plt.ylabel('关注度')
# 设置图片名称
plt.title("折线图绘制")
plt.legend()
plt.show()
''' 柱形图绘制 '''
x_data = ['职场','美食','摄影','情感','艺术','影视','穿搭','绘画','搞笑','游戏','动漫','音乐']
y_data = [963,344,107,236,587,312,1263,963,105,453,363,163]
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
for i in range(len(x_data)):
    plt.bar(x_data[i], y_data[i])
    plt.text(x_data[i], y_data[i], y_data[i], ha="center", va="bottom", fontsize=12)
# 设置图片名称
plt.title("柱形图绘制")
# 设置x轴标签名
plt.xlabel("笔记分类")
# 设置y轴标签名
plt.ylabel("关注度")
plt.show()
''' 并列柱状图绘制 '''
size = 5
# 返回size个0-1的随机数
a = np.random.random(size)
b = np.random.random(size)
c = np.random.random(size)
# x轴坐标, size=5, 返回[0, 1, 2, 3, 4]
x = np.arange(size)
# 有a/b/c三种类型的数据,n设置为3
total_width, n = 0.8, 3
# 每种类型的柱状图宽度
width = total_width / n
# 重新设置x轴的坐标
x = x - (total_width - width) / 2
# 画柱状图
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
plt.bar(x, a, width=width, label="a")
plt.bar(x + width, b, width=width, label="b")
plt.bar(x + 2*width, c, width=width, label="c")
# 功能1
x_labels = ["第1组", "第2组", "第3组", "第4组", "第5组"]
# 用第1组...替换横坐标x的值
plt.xticks(x, x_labels)
# 功能2
for i, j in zip(x, a):
    plt.text(i, j + 0.01, "%.2f" % j, ha="center", va="bottom", fontsize=12)
for i, j in zip(x + width, b):
    plt.text(i, j + 0.01, "%.2f" % j, ha="center", va="bottom", fontsize=12)
for i, j in zip(x + 2 * width, c):
    plt.text(i, j + 0.01, "%.2f" % j, ha="center", va="bottom", fontsize=12)
# 显示图例
plt.legend()
# 显示柱状图
plt.title("并列柱状图绘制")
plt.show()
''' 饼图绘制 '''
x_data = ['职场','美食','摄影','情感','艺术','影视','穿搭','绘画','搞笑','游戏','动漫','音乐']
y_data = [963,344,107,236,587,312,1263,963,105,453,363,163]
explode = [0, 0, 0, 0, 0, 0, 0.1, 0, 0, 0, 0, 0]
# 设置图片名称
plt.title('饼图绘制')
# 画饼图方法
plt.pie(y_data,explode=explode,labels=x_data,shadow=True,autopct='%1.1f%%')
# 显示
plt.show()
'''直方图绘制'''
np.random.seed(19680801)
mu1, sigma1 = 100, 15
mu2, sigma2 = 80, 15
x1 = mu1 + sigma1 * np.random.randn(10000)
x2 = mu2 + sigma2 * np.random.randn(10000)
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# density:是密度而不是具体数值
n1, bins1, patches1 = plt.hist(x1, 50, density=True, facecolor='g', alpha=1)
n2, bins2, patches2 = plt.hist(x2, 50, density=True, facecolor='r', alpha=0.2)
plt.xlabel('X')
# 设置y轴标签名
plt.ylabel('Y')
# 设置图片名称
plt.title("直方图绘制")
plt.text(110, .025, r'$\mu=100,\ \sigma=15$')
plt.text(50, .025, r'$\mu=80,\ \sigma=15$')
# 设置x,y轴的具体范围
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()
'''极轴饼图绘制'''
np.random.seed(19680801)
N = 10
theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False)
radii = 10 * np.random.rand(N)
width = np.pi / 4 * np.random.rand(N)
ax = plt.subplot(111, projection='polar')
bars = ax.bar(theta, radii, width=width, bottom=0.0)
# left表示从哪开始,
# radii表示从中心点向边缘绘制的长度(半径)
# width表示末端的弧长
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# 自定义颜色和不透明度
for r, bar in zip(radii, bars):
    bar.set_facecolor(plt.cm.viridis(r / 10.))
    bar.set_alpha(0.5)
# 设置图片名称
plt.title("极轴饼图绘制")
plt.show()
'''三维散点图绘制'''
data = np.random.randint(0, 255, size=[40, 40, 40])
x, y, z = data[0], data[1], data[2]
ax = plt.subplot(111, projection='3d')  # 创建一个三维的绘图工程
#  将数据点分成三部分画,在颜色上有区分度
ax.scatter(x[:10], y[:10], z[:10], c='y')  # 绘制数据点
ax.scatter(x[10:20], y[10:20], z[10:20], c='r')
ax.scatter(x[30:40], y[30:40], z[30:40], c='g')
ax.set_zlabel('Z')  # 坐标轴
ax.set_ylabel('Y')
ax.set_xlabel('X')
plt.title("三维散点图绘制")
plt.show()
'''三维平面图绘制'''
fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# 具体函数方法可用 help(function) 查看,如:help(ax.plot_surface)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow')
plt.title("三维平面图绘制")
plt.show()

四、总结与建议

本文通过8个实例,覆盖了Matplotlib中最常用的图表类型。您可以根据实际数据特征选择合适图表:

图表类型适用场景
折线图趋势变化
柱形图数值对比
并列柱状图多组对比
饼图占比分布
直方图频率分布
极轴饼图环形/角度数据
三维散点图三维聚类
三维曲面图数学函数/地形可视化

以上就是Python中八种常用的可视化图表绘制完整代码的详细内容,更多关于Python可视化图表的资料请关注脚本之家其它相关文章!

相关文章

  • 零基础小白多久能学会python

    零基础小白多久能学会python

    在本篇文章里小编给大家分享的是一篇关于零基础学python要多久的相关文章内容,有兴趣的朋友们可以跟着学习下。
    2020-06-06
  • Python和Anaconda的版本对应关系

    Python和Anaconda的版本对应关系

    这篇文章主要为大家介绍了Python和Anaconda,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Python 列表去重去除空字符的例子

    Python 列表去重去除空字符的例子

    今天小编就为大家分享一篇Python 列表去重去除空字符的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python range与enumerate函数区别解析

    Python range与enumerate函数区别解析

    这篇文章主要介绍了Python range与enumerate函数区别解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Selenium 三种等待方式(强制等待、隐式等待、显示等待)

    Selenium 三种等待方式(强制等待、隐式等待、显示等待)

    这篇文章主要介绍了Selenium 三种等待方式(强制等待、隐式等待、显示等待),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 100 个 Python 小例子(练习题二)

    100 个 Python 小例子(练习题二)

    这篇文章主要继续上一篇文章100 个 Python 小例子(练习题一)来完成100 个 Python 小例子,本文包括字母识词、反向输出II、表转字符串、设置输出颜色、算素数等例子,需要的朋友可以参考一下
    2021-10-10
  • 使用Python实现保存剪贴板中的图像

    使用Python实现保存剪贴板中的图像

    这篇文章主要为大家详细介绍了如何使用Python创建一个简单的GUI应用程序,实现保存剪贴板中的图像功能,文中的示例代码讲解详细,需要的可以参考下
    2023-09-09
  • Python中字符串转换为数字类型的注意事项及示例代码

    Python中字符串转换为数字类型的注意事项及示例代码

    在Python编程中,字符串与数字类型的相互转换是日常开发中最基础的操作之一,本文将深入探讨Python中字符串转数字的注意事项,通过真实代码示例、实用技巧和关键警告,帮助你避开这些坑,需要的朋友可以参考下
    2026-04-04
  • Python实现图像处理ORB算法

    Python实现图像处理ORB算法

    ORB(Oriented FAST and Rotated BRIEF)算法是一种高效的特征检测和描述符,它在图像匹配中有广泛的应用,下面我们就来了解一下ORB算法的原理与实现吧
    2023-12-12
  • Python实现正整数分解质因数操作示例

    Python实现正整数分解质因数操作示例

    这篇文章主要介绍了Python实现正整数分解质因数操作,结合实例形式分析了Python循环与递归两种操作方法实现分解质因数功能的相关操作技巧,需要的朋友可以参考下
    2018-08-08

最新评论