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