当前位置: 代码网 > it编程>前端脚本>Python > Python中八种常用的可视化图表绘制完整代码

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

2026年08月23日 Python 我要评论
前言数据可视化是数据分析中不可或缺的一环,而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可视化图表的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com