基础操作
基本绘图流程
- 创建画布与创建子图:
第一部分主要作用是构建出一张空白的画布,并可以选择是否将整个画布划分为多个部分,方便在同一幅图上绘制多个图形的情况。最简单的绘图可以省略第一部分,而后直接在默认的画布上进行图形绘制。 - 添加画布内容
第二部分是绘图的主体部分。其中添加标题,坐标轴名称,绘制图形等步骤是并列的,没有先后顺序,可以先绘制图形,也可以先添加各类标签。但是添加图例一定要在绘制图形之后。 - 存与展示图形
第三部分主要用于保存和显示图形。
导包
import matplotlib.pyplot as plt
1.figure 创建画布
创建空白画布,可以指定画布的大小、像素
F = plt.figure()
2.title 标题
plt.title("line")
3.xlabel、ylabel,x、y轴名称
plt.xlabel("x")
plt.ylabel("y")
4.xlim、ylim,x、y轴刻度范围
plt.xlim((0,1))
plt.ylim((0,1))
5.xticks,yticks,x、y轴刻度间距
plt.xticks(np.arange(0,1,0.1))
plt.yticks([0,0.2,0.4,0.6,0.8,1])
6. flot 绘制曲线
plot(x,y)绘制曲线
#例:绘制y = 2*x+1
x = np.linspace(-1,1,50)
y = 2*x+1
plt.plot(x,y)
7.savefig 保存成图片
plt.savefig("img1.png")
8.图例
plt.legend(["y=x^2","y=x^4"])
9.show 显示画布
plt.show()
实例
import matplotlib.pyplot as plt
import numpy as np
# #案例一、绘制y = 2*x+1
# x = np.linspace(-1,1,50)
# y = 2*x+1
#
# #创建空白画布,可以指定画布的大小、像素
# F = plt.figure()
# #创建并选中子视图,可以指定子视图的行数、列数,和选中图片的编号
# # F.add_subplot()
#
# #plot(x,y)绘制曲线
# plt.plot(x,y)
#
# #保存成图片
# plt.savefig("img/img1.png")
# #显示画布
# plt.show()
# 案例二、在同一画布中显示两条曲线
#y1 = x^2
#y2 = x^4
x = np.arange(0.1,1,0.01)
y1 = x**2
y2 = x**4
plt.figure()
#常用设置
#标题
plt.title("line")
#x、y轴名称
plt.xlabel("x")
plt.ylabel("y")
#x、y轴刻度范围
plt.xlim((0,1))
plt.ylim((0,1))
#刻度间距,接受一个列表
plt.xticks(np.arange(0,1,0.1))
plt.yticks([0,0.2,0.4,0.6,0.8,1])
plt.plot(x,y1)
plt.plot(x,y2)
#图例
plt.legend(["y=x^2","y=x^4"])
plt.savefig("img/img2.png")
plt.show()
子视图
格式
F.add_subplot(m,n,index) # m行n列第index幅图
本质是多个基础图像绘制过程的叠加,即在同一画布上不同子图上的绘制
确定画布的大小800x600,并设置dpi=80
F= plt.figure(figsize=(8,6),dpi=80)
创建并指定子视图(m,n,index),m行n列第index幅图
F.add_subplot(2,1,1)
实例
import numpy as np
import matplotlib.pyplot as plt
#创建子视图
#本质是多个基础图像绘制过程的叠加,即在同一画布上不同子图上的绘制
rad = np.arange(0,np.pi*2,0.01)
#第一组数据
y1 = rad**2
y2 = rad**4
#确定画布的大小800x600,并设置dpi=80
F= plt.figure(figsize=(8,6),dpi=80)
#创建并指定子视图(m,n,index),m行n列第index幅图
F.add_subplot(2,1,1)
#确定刻度范围
plt.xlim(0,1)
plt.ylim(0,1)
plt.plot(rad,y1)
plt.plot(rad,y2)
plt.legend(["y = x^2","y = x^4"])
#第二幅图
s = np.sin(rad)
c = np.cos(rad)
F.add_subplot(2,1,2)
# 刻度
plt.xticks([])
plt.plot(rad,s)
plt.plot(rad,c)
plt.legend(["sin","cos"])
plt.show()
rc参数
- pyplot 使用 rc 配置文件来自定义图形的各种默认属性,被称为 rc 配置或 rc 参数。
- 在 pyplot 中几乎所有的默认属性都是可以控制的,例如视图窗口大小以及每英寸点数、线条宽度、颜色和样式、坐标轴、坐标和网格属性、文本、字体等。
线条的常用 rc 参数名称、解释与取值:
常用线条类型解释
线条标记解释
注意事项:
- 由于默认的 pyplot 字体并不支持中文字符的显示,因此需要通过设置 font.sans-serif 参数改变绘图时的字体,使得图形可以正常显示中文。同时,由于更改字体后,会导致坐标轴中的部分字符无法显示,因此需要同时更改 axes.unicode_minus 参数。
- 除了设置线条和字体的 rc 参数外,还有设置文本、箱线图、坐标轴、刻度、图例、标记、图片、图像保存等 rc 参数。
显示中文
plt.rcParams["font.sans-serif"] = "SimHei"
设置正常显示符号,解决保存图像是"-"时显示方块
plt.rcParams["axes.unicode_minus"] = False
实例
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0.1,1,0.01)
y1 = x**2
y2 = x**4
#显示中文
plt.rcParams["font.sans-serif"] = "SimHei"
#设置正常显示符号,解决保存图像是"-"时显示方块
plt.rcParams["axes.unicode_minus"] = False
#创建画布
plt.figure()
#常用设置
#标题
plt.title("斗宗强者,恐怖如斯! ")
#x、y轴名称
plt.xlabel("x")
plt.ylabel("y")
#x、y轴刻度范围
plt.xlim((0,1))
plt.ylim((0,1))
#刻度间距,接受一个列表
plt.xticks(np.arange(0,1,0.1))
plt.yticks([0,0.2,0.4,0.6,0.8,1])
# rc参数
plt.plot(x,y1,color="blue",linewidth = 1.6,linestyle="-.")#"-","--","-.",":"
plt.plot(x,y2,color="red",linewidth = 1.6,linestyle="-.")
#图例
plt.legend(["y=x^2","y=x^4"])
#保存成图片
plt.savefig("img2.png")
#展示画布
plt.show()
特征间的关系
1.散点图–plt.scatter(x,y)
- 散点图(scatter diagram)又称为散点分布图,是以一个特征为横坐标,另一个特征为纵坐标,利用坐标点(散点)的分布形态反映特征间的统计关系的一种图形。
- 值是由点在图表中的位置表示,类别是由图表中的不同标记表示,通常用于比较跨类别的数据。
样式
格式
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, alpha=None, **kwargs)
def scatter(
x, y, s=None, c=None, marker=None, cmap=None, norm=None,
vmin=None, vmax=None, alpha=None, linewidths=None, verts=None,
edgecolors=None, *, data=None, **kwargs):
实例
import numpy as np
import matplotlib.pyplot as plt
#散点图:主要用于分析特征间的相关关系
#折线图:主要用于分析自变量和因变量特征间的趋势关系
# 通用设置
#显示中文
plt.rcParams["font.sans-serif"] = "SimHei"
#设置正常显示符号,解决保存图像是"-"时显示方块
plt.rcParams["axes.unicode_minus"] = False
#输出设置
# 强制打印整个数组
np.set_printoptions(threshold=1000000)
#数据加载
data = np.load("国民经济核算季度数据.npz")
content = data["columns"]
values = data["values"]
print(content)
print(values)
# 可视化
plt.figure(figsize=(8,7))
plt.xlabel("年份")
plt.ylabel("生产总值(亿元)")
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation="30")
#散点图
plt.scatter(values[:,0],values[:,2],marker="p")
plt.show()
2.折线图–plt.plot()
- 折线图(line chart)是一种将数据点按照顺序连接起来的图形。可以看作是将散点图,按照 x 轴坐标顺序连接起来的图形。
- 折线图的主要功能是查看因变量y随着自变量x改变的趋势,最适合用于显示随时间(根据常用比例设置)而变化的连续数据。同时还可以看出数量的差异,增长趋势的变化。
样式
格式
matplotlib.pyplot.plot(*args, **kwargs)
plot 函数在官方文档的语法中只要求填入不定长参数,实际可以填入的主要参数主要如下:
color 参数的 8 种常用颜色的缩写
实例
import numpy as np
import matplotlib.pyplot as plt
#通用设置
#显示中文
plt.rcParams["font.sans-serif"] = "SimHei"
#设置正常显示符号,解决保存图像是"-"时显示方块
plt.rcParams["axes.unicode_minus"] = False
#输出设置
# 强制打印整个数组
np.set_printoptions(threshold=1000000)
#数据加载
data = np.load("国民经济核算季度数据.npz")
content = data["columns"]
values = data["values"]
print(content)
print(values)
# 可视化
plt.figure(figsize=(8,7))
#标题
plt.title("各产业各季度生产值")
#x、y轴名称
plt.xlabel("年份")
plt.ylabel("生产值")
#折线图
plt.plot(values[:,0],values[:,2],marker = "o",linestyle = "--")
#横轴刻度
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation="30")
#图例
plt.legend(["第一产业增加值_当季值(亿元)","第二产业增加值_当季值(亿元)","第三产业增加值_当季值(亿元)"])
#显示
plt.show()
直方图–plt.hist()
- 直方图(Histogram)又称质量分布图,是统计报告图的一种,由一系列高度不等的纵向条纹或线段表示数据分布的情况,一般用横轴表示数据所属类别,纵轴表示数量或者占比。
- 用直方图可以比较直观地看出产品质量特性的分布状态,便于判断其总体质量分布情况。直方图可以发现分布表无法发现的数据模式、样本的频率分布和总体的分布。
样式
格式
matplotlib.pyplot.hist(left,height,width = 0.8,bottom = None,hold = None,data = None,** kwargs )
常用参数及说明如下表所示:
实例
import numpy as np
import matplotlib.pyplot as plt
#通用设置
#显示中文
plt.rcParams["font.sans-serif"] = "SimHei"
#设置正常显示符号,解决保存图像是"-"时显示方块
plt.rcParams["axes.unicode_minus"] = False
#输出设置
# 强制打印整个数组
np.set_printoptions(threshold=1000000)
#数据加载
data = np.load("国民经济核算季度数据.npz")
content = data["columns"]
values = data["values"]
print(content)
print(values)
# 刻度标签
label=["第一产业","第二产业","第三产业"]
value = values[-1,3:6]
# 可视化
plt.figure(figsize=(8,7))
plt.xticks(range(3),label)
#标题
plt.title("2017年第一季度各产业生产值对比")
#x、y轴名称
plt.xlabel("产业")
plt.ylabel("生产总值(亿元)")
#直方图
plt.hist(range(3),value,width=0.5)
#显示
plt.show()
饼状图–plt.pie()
- 饼图(Pie Graph)是将各项的大小与各项总和的比例显示在一张“饼”中,以“饼”的大小来确定每一项的占比。
- 饼图可以比较清楚地反映出部分与部分、部分与整体之间的比例关系,易于显示每组数据相对于总数的大小,而且显现方式直观。
样式
格式
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, … )
常用参数及说明如下表所示:
实例
import numpy as np
import matplotlib.pyplot as plt
#通用设置
#显示中文
plt.rcParams["font.sans-serif"] = "SimHei"
#设置正常显示符号,解决保存图像是"-"时显示方块
plt.rcParams["axes.unicode_minus"] = False
#输出设置
# 强制打印整个数组
np.set_printoptions(threshold=1000000)
#数据加载
data = np.load("国民经济核算季度数据.npz")
content = data["columns"]
values = data["values"]
print(content)
print(values)
#数据
value = values[-1,3:6]
labels=["第一产业","第二产业","第三产业"]
# 可视化
plt.figure(figsize=(8,7))
#标题
plt.title("2017年第一季度各产业生产值占比")
#饼状图
plt.pie(value,explode=[0.01,0.02,0.02],labels=labels,autopct="%.1f%%")
#显示
plt.show()
雷达图
代码及具体内容
import matplotlib.pyplot as plt
import numpy as np
# 显示中文
# 注意必须在差UN关键画布之前声明
plt.rcParams['font.sans-serif'] = 'SimHei'
# 设置正常显示符号,解决保存图像是符号’-‘显示方块
plt.rcParams['axes.unicode_minus'] = False
#将一个圆分为5份
dataLength = 5
#文字标签
labels = ["生存","输出","带线","发育","KDA"]
#角度范围,
angles = np.linspace(0,2*np.pi,dataLength,endpoint=False)
#数值
data= [10,6,9,5,7]
#闭合
new_data = np.concatenate((data,[data[0]]))
new_angles = np.concatenate((angles,[angles[0]]))
F= plt.figure()
#雷达图
plt.polar(new_angles,new_data)
plt.title("战绩评定")
#刻度
plt.xticks(new_angles,labels)
plt.show()
图片演示