数据可视化的库
不仅可以绘制 2-D图,也可以绘制 3-D图
# 导包
import matplotlib.pyplot as plt
绘图三部曲:
函数名称 | 函数作用 |
---|---|
plt.figure | 创建一个空白画布,可以指定画布大小,像素。 |
figure.add_subplot | 创建并选中子图,可以指定子图的行数、列数、与选中图片编号。 |
函数名称 | 函数作用 |
---|---|
plt.title | 给当前图形添加标题 |
plt.xlabel | 添加 x 轴名称 |
plt.ylabel | 添加 y 轴名称 |
plt.xlim | 指定当前图形 x 轴的范围,只能确定一个数值区间,而无法使用字符串标识 |
plt.ylim | 指定当前图形 y 轴的范围,只能确定一个数值区间,而无法使用字符串标识 |
plt.xticks | 指定 x 轴刻度的数目与取值,可以使用字符串进行标识 |
plt.yticks | 指定 y 轴刻度的数目与取值,可以使用字符串进行标识 |
plt.legend | 增加图例,可以指定图例的位置 loc |
plt.text | 标注具体数值 |
函数名称 | 函数作用 |
---|---|
plt.savefig | 保存绘制的图片,在图形修饰完之后,图形展示之前 |
plt.show | 图形展示 |
# 设置RC参数,使其支持中文
plt.rcParams['font.sans-serif']='SimHei'
# 设置RC参数,使其支持负号
plt.rcParams['axes.unicode_minus']=False
rc 参数名称 | 解释 |
---|---|
color | 线条的颜色 |
linestyle | 线条的样式 |
linewidth | 线条的宽度 |
marker | 点的形状 |
markersize | 点的大小 |
markerfacecolor | 点的填充颜色 |
markeredgecolor | 点的边缘颜色 |
linestyle取值 | 意义 | linestyle取值 | 意义 |
---|---|---|---|
- | 实线 | -. | 点线 |
– | 长虚线 | : | 短虚线 |
marker取值 | 意义 | marker取值 | 意义 |
---|---|---|---|
“o” | 圆圈 | “.” | 点 |
“D” | 菱形 | “s” | 正方形 |
“h” | 六边形1 | “*” | 星号 |
“H” | 六边形2 | “d” | 小菱形 |
“-” | 水平线 | “v” | 一角朝下的三角形 |
“8” | 八边形 | “<” | 一角朝左的三角形 |
“p” | 五边形 | “>” | 一角朝右的三角形 |
“,” | 像素 | “^” | 一角朝上的三角形 |
“+” | 加号 | "\ " | 竖线 |
“None” | 无 | “x” | X |
如果想要参考更多线条样式、颜色,请访问:
https://www.cnblogs.com/darkknightzh/p/6117528.html
matplotlib.pyplot.plot(*args,**kwargs)
plot 函数在官方文档的语法中只要求填入不定长参数,实际可以填入的参数主要如下:
参数名称 | 说明 |
---|---|
x,y | 接收 array。表示 x 轴和 y 轴对应的数据。 |
color | 接收特定 string。指定线条的颜色 |
linestyle | 接收特定 string。指定线条类型。默认为”-“。 |
marker | 接收特定 string。表示绘制的点的形状。 |
alpha | 接收 0-1的小数。表示点的透明度。 |
颜色缩写 | 代表的颜色 | 颜色缩写 | 代表的颜色 |
---|---|---|---|
b | 蓝色 | m | 品红 |
g | 绿色 | y | 黄色 |
r | 红色 | k | 黑色 |
c | 青色 | w | 白色 |
案例一:
绘制下一周北京、广州天气温度走势图
import matplotlib.pyplot as plt
import numpy as np
# 1、创建画布
plt.figure()
# 修改RC参数,让其支持中文
plt.rcParams['font.sans-serif'] = 'SimHei'
# 再去修改RC参数,让其支持负号
plt.rcParams['axes.unicode_minus'] = False
# 2、绘图
## 构建x,y轴数据
x = np.arange(1, 8)
y1 = np.array([-10, -8, -6, -10, -12, -4, 2]) # 北京天气
y2 = np.array([26, 24, 22, 24, 25, 20, 18]) # 广州天气
## 绘制折线图
plt.plot(x, y1, color='r', linestyle=':', linewidth=1.2, marker="*", markersize=7, markerfacecolor='b', markeredgecolor='g')
plt.plot(x, y2, color='b', linestyle='-.', linewidth=1.2, marker="o", markersize=7, markerfacecolor='r', markeredgecolor='r')
## 图形修饰
## 1.增加标题
plt.title("下一周北京、广州天气温度走势图")
## 2.增加x轴名称
plt.xlabel("日期")
## 3.增加y轴名称
plt.ylabel("温度℃")
## 4.修改x轴刻度
# 用中文字符串替换序号
# 参数1 序号
# 参数2 中文字符串
xticks = ["周一","周二","周三","周四","周五","周六","周日"]
plt.xticks(x, xticks)
## 5.修改y轴刻度
# 如果只是修改数值的取值范围 ---重新设置刻度
# 参数 新的刻度
yticks = np.arange(-15, 31, 3)
plt.yticks(yticks)
## 6.增加图例
# loc --调整图例的位置
legend = ["北京","广州"]
plt.legend(legend, loc=0)
## 7.进行标注
for i,j in zip(x,y1):
# 参数1 标注的横坐标
# 参数2 标注的纵坐标
# 参数3 标注的内容
# horizontalalignment='center' --让标注水平居中
plt.text(i, j + 0.7, "%d℃" % j, horizontalalignment='center')
for i,j in zip(x,y2):
plt.text(i, j + 0.7, "%d℃" % j, horizontalalignment='center')
# 保存图片
plt.savefig("./下一周北京、广州天气温度走势.png")
# 3、图形展示
plt.show()
案例二:
加载 国民经济核算季度数据.npz
文件
链接:https://pan.baidu.com/s/1m3CcoWuCDsWZDRQWdzlzfg
提取码:c0gv
绘制 2000-2017各产业生产总值折线图.png
import matplotlib.pyplot as plt
import numpy as np
def build_data():
"""加载数据"""
res = np.load("./国民经济核算季度数据.npz", allow_pickle=True)
# for tmp in res:
# print(tmp)
columns = res['columns']
values = res['values']
return columns, values
def show_data(columns, values):
"""数据可视化"""
# 1、创建画布
plt.figure(figsize=(10, 8), dpi=100)
# 修改RC参数,让其支持中文
plt.rcParams['font.sans-serif'] = 'SimHei'
# 再去修改RC参数,让其支持负号
plt.rcParams['axes.unicode_minus'] = False
# 2、绘图
# 准备x轴和y轴数据
x = np.arange(1, values.shape[0] + 1)
# 第一产业总值
y1 = values[:, 3]
# 第二产业总值
y2 = values[:, 4]
# 第三产业总值
y3 = values[:, 5]
# 绘制折线图
# fmt = '[marker][line][color]'
plt.plot(x, y1, 's-b')
plt.plot(x, y2, 'o-.r')
plt.plot(x, y3, 'o--g')
# 图形修饰
# 增加标题
plt.title("2000-2017年各产业季度生产总值折线图")
# 增加y轴名称
plt.ylabel("生产总值(亿元)")
# 修改x轴刻度
# 用中文字符串替换序号
xticks = values[:, 1]
plt.xticks(x[::4], xticks[::4], rotation=45)
# 增加图例
legend = [tmp[:4] for tmp in columns[3:6]]
plt.legend(legend)
# 保存图片
plt.savefig("./2000-2017各产业生产总值折线图.png")
# 3、图形展示
plt.show()
def main():
# 1、加载数据
columns, values = build_data()
print("columns:\n", columns)
print("values:\n", values)
# 2、数据可视化
show_data(columns, values)
if __name__ == '__main__':
main()
结果展示:
那么我们如何在一个画布中,绘制多个图形呢?
fig.add_subplot(nrows, ncols, index)
fig.subplots_adjust(wspace,hspace)
绘制下图:
代码实现:
import matplotlib.pyplot as plt
import numpy as np
def build_data():
"""加载数据"""
res = np.load("./国民经济核算季度数据.npz", allow_pickle=True)
# for tmp in res:
# print(tmp)
columns = res['columns']
values = res['values']
return columns, values
def show_data(columns, values):
# 1、创建画布
# 返回一个画布对象
fig = plt.figure(figsize=(12, 10), dpi=100)
# 调整子图间距
# hspace ---上下子图的高度差
# wspace ---左右子图的宽度差
# 给定值为小数,意义为占 子图的占比
fig.subplots_adjust(hspace=0.3)
# 修改RC参数,让其支持中文
plt.rcParams['font.sans-serif'] = 'SimHei'
# 再去修改RC参数,让其支持负号
plt.rcParams['axes.unicode_minus'] = False
# 2、绘图
# 2行1列第一个子图
# 参数1 绘制的子图的行数
# 参数2 绘制子图的列数
# 参数3 第几个子图
fig.add_subplot(2, 1, 1)
# 准备x轴和y轴数据
x = np.arange(1, values.shape[0] + 1)
# 第一产业总值
y1 = values[:, 3]
# 第二产业总值
y2 = values[:, 4]
# 第三产业总值
y3 = values[:, 5]
# 绘制折线图
# fmt = '[marker][line][color]'
plt.plot(x, y1, 's-b')
plt.plot(x, y2, 'o-.r')
plt.plot(x, y3, 'o--g')
# 图形修饰
# 增加标题
plt.title("2000-2017年各产业季度生产总值折线图")
# 增加y轴名称
plt.ylabel("生产总值(亿元)")
# 修改x轴刻度
# 用中文字符串替换序号
xticks = values[:, 1]
plt.xticks(x[::4], xticks[::4], rotation=45)
# 增加图例
legend = [tmp[:4] for tmp in columns[3:6]]
plt.legend(legend)
# 绘制第2个子图
fig.add_subplot(2, 1, 2)
# 准备x轴和y轴数据
color_list = ['k','g','b','yellow','lime','m','c','peru','orangered']
num = 0
for i in range(6, 15):
y = values[:, i]
plt.plot(x, y, '%s' % color_list[num])
num += 1
# y1 = values[:, 6]
# y2 = values[:, 7]
# y3 = values[:, 8]
# y4 = values[:, 9]
# y5 = values[:, 10]
# y6 = values[:, 11]
# y7 = values[:, 12]
# y8 = values[:, 13]
# y9 = values[:, 14]
# # 绘制图形
# plt.plot(x, y1)
# plt.plot(x, y2)
# plt.plot(x, y3)
# plt.plot(x, y4)
# plt.plot(x, y5)
# plt.plot(x, y6)
# plt.plot(x, y7)
# plt.plot(x, y8)
# plt.plot(x, y9)
# y = values[:, 6:]
# # 绘制图形
# # 折线图绘制的时候,每一个x,拿出一列又一列分别的去绘制折线图
# plt.plot(x, y)
# 增加x轴名称
plt.xlabel("年份")
# 增加y轴名称
plt.ylabel("生产总值(亿元)")
# 修改x轴刻度
# 用中文字符串替换序号
xticks = values[:, 1]
plt.xticks(x[::4], xticks[::4], rotation=45)
# 增加图例
legend = [tmp[:2] for tmp in columns[6:]]
plt.legend(legend)
# 保存图片
plt.savefig("./2000-2017各产业、行业生产总值折线图.png")
# 3、图形展示
plt.show()
def main():
# 1、加载数据
columns, values = build_data()
print("columns:\n", columns)
print("values:\n", values)
# 2、数据可视化
show_data(columns, values)
# 3、结论
# xxxxxxxxx
if __name__ == '__main__':
main()
查看数据的发展趋势、变化、走势
如:游戏的在线人数在每天不同的时间段的变化趋势
如:某公司上线的产品在不同的时间段的人数变化
matplotlib.pyplot.scatter(x, y, s, c, marker)
常用参数及说明如下表所示:
参数名称 | 说明 |
---|---|
x , y | 接收 array。表示 x轴和 y 轴对应的数据。 |
s | 指定点的大小,可以传单个大小,也可以传 array_like。 |
c | 指定点的颜色,可以传单个颜色,也可以传 array_like |
marker | 点的形状。只能传入单个形状,不能传入 array_like |
任务实现:
代码实现:
import matplotlib.pyplot as plt
import numpy as np
def build_data():
"""加载数据"""
res = np.load("./国民经济核算季度数据.npz", allow_pickle=True)
# for tmp in res:
# print(tmp)
columns = res['columns']
values = res['values']
return columns, values
def show_data(columns, values):
"""数据可视化"""
# 1、创建画布
plt.figure(figsize=(10, 8), dpi=100)
# 修改RC参数,让其支持中文
plt.rcParams['font.sans-serif'] = 'SimHei'
# 再去修改RC参数,让其支持负号
plt.rcParams['axes.unicode_minus'] = False
# 2、绘图
# 构建横纵坐标数据
x = np.arange(values.shape[0])
y1 = values[:,3]
y2 = values[:,4]
y3 = values[:,5]
# 绘制散点图
plt.scatter(x, y1, c='r', marker="o")
plt.scatter(x, y2, c='b', marker='s')
plt.scatter(x, y3, c='yellow', marker='v')
# 图形修饰
plt.title("2000-2017年各产业季度生产总值散点图")
plt.ylabel("生产总值(亿元)")
xticks = values[:,1]
plt.xticks(x[::4], xticks[::4], rotation=45)
legend = [tmp[:4] for tmp in columns[3:6]]
plt.legend(legend)
# 保存图片
plt.savefig("./2000-2017年各产业季度生产总值散点图.png")
# 3、图形展示
plt.show()
def main():
# 1、加载数据
columns, values = build_data()
print("columns:\n", columns)
print("values:\n", values)
# 2、数据可视化
show_data(columns, values)
# 3、结论
if __name__ == '__main__':
main()
直方图:
柱状图:
plt.bar(left, height, width=0.8,color)
常用参数及说明如下表所示:
参数名称 | 说明 |
---|---|
left | 接收 array。表示 x 轴数据。 |
height | 接收 array。表示 x 所代表数据的数量。 |
width | 接收 0-1 之间的 float。指定直方图宽度。默认为 0.8. |
color | 接收特定 string 或者包含颜色字符串的 array。 表示直方图颜色。默认为 None。 |
任务实现:
代码实现:
import matplotlib.pyplot as plt
import numpy as np
def build_data():
"""加载数据"""
res = np.load("./国民经济核算季度数据.npz", allow_pickle=True)
columns = res['columns']
values = res['values']
return columns, values
def show_data(columns, values):
"""数据可视化"""
# 1、创建画布
plt.figure()
# 修改RC参数,让其支持中文
plt.rcParams['font.sans-serif'] = 'SimHei'
# 再去修改RC参数,让其支持负号
plt.rcParams['axes.unicode_minus'] = False
# 2、绘图
# 横轴--第一产业、第二产业、第三产业
x = np.arange(3)
# 纵轴--各个产业--在2000年的值
y = values[0,3:6] / 1000
# 绘制柱状图
# width ---柱子的宽度
# color--可以给定一个具体的颜色,也可以给一个颜色 array_like
plt.bar(x, y, width=0.3, color=['r', 'g', 'b'])
# 图形修饰
plt.title("2000年第一季度国民生产总值产业构成分布柱状图") # 增加标题
plt.xlabel("产业") # 横轴名称
plt.ylabel("生产总值(千亿元)") # 纵轴名称
# 修改横轴刻度
xticks = [tmp[:4] for tmp in columns[3:6]]
plt.xticks(x, xticks)
# 进行标注
for i,j in zip(x, y):
plt.text(i, j + 0.1, "%.2f千亿元" % j, horizontalalignment='center')
# 柱状图不需要增加图例
# 保存图片
plt.savefig("./2000年第一季度国民生产总值产业构成分布柱状图.png")
# 3、图形展示
plt.show()
def main():
# 1、加载数据
columns, values = build_data()
print("columns:\n", columns)
print("values:\n", values)
# 2、数据可视化
# 3、结论
if __name__ == '__main__':
main()
import matplotlib.pyplot as plt
import numpy as np
# 1、创建画布
plt.figure()
# 2、绘制图形
# 绘制某班同学身高分布情况 ---30位同学
high = np.random.uniform(low=140, high=190, size=30)
# print("high:\n", high)
# 将身高保留一位小数
high = np.array([float("%.1f" % i) for i in high])
print("high:\n", high)
# 绘制直方图
# 默认分组
# plt.hist(high, bins=5)
# 自定义分组
# bins = [140, 150, 160, 170, 180, 190]
# plt.hist(high, bins)
# 按照数据进行自定义等宽分组
# (1)确定分组个数
group_num = 5
# (2)确定每一组的步长
# 确定最大值
max_high = np.max(high)
# 确定最小值
min_high = np.min(high)
# 确定最大值与最小值的差距 ---极差
ptp = max_high - min_high
# 确定步长
step = np.ceil(ptp / group_num)
# (3)确定bins
bins = np.arange(min_high, max_high + step, step)
print("max_high:\n", max_high)
print("min_high:\n", min_high)
print("bins:\n", bins)
# 绘制直方图
plt.hist(high, bins=bins, color="b", edgecolor="k")
# 设置刻度
plt.xticks(bins)
yticks = np.arange(11)
plt.yticks(yticks)
# 不能标注
# 增加网格线
plt.grid(b=True, axis="y")
# 直方图不能增加图例
# 3、图形展示
plt.show()
结果展示:
饼图 ----将各部分全部绘制在同一个饼中,可以体现出各部分的占比。
import matplotlib.pyplot as plt
import numpy as np
def build_data():
"""加载数据"""
res = np.load("./国民经济核算季度数据.npz", allow_pickle=True)
columns = res['columns']
values = res['values']
return columns, values
def show_data():
"""数据可视化"""
# 1、创建画布
plt.figure()
# 2、绘制图形
# 构建绘制饼图的数据
x = values[-1, 3:6]
# explode ---表示各部分距离圆心的半径 ---也可以理解为 各部分之间的间隙
explode = (0.01, 0.02, 0.01) # 占半径的占比
# labels ---每一项的名称
labes = [tmp[:4] for tmp in columns[3:6]]
# colors --- 设置颜色
colors = ["r", "g", "b"]
# autopct ---用来显示各部分占比
autopct = "%.1f%%"
# pctdistance ---控制着标注的位置,默认为距离圆心0.6个半径的位置
pctdistance = 0.6
# labeldistance ---控制着名称的位置,默认为距离圆心1.1个半径的位置
labeldistance = 1.1
# radius ---表示饼图的半径
radius = 1.0
# 绘制饼图
plt.pie(x, explode=explode, labels=labels, colors=colors, autopct=autopct, pctdistance=pctdistance, labeldistance=labeldistance, radius=radius)
# 将饼图由椭圆 变为圆形
# 椭圆里面 有个长轴、短轴 ---> 长轴=短轴 --->圆
plt.axis('equal')
# 增加标题
plt.title("2017年各个产业的增加总值占比情况")
# 设置图例
plt.legend(labels)
# 保存图片
plt.savefig("./2017年各个产业的增加总值占比情况.png")
# 3、图形展示
plt.show()
def main():
# 1、加载数据
columns, values = build_data()
print("columns:\n", columns)
print("values:\n", values)
# 2、数据可视化
show_data(columns, values)
if __name__ == '__main__':
main()
结果展示:
箱线图 —利用最小值、下四分位数、中位数、上四分位数、最大值来进行描述数据。
应用场景:
import matplotlib.pyplot as plt
import numpy as np
def build_data():
"""加载数据"""
res = np.load("./国民经济核算季度数据.npz", allow_pickle=True)
columns = res['columns']
values = res['values']
return columns, values
def show_data(columns, values):
"""数据可视化"""
# 1、创建画布
plt.figure()
# 2、绘制图形
x = values[:,3:6]
# notch ---是否有缺口
# meanline=True, showmeans=True 同时使用,才能在箱线图上显示出均值
# vert=False ---绘制水平的箱子
# labels 名称
labels = [tmp[:4] for tmp in columns[3:6]]
# 绘制箱线图
plt.boxplot(x, notch=True, meanline=True, showmeans=True, labels=labels)
# 3、图形展示
plt.show()
def main():
# 1、加载数据
columns, values = build_data()
print("columns:\n", columns)
print("values:\n", values)
if __name__ == '__main__':
main()
结果实现: