python作业_北京市水资源数据可视化

python作业_北京市水资源数据可视化

问题描述

北京市政务数据资源网公布了北京市2001-2017年水资源情况数据。主要包括全年水资源总量、人均水资源、全年供水总量、全年用水总量、万元地区生产总值耗水量等数据。其中:
水资源总量 = 地表水资源量 + 地下水水资源量 - 重复计算水资源量
全年供水总量按来源分为地表水、地下水、再生水和南水北调水构成。再生水和南水北调水的数据有一定的缺失,需要对缺失值进行填充。
全年用水总量按用途分为农业用水、工业用水、生活用水、生态环境用水构成。

要求

  • 读取文件数据,文件编码为’GBK‘;

  • 数据预处理,再生水和南水北调水数据存在缺失值,请填充缺失值为0;

  • 添加子图1,绘制全年水资源量折线图;
    x轴刻度为年份,隔2年显示,45度斜显示
    y轴刻度为0至40,相隔5

  • 添加子图2,绘制人均水资源量散点图
    绘制点的类型为circle(‘o’),颜色为蓝色
    x轴刻度为年份,隔2年显示,45度斜显示
    y轴刻度为100至200,相隔10

  • 添加子图3,2017年用水饼图(农业用水、工业用水、生活用水、生态环境用水)
    设置饼图中各个饼之间的间距均为01,百分比显示格式为小数点后保留2位;

  • 添加子图4,2001-2017年万元地区生产总值耗水量柱状图
    柱状图各参数使用默认值;
    x轴刻度为年份,90度斜显示;
    y轴刻度为10至110,相隔20;

  • 使用plt.text方法在柱子上方添加具体数值显示,字体大小设置为7

  • 保存文件名为result.png,并通过附件上传 ;

代码

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
plt.rcParams["font.sans-serif"] = "SimHei"
plt.rcParams["axes.unicode_minus"] = False
df_water = pd.read_csv('2001-2017年北京市水资源情况信息.csv', encoding="GBK")
df_water = df_water.T
df_water.columns = pd.Series([i.replace(" ","") for i in list(df_water.iloc[0,:])])
df_water = df_water.iloc[1:,:]

d = {}
for i in list(df_water.columns):
    d[i]= "float"
df_water = df_water.astype(d)


#确定画布大小为8*8英寸,分辨率为100
fig = plt.figure(figsize=(12,12),dpi=100)  
#添加第一幅子图:全年水资源量、地表水资源量、地下水资源量
ax1 = fig.add_subplot(2,2,1)
plt.title("全年水资源量折线图")
plt.xlabel("年份")
plt.ylabel("亿立方米")
plt.plot(df_water.index, df_water.iloc[:,0], 'r-')
plt.plot(df_water.index, df_water.iloc[:,1], 'g--')
plt.plot(df_water.index, df_water.iloc[:,2], 'b:')
plt.xticks(range(0,18,2),np.array(df_water.index)[range(0,18,2)],rotation=45)
#x轴刻度为年份,隔2年显示,45度斜显示
plt.yticks([0,5,10,15,20,25,30,35,40])
#y轴刻度为0至40,相隔5
plt.legend(df_water.columns[0:3])

##添加第二幅子图:人均水资源(单位:立方米/人)
ax2 = fig.add_subplot(2,2,2)
plt.title("人均水资源量散点图")
plt.xlabel("年份")
plt.ylabel("立方米/人")
plt.scatter(df_water.index, df_water.iloc[:,3],marker='o', c="blue")
#绘制点的类型为circle('o'),颜色为蓝色
plt.xticks(range(0,18,2),np.array(df_water.index)[range(0,18,2)],rotation=45)
#x轴刻度为年份,隔2年显示,45度斜显示
plt.yticks([i for i in range(100,210,10)])   #列表的推导式
#y轴刻度为100至200,相隔10
plt.legend(["人均水资源(立方米/人)"])

##添加第三幅子图:2017年农业用水、工业用水、生活用水、生态环境用水饼图
ax3 = fig.add_subplot(2,2,3)
plt.title("2017年用水量饼图")
plt.pie(df_water.iloc[-1,10:14],explode=[0.01,0.01,0.01,0.01], labels=list(df_water.columns[10:14]), \
        autopct="%1.2f%%")  #绘制饼图
#设置饼图中各个饼之间的间距均为0.01,百分比显示格式为小数点后保留2位;

##添加第四幅子图:2001-2017年万元地区生产总值耗水量(立方米)
ax3 = fig.add_subplot(2,2,4)
x_data=df_water.index
y_data=df_water.iloc[:,-1]
plt.title("2001-2017年万元地区生产总值耗水量柱状图")
plt.bar(x_data, y_data)
plt.xticks(rotation=90)
plt.yticks([i for i in range(10,120,20)])   #列表的推导式
# 显示数据标签
for a,b in zip(x_data, y_data):
    plt.text(a,b,b,ha='center', va='bottom',fontsize=7)
plt.show()
#plt.savefig("result.png")

在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值