matplotlib - 饼图、等高线图

ⅰ亾dé卋堺 提交于 2019-12-05 13:40:31


今天来学习一下画饼图和等高线图。

其实和之前我们画图的技巧是一样的,只是画饼图和画等高线图我们又用到了新的两种方法。

饼图:plt.pie()

等高线图:plt.contourfplt.contour

首先来介绍饼图

语法:plt.pie(值,间隙,标签,颜色,格式,shadow=是否带阴影,startangel=其实角度)

其实很简单。

代码:

#导入模块
import numpy as np
import matplotlib.pyplot as plt

#准备数据
values = [26, 17, 21, 29, 11]

#准备间距
spaces = [0.05, 0.01, 0.01, 0.01, 0.01]

#准备标签
labels = ['Python', 'JavaScript','C++', 'Java', 'PHP']

#每一个的标签的颜色
colors = ['dodgerblue', 'orangered','limegreen', 'violet', 'gold']

#创建图形窗口
plt.figure('Pie', facecolor='lightgray')

#标题
plt.title('Pie', fontsize=20)

#绘制饼图 shadow绘制阴影部分,startangle 设置起始角度
plt.pie(values, spaces, labels, colors, '%d%%',shadow=True, startangle=90)

#等轴比例
plt.axis('equal')

#保存
plt.savefig("路径")

效果图
效果图

接下来我们来绘制等高线图

等高线图分两种,一种是plt.contour,另一种是plt.contourf,那么这两种的区别是一个不存在颜色映射,一个可以做颜色映射

语法:
plt.contour(x,y,z,阶数,linewidths=线宽)
plt.contourf(x,y,z,阶数,cmp=颜色映射)
 

plt.contour

代码

#导入模块
from matplotlib import pyplot as plt
import numpy as np

#准备样本
n = 1000

#网格化  x,y都是一个二维矩阵
x,y = np.meshgrid(np.linspace(-3,3,n),np.linspace(-3,3,n))

#准备数据
z =(1 - x/2 + x**5 + y**3)*np.exp(-x**2 - y**2)

#创建图形窗口
plt.figure('Contour',facecolor="lightgray")

#设置标题,x轴信息,y轴信息
plt.title("Contour",fontsize=20)
plt.xlabel("x",fontsize=14)
plt.ylabel("y",fontsize=14)

#紧凑式布局
plt.tight_layout()

#绘制网格线
plt.grid(linestyle=":")

#绘制等高线图
cntr = plt.contour(x,y,z,8,colors='black',linewidths=0.5)

#为等高线图添加高度标签
plt.clabel(cntr,inline_spacing=1,fmt="%.1f",fontsize=10)

#保存
plt.savefig("路径")

效果图
等高线图
可以看到当前图形仅仅是画出了等高线,并没有做颜色填充来进行区别,如果想用颜色填充的话,需要加上plt.contouf()函数

plt.contourf

代码

from matplotlib import pyplot as plt
import numpy as np

n = 1000   # 1000个样本

#网格化
x,y = np.meshgrid(np.linspace(-3,3,n),
                  np.linspace(-3,3,n))

z =(1 - x/2 + x**5 + y**3)*np.exp(-x**2 - y**2)

plt.figure('Contour',facecolor="lightgray")

plt.title("Contour",fontsize=20)
plt.xlabel("x",fontsize=14)
plt.ylabel("y",fontsize=14)

#紧凑式布局
plt.tight_layout()

plt.grid(linestyle=":")

#绘制等高线图
plt.contourf(x,y,z,8,cmap='jet')
cntr = plt.contour(x,y,z,8,colors='black',linewidths=0.5)

#为等高线图添加高度标签
plt.clabel(cntr,inline_spacing=1,fmt="%.1f",fontsize=10)

#保存
plt.savefig("路径")

效果图
等高线有填充
效果有明显的差别,不过相较之前的代码,仅仅是加上了一句。
在这里插入图片描述

注意

注意:为确保颜色映射正常,在使用contourf之后,我们又接着使用了plt.contour来绘制我们的等高线,否则生成的图可能会存在瑕疵,如下图所示
有瑕疵
但是如果仅仅想生成等高线图,不需要颜色映射,那么就使用plt.contour便可以了。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!