pyecharts是一款将python与echarts结合的强大的数据可视化工具,本文将为你展示基于pyecharts的2009-2017年中国水资源数据的可视化,将2009-2017年中国水资源总量(地表水、地下水资源量)、水资源供给结构(地表水、地下水、其他供给)、水资源利用结构(农业、工业、生活、生态)以及人均水资源量和人均用水量的整体情况、各省指标情况等多维数据、多时间尺度的可视化,感兴趣的可以通过下面的百度网盘链接下载HTML文件,通过浏览器在本地打开(需在联网状态),查看2009-2017年中国水资源整体情况及各省水资源情况。
感兴趣的可通过下面分享的百度网盘地址,下载 waterData.html 文件到本地,在联网的情况下用浏览器(推荐使用Google浏览器)打开即可查看中国水资源格局的可视化结果。
中国水资源格局HTML文件百度网盘下载地址:单击此处下载
提取码:bpse
序号 | 指标 | 图标类型 |
---|---|---|
1 | 中国水资源量(1个图) | 柱状图+折线图 |
2 | 中国供水结构(1个图) | 柱状图+折线图 |
3 | 中国人均水资源量、用水量(1个图) | 折线图 |
4 | 各省水资源空间分布(3个图) | 地图 VisualMap |
5 | 各省供水结构空间分布(4个图) | 地图 VisualMap |
6 | 各省用水结构空间分布(4个图) | 地图 VisualMap |
7 | 各省人均水资源量、用水量(2个图) | 地图 VisualMap |
感兴趣的可通过下面分享的百度网盘地址,下载 prosWater.html 文件到本地,在联网的情况下用浏览器(推荐使用Google浏览器)打开即可查看各省水资源的可视化结果。
各省水资源可视化HTML文件百度网盘下载地址:单击此处下载
提取码:h2gc
序号 | 指标 | 图标类型 |
---|---|---|
1 | 供水结构(1个图) | 饼图 |
2 | 用水结构(1个图) | 饼图 |
3 | 水资源总量(1个图) | 折线图 |
4 | 人均水资源量(1个图) | 折线图 |
5 | 用水总量(1个图) | 折线图 |
6 | 人均用水量(1个图) | 折线图 |
水资源的数据均来自国家统计局网站中资源和环境指标中。人均水资源量、人均用水量单位为:m³/人, 其他指标单位为:亿m³。
序号 | 指标 | 最大值 | 最小值 |
---|---|---|---|
1 | 水资源总量 | 西藏(4749.9) | 宁夏(10.8) |
2 | 地表水资源总量 | 西藏(4749.9) | 宁夏(8.7) |
3 | 地下水资源总量 | 西藏(1086) | 天津(5.5) |
4 | 用水总量 | 江苏(591.3) | 青海(25.8) |
5 | 地表水供给量 | 江苏(575.3) | 北京(12.4) |
6 | 地下水供给量 | 黑龙江(163.1) | 上海(0) |
7 | 其他供给量 | 北京(10.5) | 上海(0)、西藏(0) |
8 | 农业用水量 | 新疆(514.4) | 北京(5.1) |
9 | 工业用水量 | 江苏(250.1) | 西藏(1.5) |
10 | 生活用水量 | 广东(100.9) | 宁夏(2.3) |
11 | 生态用水量 | 内蒙(23.1) | 西藏(0.2) |
12 | 人均水资源量 | 西藏(142311.3) | 天津(83.36) |
13 | 人均用水量 | 新疆(2280.78) | 天津(176.33) |
该数据可视化主要利用了pyecharts中的Page()、Tab()、Map()、Bar()、Grid()等类型的图,以下是各类型图表的代码示例,感兴趣的可以去pyecharts网站查看pyecharts的说明文档,了解更详细的内容。
示例代码参考pyecharts网站。
# Page()顺序多图
from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Bar, Line, Page
def bar_base() -> Bar:
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values(), is_selected=False)
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))
)
return c
def line_base() -> Line:
c = (
Line()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title="Line-基本示例"))
)
return c
page = Page()
page.add(bar_base(), line_base())
page.render()
# Tab选项卡多图
from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Bar, Tab, Pie, Line
from pyecharts.components import Table
def bar_datazoom_slider() -> Bar:
c = (
Bar()
.add_xaxis(Faker.days_attrs)
.add_yaxis("商家A", Faker.days_values)
.set_global_opts(
title_opts=opts.TitleOpts(title="Bar-DataZoom(slider-水平)"),
datazoom_opts=[opts.DataZoomOpts()],
)
)
return c
def line_markpoint() -> Line:
c = (
Line()
.add_xaxis(Faker.choose())
.add_yaxis(
"商家A",
Faker.values(),
markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="min")]),
)
.add_yaxis(
"商家B",
Faker.values(),
markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max")]),
)
.set_global_opts(title_opts=opts.TitleOpts(title="Line-MarkPoint"))
)
return c
def pie_rosetype() -> Pie:
v = Faker.choose()
c = (
Pie()
.add(
"",
[list(z) for z in zip(v, Faker.values())],
radius=["30%", "75%"],
center=["25%", "50%"],
rosetype="radius",
label_opts=opts.LabelOpts(is_show=False),
)
.add(
"",
[list(z) for z in zip(v, Faker.values())],
radius=["30%", "75%"],
center=["75%", "50%"],
rosetype="area",
)
.set_global_opts(title_opts=opts.TitleOpts(title="Pie-玫瑰图示例"))
)
return c
def table_base() -> Table:
table = Table()
headers = ["City name", "Area", "Population", "Annual Rainfall"]
rows = [
["Brisbane", 5905, 1857594, 1146.4],
["Adelaide", 1295, 1158259, 600.5],
["Darwin", 112, 120900, 1714.7],
["Hobart", 1357, 205556, 619.5],
["Sydney", 2058, 4336374, 1214.8],
["Melbourne", 1566, 3806092, 646.9],
["Perth", 5386, 1554769, 869.4],
]
table.add(headers, rows).set_global_opts(
title_opts=opts.ComponentTitleOpts(title="Table")
)
return table
tab = Tab()
tab.add(bar_datazoom_slider(), "bar-example")
tab.add(line_markpoint(), "line-example")
tab.add(pie_rosetype(), "pie-example")
tab.add(table_base(), "table-example")
tab.render()
# Map()地图
from example.commons import Faker
from pyecharts import options as opts
from pyecharts.charts import Map
def map_base() -> Map:
c = (
Map()
.add("商家A", [list(z) for z in zip(Faker.provinces, Faker.values())], "china")
.set_global_opts(title_opts=opts.TitleOpts(title="Map-基本示例"))
)
return c
#Grid()并行多图
from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line,Scatter
def grid_vertical() -> Grid:
bar = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title="Grid-Bar"))
)
line = (
Line()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(title="Grid-Line", pos_top="48%"),
legend_opts=opts.LegendOpts(pos_top="48%"),
)
)
grid = (
Grid()
.add(bar, grid_opts=opts.GridOpts(pos_bottom="60%"))
.add(line, grid_opts=opts.GridOpts(pos_top="60%"))
)
return grid
最后感谢pyecharts团队的贡献,感兴趣的可以去github上了解更多关于pyecharts项目的内容。