0%

matplotlib数据可视化

数据:国民经济核算季度数据.npz

在这里存一下我写的low代码。

分析1996-2015年人口数据特征间的关系

读取人口数据populations.npz。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS'] # 更换字体,针对mac用户
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号

font2 = {'family' : 'Songti SC',
'weight' : 'normal',
'size' : 20,}

# 读取人口数据populations.npz
populationData = np.load("populations.npz", allow_pickle=True)

'''
1、首先需要看一下这个文件的数组名都是什么
input: print(populationData.files) # 查看各个数组的名称
output: ['data', 'feature_names']
'''

data = populationData['data'][-3::-1,:] # 因为数据是倒序的,看着不舒服,倒序一下
name = populationData['feature_names']

绘制散点图或折线图了解6特征的变化趋势,显示并保存图表,给出简单结论。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def onePointTwo():
plt.figure(figsize=(7, 6))
plt.title('1996-2015年人口数据折线图', font2)
plt.xlabel('年份', font2)
plt.ylabel('人口(万人)', font2)
x = data[:, 0]
plt.xticks(np.arange(0, 20, 3), x[0:20:3], rotation=27, fontsize=15)
plt.yticks(fontsize=15)
boderParameter = plt.gca() # 获取当前的Axes
boderParameter.spines['right'].set_color('none')
boderParameter.spines['top'].set_color('none')
plt.plot(x, data[:, 1], marker='.', label='年末总人口')
plt.plot(x, data[:, 2], marker='*', label='男性人口')
plt.plot(x, data[:, 3], marker='x', label='女性人口')
plt.plot(x, data[:, 4], marker='^', label='城镇人口')
plt.plot(x, data[:, 5], marker='s', label='乡村人口')
plt.legend()
plt.grid(True) # 加上网格
# 不加 bbox_inches = 'tight' 图片可能会保存不完整
plt.savefig('1.png', bbox_inches='tight')
plt.show()

分析人口数据特征与时间的相关性,显示并保存图表,给出简单结论。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def onePointThree():
plt.figure(figsize=(7, 6))
plt.title('1996-2015年年末人口数据折线图', font2)
plt.xlabel('年份', font2)
plt.ylabel('人口(万人)', font2)
x = data[:, 0]
plt.xticks(np.arange(0, 20, 3), x[0:20:3], rotation=27, fontsize=15)
plt.yticks(fontsize=15)
boderParameter = plt.gca() # 获取当前的Axes
boderParameter.spines['right'].set_color('none')
boderParameter.spines['top'].set_color('none')
plt.plot(x, data[:, 1], color='r', marker='^', label='年末总人口')
plt.legend()
plt.grid(True) # 加上网格
# 不加 bbox_inches = 'tight' 图片可能会保存不完整
plt.savefig('2.png', bbox_inches='tight')
plt.show()

分析未来男女人口比例趋势,显示并保存图表,给出简单结论。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def onePointFour():
plt.figure(figsize=(7, 6))
plt.title('1996-2015年男女人口数据折线图', font2)
plt.xlabel('年份', font2)
plt.ylabel('人口(万人)', font2)
x = data[:, 0]
plt.xticks(np.arange(0, 20, 3), x[0:20:3], rotation=27, fontsize=15)
plt.yticks(fontsize=15)
boderParameter = plt.gca() # 获取当前的Axes
boderParameter.spines['right'].set_color('none')
boderParameter.spines['top'].set_color('none')
plt.plot(x, data[:, 2], color='r', marker='^', label='男性人口')
plt.plot(x, data[:, 3], color='g', marker='x', label='女性人口')
plt.legend()
plt.grid(True) # 加上网格
# 不加 bbox_inches = 'tight' 图片可能会保存不完整
plt.savefig('3.png', bbox_inches='tight')
plt.show()

