06-案例:国民生产总值折线图案例
import numpy as np
import matplotlib.pyplot as plt
def build_data():
"""
加载数据
:return:columns, values
"""
res = np.load("./国民经济核算季度数据.npz")
# for tmp in res:
# print(tmp)
columns = res['columns']
values = res['values']
return columns, values
def show_data(columns, values):
"""
图形可视化
:param columns: 数据
:param values: 数据
:return: None
"""
# 1、创建画布
# figsize --画布大小 ---英寸---(宽,高)
# dpi --像素
plt.figure(figsize=(18, 12), dpi=200)
# 修改RC参数,让其支持中文
plt.rcParams['font.sans-serif'] = 'SimHei'
# 再去修改RC参数,让其支持负号
plt.rcParams['axes.unicode_minus'] = False
# 2、绘图
# 准备横轴、纵轴数据
x = np.arange(1, values.shape[0] + 1) # shape ---(行,列)
# print("x:\n", x)
# 第一产业增加总值
y1 = values[:, 3]
# 第二产业增加总值
y2 = values[:, 4]
# 第三产业增加总值
y3 = values[:, 5]
# print("y1:\n",y1)
# 绘制折线图
plt.plot(x, y1)
plt.plot(x, y2)
plt.plot(x, y3)
# 增加标题
plt.title("2000-2017年各个产业增加总值的变化趋势折线图")
# 增加横轴名称
plt.xlabel("时间")
# 增加纵轴名称
plt.ylabel("生产总值(亿元)")
# 构建legend
legend = [tmp[:4] for tmp in columns[3:6]]
# print(legend)
# 增加图例
plt.legend(legend)
# 进行修改横轴刻度
xticks = values[:, 1]
# rotation 旋转度数
plt.xticks(x[::4], xticks[::4], rotation=45)
# 保存图片
plt.savefig("./2000-2017年各个产业增加总值的变化趋势.png")
# 3、图形展示
plt.show()
def main():
"""
主函数
:return: None
"""
# 1、加载数据
columns, values = build_data()
print("columns:\n", columns)
print("values:\n", values)
# 2、数据可视化
show_data(columns, values)
# 3、结论
if __name__ == '__main__':
main()
07-子图绘制
import numpy as np
import matplotlib.pyplot as plt
def build_data():
"""
加载数据
:return:columns, values
"""
res = np.load("./国民经济核算季度数据.npz")
# for tmp in res:
# print(tmp)
columns = res['columns']
values = res['values']
return columns, values
def show_data(columns, values):
"""
图形可视化
:param columns: 数据
:param values: 数据
:return: None
"""
# 1、创建画布
# figsize --画布大小 ---英寸---(宽,高)
# dpi --像素
# 返回一个画布对象
fig = plt.figure(figsize=(18, 12), dpi=200)
# 调整子图间距
# wspace=None, hspace=None
# hspace --上下子图的高度差
# wspace ---左右子图的宽度差
# 给定值为小数,意义为占 子图的占比
fig.subplots_adjust(hspace=0.3)
# 修改RC参数,让其支持中文
plt.rcParams['font.sans-serif'] = 'SimHei'
# 再去修改RC参数,让其支持负号
plt.rcParams['axes.unicode_minus'] = False
# 参数1 --绘制的子图的行数
# 参数2 ----绘制子图的列数
# 参数3 ---第几个子图
fig.add_subplot(2, 1, 1)
# 2、绘图
# 准备横轴、纵轴数据
x = np.arange(1, values.shape[0] + 1) # shape ---(行,列)
# print("x:\n", x)
# 第一产业增加总值
y1 = values[:, 3]
# 第二产业增加总值
y2 = values[:, 4]
# 第三产业增加总值
y3 = values[:, 5]
# print("y1:\n",y1)
# 绘制折线图
plt.plot(x, y1)
plt.plot(x, y2)
plt.plot(x, y3)
# 增加标题
plt.title("2000-2017年各个产业、行业增加总值的变化趋势折线图")
# 增加横轴名称
plt.xlabel("时间")
# 增加纵轴名称
plt.ylabel("生产总值(亿元)")
# 构建legend
legend = [tmp[:4] for tmp in columns[3:6]]
# print(legend)
# 增加图例
plt.legend(legend)
# 进行修改横轴刻度
xticks = values[:, 1]
# rotation 旋转度数
plt.xticks(x[::4], xticks[::4], rotation=45)
# 绘制第2个子图
fig.add_subplot(2, 1, 2)
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)
# color_list = ['r','g',...]
# for i in range(6,15,1):
# y = values[:,i]
# plt.plot(x,y)
# 增加横轴名称
plt.xlabel("时间")
# 增加纵轴名称
plt.ylabel("生产总值(亿元)")
# 构建legend
legend = [tmp[:2] for tmp in columns[6:]]
# print(legend)
# 增加图例
plt.legend(legend)
# 进行修改横轴刻度
xticks = values[:, 1]
# rotation 旋转度数
plt.xticks(x[::4], xticks[::4], rotation=45)
# 保存图片
plt.savefig("./2000-2017年各个产业、行业增加总值的变化趋势.png")
# 3、图形展示
plt.show()
def main():
"""
主函数
:return: None
"""
# 1、加载数据
columns, values = build_data()
print("columns:\n", columns)
print("values:\n", values)
# 2、数据可视化
show_data(columns, values)
# 3、结论
if __name__ == '__main__':
main()
08-散点图绘制
import numpy as np
import matplotlib.pyplot as plt
def build_data():
"""
加载数据
:return:columns, values
"""
res = np.load("./国民经济核算季度数据.npz")
# for tmp in res:
# print(tmp)
columns = res['columns']
values = res['values']
return columns, values
def show_data(columns, values):
"""
图形可视化
:param columns: 数据
:param values: 数据
:return: None
"""
# 1、创建画布
# figsize --画布大小 ---英寸---(宽,高)
# dpi --像素
# 返回一个画布对象
fig = plt.figure(figsize=(18, 12), dpi=200)
# 调整子图间距
# wspace=None, hspace=None
# hspace --上下子图的高度差
# wspace ---左右子图的宽度差
# 给定值为小数,意义为占 子图的占比
fig.subplots_adjust(hspace=0.3)
# 修改RC参数,让其支持中文
plt.rcParams['font.sans-serif'] = 'SimHei'
# 再去修改RC参数,让其支持负号
plt.rcParams['axes.unicode_minus'] = False
# 参数1 --绘制的子图的行数
# 参数2 ----绘制子图的列数
# 参数3 ---第几个子图
fig.add_subplot(2, 1, 1)
# 2、绘图
# 准备横轴、纵轴数据
x = np.arange(1, values.shape[0] + 1) # shape ---(行,列)
# print("x:\n", x)
# 第一产业增加总值
y1 = values[:, 3]
# 第二产业增加总值
y2 = values[:, 4]
# 第三产业增加总值
y3 = values[:, 5]
# print("y1:\n",y1)
# 绘制折线图
plt.plot(x, y1)
plt.plot(x, y2)
plt.plot(x, y3)
# 增加标题
plt.title("2000-2017年各个产业、行业增加总值的变化趋势折线图")
# 增加横轴名称
plt.xlabel("时间")
# 增加纵轴名称
plt.ylabel("生产总值(亿元)")
# 构建legend
legend = [tmp[:4] for tmp in columns[3:6]]
# print(legend)
# 增加图例
plt.legend(legend)
# 进行修改横轴刻度
xticks = values[:, 1]
# rotation 旋转度数
plt.xticks(x[::4], xticks[::4], rotation=45)
# 绘制第2个子图
fig.add_subplot(2, 1, 2)
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)
# color_list = ['r','g',...]
# for i in range(6,15,1):
# y = values[:,i]
# plt.plot(x,y)
# 增加横轴名称
plt.xlabel("时间")
# 增加纵轴名称
plt.ylabel("生产总值(亿元)")
# 构建legend
legend = [tmp[:2] for tmp in columns[6:]]
# print(legend)
# 增加图例
plt.legend(legend)
# 进行修改横轴刻度
xticks = values[:, 1]
# rotation 旋转度数
plt.xticks(x[::4], xticks[::4], rotation=45)
# 保存图片
plt.savefig("./2000-2017年各个产业、行业增加总值的变化趋势.png")
# 3、图形展示
plt.show()
def main():
"""
主函数
:return: None
"""
# 1、加载数据
columns, values = build_data()
print("columns:\n", columns)
print("values:\n", values)
# 2、数据可视化
show_data(columns, values)
# 3、结论
if __name__ == '__main__':
main()
09-案例:国民生产总值散点图案例
import numpy as np
import matplotlib.pyplot as plt
def build_data():
"""
加载数据
:return:columns, values
"""
res = np.load("./国民经济核算季度数据.npz")
# for tmp in res:
# print(tmp)
columns = res['columns']
values = res['values']
return columns, values
def show_data(columns, values):
"""
图形可视化
:param columns: 数据
:param values: 数据
:return: None
"""
# 1、创建画布
# figsize --画布大小 ---英寸---(宽,高)
# dpi --像素
# 返回一个画布对象
fig = plt.figure(figsize=(18, 12), dpi=200)
# 调整子图间距
# wspace=None, hspace=None
# hspace --上下子图的高度差
# wspace ---左右子图的宽度差
# 给定值为小数,意义为占 子图的占比
fig.subplots_adjust(hspace=0.3)
# 修改RC参数,让其支持中文
plt.rcParams['font.sans-serif'] = 'SimHei'
# 再去修改RC参数,让其支持负号
plt.rcParams['axes.unicode_minus'] = False
# 参数1 --绘制的子图的行数
# 参数2 ----绘制子图的列数
# 参数3 ---第几个子图
fig.add_subplot(2, 1, 1)
# 2、绘图
# 准备横轴、纵轴数据
x = np.arange(1, values.shape[0] + 1) # shape ---(行,列)
# print("x:\n", x)
# 第一产业增加总值
y1 = values[:, 3]
# 第二产业增加总值
y2 = values[:, 4]
# 第三产业增加总值
y3 = values[:, 5]
# print("y1:\n",y1)
# 绘制散点图图
plt.scatter(x, y1)
plt.scatter(x, y2)
plt.scatter(x, y3)
# 增加标题
plt.title("2000-2017年各个产业、行业增加总值的变化趋势散点图")
# 增加横轴名称
plt.xlabel("时间")
# 增加纵轴名称
plt.ylabel("生产总值(亿元)")
# 构建legend
legend = [tmp[:4] for tmp in columns[3:6]]
# print(legend)
# 增加图例
plt.legend(legend)
# 进行修改横轴刻度
xticks = values[:, 1]
# rotation 旋转度数
plt.xticks(x[::4], xticks[::4], rotation=45)
# 绘制第2个子图
fig.add_subplot(2, 1, 2)
# 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.scatter(x, y1)
# plt.scatter(x, y2)
# plt.scatter(x, y3)
# plt.scatter(x, y4)
# plt.scatter(x, y5)
# plt.scatter(x, y6)
# plt.scatter(x, y7)
# plt.scatter(x, y8)
# plt.scatter(x, y9)
y = values[:,6:]
# # 绘制图形
# 绘制散点图的时候,x,y 的元素个数必须是一样的,那就是一一对应的
# plt.scatter(x,y) # 不能这么写,报错的
# color_list = ['r','g',...]
for i in range(6,15,1):
y = values[:,i]
plt.scatter(x,y)
# 增加横轴名称
plt.xlabel("时间")
# 增加纵轴名称
plt.ylabel("生产总值(亿元)")
# 构建legend
legend = [tmp[:2] for tmp in columns[6:]]
# print(legend)
# 增加图例
plt.legend(legend)
# 进行修改横轴刻度
xticks = values[:, 1]
# rotation 旋转度数
plt.xticks(x[::4], xticks[::4], rotation=45)
# 保存图片
plt.savefig("./2000-2017年各个产业、行业增加总值的变化趋势_散点图.png")
# 3、图形展示
plt.show()
def main():
"""
主函数
:return: None
"""
# 1、加载数据
columns, values = build_data()
print("columns:\n", columns)
print("values:\n", values)
# 2、数据可视化
show_data(columns, values)
# 3、结论
# xxxxxxxxxxx
if __name__ == '__main__':
main()
"""
散点图应用场景:
1、类似于折线图的这种散点图,可以用来观察数据的走势
2、一堆一堆的散点图的可以用来查看数据的紧密联系程度
3、也可以用来对比不同的类别---(一般不用)
"""
10-直方图与柱状图的区别
"""
直方图:
由紧密结合的多个柱子组成
横轴为数据的分布范围区间
纵轴为数据落在各个区间内的数量
一般用于查看数据的分布范围
应用于大量数据的场景
柱状图:
由多个分开的柱子组成
横轴一般为数据的各个类别
纵轴各个类别所对应的数量
一般用于各个类别之间的对比
一般用于少量数据类别的对比
"""
11-柱状图的绘制
import numpy as np
import matplotlib.pyplot as plt
def build_data():
"""
加载数据
:return:
"""
res = np.load("./国民经济核算季度数据.npz")
columns = res["columns"]
values = res["values"]
return columns, values
def show_data(columns, values):
"""
数据可视化
:param columns:数据
:param values: 数据
:return: None
"""
# 1、创建画布
plt.figure()
# 修改RC参数,让其支持中文
plt.rcParams['font.sans-serif'] = 'SimHei'
# 再去修改RC参数,让其支持负号
plt.rcParams['axes.unicode_minus'] = False
# 2、绘制柱状图
# 横轴---第一产业、第二产业、第三产业
# 纵轴--各个产业--在2000年的值
x = np.arange(3)
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():
"""
主函数
:return:
"""
# 1、加载数据
columns, values = build_data()
print("columns :\n", columns)
print("values :\n", values)
# 2、数据可视化
show_data(columns, values)
# 3、结论
if __name__ == '__main__':
main()
12-直方图绘制
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)
# 绘制直方图
# 默认分组---bins=5
# 自定义分组
# plt.hist(high, bins=5)
# bins = [140, 150, 160, 170, 180, 190]
# 按照数据进行自定义等宽分组
# (1)确定分组个数
group_num = 5
# (2) 确定每一组的步长
# 确定最大值
max_high = np.max(high, axis=0)
# 确定最小值
min_high = np.min(high, axis=0)
# 确定最大值与最小值的差距---极差
ptp = max_high - min_high
# 确定步长
step = int(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='r')
# 不能标注
# 增加网格线
plt.grid(b=True,axis='y')
# 设置刻度
plt.xticks(bins)
yticks = np.arange(11)
plt.yticks(yticks)
# 直方图不能标注图例
# 3、展示
plt.show()