{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 9.1 地图 Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pyecharts.faker import Faker"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 中国地图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 引入相关包\n",
    "from pyecharts import options as opts\n",
    "from pyecharts.charts import Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "map_data = [list(z) for z in zip(Faker.provinces, Faker.values())]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "print(map_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "(\n",
    "    Map()\n",
    "    .add(\n",
    "        \"销量\", \n",
    "        data_pair=map_data, \n",
    "        maptype=\"china\"\n",
    "    )\n",
    "    .set_global_opts(title_opts=opts.TitleOpts(title=\"中国地图\"))\n",
    ").render_notebook()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 世界地图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "(\n",
    "    Map()\n",
    "    .add(\n",
    "        \"销量\",\n",
    "        [list(z) for z in zip(Faker.country, Faker.values())],\n",
    "        \"world\",\n",
    "        label_opts=opts.LabelOpts(is_show=False),\n",
    "    )\n",
    "    .set_global_opts(\n",
    "        title_opts=opts.TitleOpts(title=\"世界地图\"),\n",
    "        visualmap_opts=opts.VisualMapOpts(max_=150)\n",
    "    )\n",
    ").render_notebook()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 城市地图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "Faker.guangdong_city"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "(\n",
    "    Map()\n",
    "    .add(\n",
    "        \"销量\",\n",
    "        [list(z) for z in zip(Faker.guangdong_city, Faker.values())],\n",
    "        \"广东\",\n",
    "        label_opts=opts.LabelOpts(is_show=False),\n",
    "        is_map_symbol_show=False\n",
    "    )\n",
    "    .set_global_opts(\n",
    "        title_opts=opts.TitleOpts(title=\"城市地图\"),\n",
    "        visualmap_opts=opts.VisualMapOpts(max_=150)\n",
    "    )\n",
    ").render_notebook()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 9.2 地理坐标系 Geo"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 热力地图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pyecharts.charts import Geo\n",
    "from pyecharts.globals import ChartType\n",
    "\n",
    "(\n",
    "    Geo()\n",
    "    .add_schema(maptype=\"china\")\n",
    "    .add(\"geo\", \n",
    "         [list(z) for z in zip(Faker.provinces, Faker.values())],\n",
    "         type_=ChartType.EFFECT_SCATTER,\n",
    "#          type_=ChartType.HEATMAP,\n",
    "    )\n",
    "    .set_global_opts(\n",
    "        visualmap_opts=opts.VisualMapOpts(), \n",
    "        title_opts=opts.TitleOpts(title=\"中国地图\")\n",
    "    )\n",
    ").render_notebook()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 分段型地图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "(\n",
    "    Geo()\n",
    "    .add_schema(maptype=\"china\")\n",
    "    .add(\"geo\", \n",
    "         [list(z) for z in zip(Faker.provinces, Faker.values())],\n",
    "         type_=ChartType.EFFECT_SCATTER,\n",
    "    )\n",
    "    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))\n",
    "    .set_global_opts(\n",
    "        visualmap_opts=opts.VisualMapOpts(is_piecewise=True), \n",
    "        title_opts=opts.TitleOpts(title=\"中国地图\")\n",
    "    )\n",
    ").render_notebook()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 航线图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pyecharts.globals import SymbolType\n",
    "\n",
    "(\n",
    "    Geo()\n",
    "    .add_schema(maptype=\"china\")\n",
    "    .add(\n",
    "        \"\",\n",
    "        [(\"广州\", 55), (\"北京\", 66), (\"杭州\", 77), (\"重庆\", 88)],\n",
    "        type_=ChartType.EFFECT_SCATTER,\n",
    "        color=\"white\",\n",
    "    )\n",
    "    .add(\n",
    "        \"geo\",\n",
    "        [(\"广州\", \"上海\"), (\"广州\", \"北京\"), (\"广州\", \"杭州\"), (\"广州\", \"重庆\")],\n",
    "        type_=ChartType.LINES,\n",
    "        effect_opts=opts.EffectOpts(\n",
    "            symbol=SymbolType.ARROW, symbol_size=6, color=\"blue\"\n",
    "        ),\n",
    "        linestyle_opts=opts.LineStyleOpts(curve=0.2),\n",
    "    )\n",
    "    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))\n",
    "    .set_global_opts(title_opts=opts.TitleOpts(title=\"航线图\"))\n",
    ").render_notebook()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 9.3 3D 地图"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 地球数据可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 准备数据\n",
    "from pyecharts.faker import POPULATION\n",
    "\n",
    "print(POPULATION)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = [x for _, x in POPULATION[1:]]\n",
    "low, high = min(data), max(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pyecharts.options as opts\n",
    "from pyecharts.charts import MapGlobe\n",
    "\n",
    "(\n",
    "    MapGlobe()\n",
    "    .add_schema()\n",
    "    .add(\n",
    "        maptype=\"world\",\n",
    "        series_name=\"人口数量\",\n",
    "        data_pair=POPULATION[1:],\n",
    "        is_map_symbol_show=False,\n",
    "        label_opts=opts.LabelOpts(is_show=False),\n",
    "    )\n",
    "    .set_global_opts(\n",
    "        visualmap_opts=opts.VisualMapOpts(\n",
    "            min_=low,\n",
    "            max_=high,\n",
    "            range_color=[\"lightskyblue\", \"yellow\", \"orangered\"],\n",
    "        )\n",
    "    )\n",
    ").render_notebook()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3D地图 + 柱状图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pyecharts import options as opts\n",
    "from pyecharts.charts import Map3D\n",
    "from pyecharts.globals import ChartType\n",
    "from pyecharts.commons.utils import JsCode\n",
    "\n",
    "example_data = [\n",
    "    (\"黑龙江\", [127.9688, 45.368, 100]),\n",
    "    (\"内蒙古\", [110.3467, 41.4899, 300]),\n",
    "    (\"吉林\", [125.8154, 44.2584, 300]),\n",
    "    (\"辽宁\", [123.1238, 42.1216, 300]),\n",
    "    (\"河北\", [114.4995, 38.1006, 300]),\n",
    "    (\"天津\", [117.4219, 39.4189, 300]),\n",
    "    (\"山西\", [112.3352, 37.9413, 300]),\n",
    "    (\"陕西\", [109.1162, 34.2004, 300]),\n",
    "    (\"甘肃\", [103.5901, 36.3043, 300]),\n",
    "    (\"宁夏\", [106.3586, 38.1775, 300]),\n",
    "    (\"青海\", [101.4038, 36.8207, 300]),\n",
    "    (\"新疆\", [87.9236, 43.5883, 300]),\n",
    "    (\"西藏\", [91.11, 29.97, 300]),\n",
    "    (\"四川\", [103.9526, 30.7617, 300]),\n",
    "    (\"重庆\", [108.384366, 30.439702, 300]),\n",
    "    (\"山东\", [117.1582, 36.8701, 300]),\n",
    "    (\"河南\", [113.4668, 34.6234, 300]),\n",
    "    (\"江苏\", [118.8062, 31.9208, 300]),\n",
    "    (\"安徽\", [117.29, 32.0581, 300]),\n",
    "    (\"湖北\", [114.3896, 30.6628, 300]),\n",
    "    (\"浙江\", [119.5313, 29.8773, 300]),\n",
    "    (\"福建\", [119.4543, 25.9222, 300]),\n",
    "    (\"江西\", [116.0046, 28.6633, 300]),\n",
    "    (\"湖南\", [113.0823, 28.2568, 300]),\n",
    "    (\"贵州\", [106.6992, 26.7682, 300]),\n",
    "    (\"广西\", [108.479, 23.1152, 300]),\n",
    "    (\"海南\", [110.3893, 19.8516, 300]),\n",
    "    (\"上海\", [121.4648, 31.2891, 1300]),\n",
    "]\n",
    "\n",
    "(\n",
    "    Map3D()\n",
    "    .add_schema(\n",
    "        itemstyle_opts=opts.ItemStyleOpts(\n",
    "            color=\"rgb(5,101,123)\",\n",
    "            opacity=1,\n",
    "            border_width=0.8,\n",
    "            border_color=\"rgb(62,215,213)\",\n",
    "        )\n",
    "    )\n",
    "    .add(\n",
    "        series_name=\"销量\",\n",
    "        data_pair=example_data,\n",
    "        type_=ChartType.BAR3D,\n",
    "        bar_size=1,\n",
    "        shading=\"lambert\",\n",
    "        label_opts=opts.LabelOpts(\n",
    "            is_show=False,\n",
    "            formatter=JsCode(\"function(data){return data.name + ' ' + data.value[2];}\"),\n",
    "        ),\n",
    "    )\n",
    "    .set_global_opts(title_opts=opts.TitleOpts(title=\"3D 地图\"))\n",
    ").render_notebook()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "data_anal_env",
   "language": "python",
   "name": "data_anal_env"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