分析城乡人口变化趋势,显示并保存图表,给出简单结论。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def onePointFive():
plt.figure(figsize=(7, 6))
plt.title('1996-2015年城乡人口数据折线图', font2)
plt.xlabel('年份', font2)
plt.ylabel('人口(万人)', font2)
x = data[:, 0]
plt.xticks(np.arange(0, 20, 3), x[0:20:3], rotation=27, fontsize=15)
plt.yticks(fontsize=15)
boderParameter = plt.gca() # 获取当前的Axes
boderParameter.spines['right'].set_color('none')
boderParameter.spines['top'].set_color('none')
plt.plot(x, data[:, 4], color='g', marker='x', label='城镇人口')
plt.plot(x, data[:, 5], color='r', marker='^', label='乡村人口')
plt.legend()
plt.grid(True) # 加上网格
# 不加 bbox_inches = 'tight' 图片可能会保存不完整
plt.savefig('4.png', bbox_inches='tight')
plt.show()

分析1996-2015年人口数据各特征的分布与分散情况

分析未来男女人口比例趋势,显示并保存图表,给出简单结论。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def twoPointOne():
plt.figure(figsize=(8,10))
plt.subplot(2, 1, 1)
plt.title('1996-2015年男女人口数据直方图', font2)
plt.xlabel('年份', fontsize=16)
plt.ylabel('人口(万人)', font2)
x = data[:, 0]
plt.xticks(np.arange(0, 60, 9), x[0:20:3], rotation=27, fontsize=15)
plt.yticks(fontsize=15)
boderParameter = plt.gca() # 获取当前的Axes
boderParameter.spines['right'].set_color('none')
boderParameter.spines['top'].set_color('none')
xx = np.arange(0, 60, 3)
plt.bar(xx, data[:, 2], label="男性", color='m')
plt.bar(xx + 1, data[:, 3], label="女性", color='g')
plt.legend()

plt.subplot(2, 1, 2)
plt.title('1996-2015年城乡人口数据直方图', font2)
plt.xlabel('年份', fontsize = 16)
plt.ylabel('人口(万人)', font2)
plt.xticks(np.arange(0, 60, 9), x[0:20:3], rotation=27, fontsize=15)
plt.yticks(fontsize=15)
boderParameter = plt.gca() # 获取当前的Axes
boderParameter.spines['right'].set_color('none')
boderParameter.spines['top'].set_color('none')
plt.bar(xx, data[:, 4], label="城镇", color='m')
plt.bar(xx + 1, data[:, 5], label="乡村", color='g')
plt.legend()
plt.show()

绘制男女比例和城乡比例饼图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def twoPointTwo():
label1 = ['男性人口', '女性人口']
label2 = ['城镇人口', '农村人口']
explode1 = [0.01, 0.01]
p = plt.figure(figsize=(20, 40))
for i in range(0, 20):
p.add_subplot(8, 5, i+1)
plt.title(str(1996+i) + '年男女人口比例饼图', fontsize=24)
patches, texts, autotexts = plt.pie(data[i, 2:4], explode=explode1, labels=label1, autopct='%1.1f%%')
proptease = fm.FontProperties()
proptease.set_size(20)
plt.setp(autotexts, fontproperties=proptease)
plt.setp(texts, fontproperties=proptease)
for i in range(0, 20):
p.add_subplot(8, 5, i+21)
plt.title(str(1996+i) + '年城乡人口比例饼图', fontsize=24)
patches, texts, autotexts = plt.pie(data[i, 4:6], explode=explode1, labels=label2, autopct='%1.1f%%')
proptease = fm.FontProperties()
proptease.set_size(20)
plt.setp(autotexts, fontproperties=proptease)
plt.setp(texts, fontproperties=proptease)
plt.show()

绘制6特征的箱线图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def twoPointThree():
plt.figure(figsize=(7, 6))
plt.title('1996-2015年人口数据6特征箱线图', font2)
plt.xlabel('人口特征', font2)
plt.ylabel('人口(万人)', font2)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
new_data = data
for i in range(0, 20):
new_data[:, 0][i] = int(data[:, 0][i][0:-1])
new_name = ['时间']
for i in name[1:]:
new_name.append(i[0:-4])
plt.boxplot([list(new_data[:,i]) for i in range(0, 6)], notch=True, labels=new_name, meanline=True)
plt.show()

分析人口结构变化、分析变化增速,给出结论。

如果对您有帮助,请我喝杯奶茶?