人口、人口密度分析项目-条形图

(一)需求:

1、需求一:绘制各个省、城市的人口条形图,依次递减排列;

2、需求二:绘制各个省、城市的人口密度条形图,依次递减排序。

(二)实现:

1、准备好数据

(1)省、城市的名称;

(2)省、城市的人口;

(3)省、城市的面积,用于计算人口密度。

2、建表、导入数据

tb_populations.sql

/*
Navicat MySQL Data Transfer

Source Server         : win7_local
Source Server Version : 50717
Source Host           : localhost:3306
Source Database       : analyze

Target Server Type    : MYSQL
Target Server Version : 50717
File Encoding         : 65001

Date: 2018-11-08 19:43:24
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for tb_populations
-- ----------------------------
DROP TABLE IF EXISTS `tb_populations`;
CREATE TABLE `tb_populations` (
  `id` int(11) NOT NULL,
  `province_name` varchar(30) DEFAULT NULL,
  `province_population` int(11) DEFAULT NULL,
  `area_wanpfkm` float DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of tb_populations
-- ----------------------------
INSERT INTO `tb_populations` VALUES ('1', '北京', '19612368', '1.68');
INSERT INTO `tb_populations` VALUES ('2', '天津', '12938693', '1.1');
INSERT INTO `tb_populations` VALUES ('3', '河北', '71854210', '19');
INSERT INTO `tb_populations` VALUES ('4', '山西', '35712101', '15');
INSERT INTO `tb_populations` VALUES ('5', '内蒙古', '24706291', '110');
INSERT INTO `tb_populations` VALUES ('6', '辽宁', '43746323', '15');
INSERT INTO `tb_populations` VALUES ('7', '吉林', '27452815', '18');
INSERT INTO `tb_populations` VALUES ('8', '黑龙江', '38313991', '46');
INSERT INTO `tb_populations` VALUES ('9', '上海', '23019196', '0.58');
INSERT INTO `tb_populations` VALUES ('10', '江苏', '78660941', '10');
INSERT INTO `tb_populations` VALUES ('11', '浙江', '54426891', '10');
INSERT INTO `tb_populations` VALUES ('12', '安徽', '59500468', '13');
INSERT INTO `tb_populations` VALUES ('13', '福建', '36894217', '12');
INSERT INTO `tb_populations` VALUES ('14', '江西', '44567797', '16');
INSERT INTO `tb_populations` VALUES ('15', '山东', '95792719', '15');
INSERT INTO `tb_populations` VALUES ('16', '河南', '94029939', '16');
INSERT INTO `tb_populations` VALUES ('17', '湖北', '57237727', '18');
INSERT INTO `tb_populations` VALUES ('18', '湖南', '65700762', '21');
INSERT INTO `tb_populations` VALUES ('19', '广东', '104320459', '18');
INSERT INTO `tb_populations` VALUES ('20', '广西', '46023761', '23');
INSERT INTO `tb_populations` VALUES ('21', '海南', '8671485', '3.4');
INSERT INTO `tb_populations` VALUES ('22', '重庆', '28846170', '8.23');
INSERT INTO `tb_populations` VALUES ('23', '四川', '80417528', '48');
INSERT INTO `tb_populations` VALUES ('24', '贵州', '34748556', '17');
INSERT INTO `tb_populations` VALUES ('25', '云南', '45966766', '38');
INSERT INTO `tb_populations` VALUES ('26', '西藏', '3002165', '120');
INSERT INTO `tb_populations` VALUES ('27', '陕西', '37327379', '19');
INSERT INTO `tb_populations` VALUES ('28', '甘肃', '25575263', '39');
INSERT INTO `tb_populations` VALUES ('29', '青海', '5626723', '72');
INSERT INTO `tb_populations` VALUES ('30', '宁夏', '6301350', '6.6');
INSERT INTO `tb_populations` VALUES ('31', '新疆', '21815815', '160');
INSERT INTO `tb_populations` VALUES ('32', '成都', '16040000', '1.46');
INSERT INTO `tb_populations` VALUES ('33', '武汉', '10910000', '0.85');
INSERT INTO `tb_populations` VALUES ('34', '广州', '14490000', '0.74');
INSERT INTO `tb_populations` VALUES ('35', '深圳', '12520000', '0.2');

  

3、编写代码。

(1)实现:需求一

01-matplotlib-renkou.py

import pymysql
import matplotlib.pyplot as plt
import matplotlib  # 载入matplotlib完整库

matplotlib.rcParams['font.family'] = 'Microsoft Yahei'  # 字体,改为微软雅黑,默认 sans-serif
matplotlib.rcParams['font.size'] = 18  # 字体大小,整数字号,默认10

# 连接数据库
conn = pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    passwd='root',
    db='analyze',
    charset='utf8'
)

# 创建游标
cur = conn.cursor()

# 获取数据
sql_1 = "select * from tb_populations"
ret_num1 = cur.execute(sql_1)  # 生成查询sql语句,并且执行。ret_num表示受影响的记录条数
pro_data = cur.fetchall()  # 获取查询结果

# 按照count_id 降序排列
list1 = list(pro_data)
list2 = sorted(list1, key=lambda p: p[2], reverse=True)

# 获取数据
province_name = [p[1] for p in list2]
province_population = [p[2] for p in list2]

print(province_name)
print(province_population)

# 绘图

# 设置x,y
x = [i for i in range(len(province_name))]
y = province_population

plt.figure(figsize=(20, 10), dpi=80)
plt.bar(
    x,
    y,
    width=0.5,
    color='r'
)

# 设置x轴刻度
_xticks_labels = [str(index + 1) + " " + value for index, value in enumerate(province_name)]
plt.xticks(x, _xticks_labels, rotation=40, fontsize=12)

# 设置网格
plt.grid()

# 设置文字
plt.title("中国各个省份人口数量统计2010年第6次人口普查       数据来源:国家统计局")
plt.xlabel("省/直辖市", color='b')
plt.ylabel("人口数(亿)", color='black')

plt.show()

  

输出:

(2)实现:需求二

02-matplotlib-renkou_per_pfkm.py

import pymysql
import matplotlib.pyplot as plt
import matplotlib  # 载入matplotlib完整库

matplotlib.rcParams['font.family'] = 'Microsoft Yahei'  # 字体,改为微软雅黑,默认 sans-serif
matplotlib.rcParams['font.size'] = 18  # 字体大小,整数字号,默认10

# 连接数据库
conn = pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    passwd='root',
    db='analyze',
    charset='utf8'
)

# 创建游标
cur = conn.cursor()

# 获取数据
sql_1 = "select * from tb_populations"
ret_num1 = cur.execute(sql_1)  # 生成查询sql语句,并且执行。ret_num表示受影响的记录条数
pro_data = cur.fetchall()  # 获取查询结果

#  按照 polulation_per_pfkm
#  获取数据
province_name = [p[1] for p in pro_data]  # 省份、城市名称
polulation_per_pfkm = [int(p[2] / p[3]) for p in pro_data]  # 人口密度(人口/平方千米)

# 重组数据,排序
list1 = list(map(lambda a, b: (a, b), province_name, polulation_per_pfkm))
list2 = sorted(list1, key=lambda p: p[1], reverse=True)
province_name = [p[0] for p in list2]
polulation_per_pfkm = [p[1] for p in list2]
print(province_name)
print(polulation_per_pfkm)

# 绘图

# 设置x,y
x = [i for i in range(len(province_name))]
y = polulation_per_pfkm

plt.figure(figsize=(20, 10), dpi=80)
plt.bar(
    x,
    y,
    width=0.5,
    color='r'
)

# 设置x轴刻度
_xticks_labels = [str(index + 1) + " " + value for index, value in enumerate(province_name)]
plt.xticks(x, _xticks_labels, rotation=40, fontsize=12)


# 设置网格
plt.grid()

# 设置文字
plt.title("中国各个省份人口密度统计2010年第6次人口普查       数据来源:国家统计局、百度知道")
plt.xlabel("省/直辖市/城市", color='b')
plt.ylabel("人口密度(千万人/平方千米)", color='black')

plt.show()

  

输出:

原文地址:https://www.cnblogs.com/andy9468/p/9931496.html