day03课件代码(下午)

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()

发布了128 篇原创文章 · 获赞 24 · 访问量 4261

猜你喜欢

转载自blog.csdn.net/return_min/article/details/103896709
今日推荐