{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "\n", "# 使用PyEcharts进行可视化\n", "\n", "Visualization with PyEcharts\n", "\n", "\n", "![image.png](images/author.png)\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Echarts\n", "\n", "https://echarts.apache.org/examples/zh/index.html\n", "\n", "- 第一步,选取图类型 \n", "- 第二步,修改图\n", "- 第三步,点击download下载html文件\n", "- 第四步,修改下载的html文件\n", "\n", "案例1:散点图\n", "https://echarts.apache.org/examples/zh/editor.html?c=bubble-gradient" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "案例2:Put echarts into a html\n", "\n", "Note: set the **height** of section.\n", "\n", "**Question**: How to add more echarts into a html?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "案例3:读取json数据\n", "\n", "https://echarts.apache.org/examples/zh/editor.html?c=scatter-life-expectancy-timeline\n", "\n", "前端的开发的html给我们的时候,由于内部有一些ajax请求的json的数据,需要在一个web server中查看,每次放到http服务器太麻烦。还是直接用python造一个最方便。最简单的,直接用\n", "\n", "> python3 -m http.server\n", "\n", "同时,读取json数据时,需要调用jquery\n", "\n", "```\n", "\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## pyecharts安装\n", " https://github.com/pyecharts/pyecharts\n", "\n", "> pip install pyecharts -U\n", "\n", " \n", "- pip install echarts-countries-pypkg\n", "- pip install echarts-china-provinces-pypkg\n", "- pip install echarts-china-cities-pypkg" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## pyecharts使用简介\n", "Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。https://pyecharts.org/#/\n", "\n", "- 配置项: 全局配置项 | 系列配置项\n", "- 基本使用: 图表 API | 示例数据 | 全局变量\n", "- 图表类型: 基本图表 | 直角坐标系图表 | 地理图表 | 3D 图表 | 组合图表 | HTML 组件\n", "- 进阶话题: 参数传递 | 数据格式 | 定制主题 | 定制地图 | 渲染图片 | Notebook | 原生 Javascript | 资源引用\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2020-05-13T09:06:10.927230Z", "start_time": "2020-05-13T09:06:10.910267Z" }, "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pyecharts.charts import Bar\n", "\n", "bar = Bar()\n", "bar.add_xaxis([\"衬衫\", \"羊毛衫\", \"雪纺衫\", \"裤子\", \"高跟鞋\", \"袜子\"])\n", "bar.add_yaxis(\"商家A\", [5, 20, 36, 10, 75, 90])\n", "# render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件\n", "# 也可以传入路径参数,如 bar.render(\"mycharts.html\")\n", "bar.render_notebook()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2020-05-13T09:06:17.293145Z", "start_time": "2020-05-13T09:06:17.287112Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pyecharts.charts import Bar\n", "\n", "bar = (\n", " Bar()\n", " .add_xaxis([\"衬衫\", \"羊毛衫\", \"雪纺衫\", \"裤子\", \"高跟鞋\", \"袜子\"])\n", " .add_yaxis(\"商家A\", [5, 20, 36, 10, 75, 90])\n", ")\n", "bar.render_notebook()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2020-05-13T09:06:28.574234Z", "start_time": "2020-05-13T09:06:28.565978Z" }, "code_folding": [ 3 ], "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pyecharts.charts import Bar\n", "from pyecharts import options as opts\n", "\n", "bar = (\n", " Bar()\n", " .add_xaxis([\"衬衫\", \"羊毛衫\", \"雪纺衫\", \"裤子\", \"高跟鞋\", \"袜子\"])\n", " .add_yaxis(\"商家A\", [5, 20, 36, 10, 75, 90])\n", " .set_global_opts(title_opts=opts.TitleOpts(title=\"主标题\", subtitle=\"副标题\"))\n", " # 或者直接使用字典参数\n", " # .set_global_opts(title_opts={\"text\": \"主标题\", \"subtext\": \"副标题\"})\n", ")\n", "bar.render_notebook()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2020-05-13T09:06:36.172922Z", "start_time": "2020-05-13T09:06:36.165043Z" }, "code_folding": [ 5 ], "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pyecharts.charts import Bar\n", "from pyecharts import options as opts\n", "# 内置主题类型可查看 pyecharts.globals.ThemeType\n", "from pyecharts.globals import ThemeType\n", "\n", "bar = (\n", " Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))\n", " .add_xaxis([\"衬衫\", \"羊毛衫\", \"雪纺衫\", \"裤子\", \"高跟鞋\", \"袜子\"])\n", " .add_yaxis(\"商家A\", [5, 20, 36, 10, 75, 90])\n", " .add_yaxis(\"商家B\", [15, 6, 45, 20, 35, 66])\n", " .set_global_opts(title_opts=opts.TitleOpts(title=\"主标题\", subtitle=\"副标题\"))\n", ")\n", "\n", "bar.render_notebook()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## PyEcharts Gallery\n", "\n", "https://github.com/pyecharts/pyecharts-gallery\n", "\n", "![image.png](images/pyecharts.png)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Bar\n", "\n", "https://gallery.pyecharts.org/#/Bar/bar_base" ] }, { "cell_type": "code", "execution_count": 146, "metadata": { "ExecuteTime": { "end_time": "2020-05-11T18:07:53.901582Z", "start_time": "2020-05-11T18:07:53.891063Z" }, "code_folding": [], "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 146, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# vis\n", "from pyecharts.charts import Bar\n", "from pyecharts import options as opts\n", "\n", "# V1 版本开始支持链式调用\n", "bar = (\n", " Bar()\n", " .add_xaxis([\"衬衫\", \"毛衣\", \"领带\", \"裤子\", \"风衣\", \"高跟鞋\", \"袜子\"])\n", " .add_yaxis(\"商家A\", [114, 55, 27, 101, 125, 27, 105])\n", " .add_yaxis(\"商家B\", [57, 134, 137, 129, 145, 60, 49])\n", " .set_global_opts(title_opts=opts.TitleOpts(title=\"某商场销售情况\"))\n", ")\n", "bar.render_notebook()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Bar3D" ] }, { "cell_type": "code", "execution_count": 147, "metadata": { "ExecuteTime": { "end_time": "2020-05-11T18:08:19.968077Z", "start_time": "2020-05-11T18:08:19.870704Z" }, "code_folding": [ 0 ], "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 147, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# vis\n", "import random\n", "\n", "from pyecharts import options as opts\n", "from pyecharts.charts import Bar3D\n", "from pyecharts.faker import Faker\n", "\n", "\n", "data = [(i, j, random.randint(0, 12)) for i in range(6) for j in range(24)]\n", "bar3d = (\n", " Bar3D()\n", " .add(\n", " \"\",\n", " [[d[1], d[0], d[2]] for d in data],\n", " xaxis3d_opts=opts.Axis3DOpts(Faker.clock, type_=\"category\"),\n", " yaxis3d_opts=opts.Axis3DOpts(Faker.week_en, type_=\"category\"),\n", " zaxis3d_opts=opts.Axis3DOpts(type_=\"value\"),\n", " )\n", " .set_global_opts(\n", " visualmap_opts=opts.VisualMapOpts(max_=20),\n", " title_opts=opts.TitleOpts(title=\"Bar3D-基本示例\"),\n", " )\n", " #.render(\"bar3d_base.html\")\n", ")\n", "\n", "bar3d.render_notebook()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## EffectScatter" ] }, { "cell_type": "code", "execution_count": 116, "metadata": { "ExecuteTime": { "end_time": "2020-05-10T09:10:15.730873Z", "start_time": "2020-05-10T09:10:15.721001Z" }, "code_folding": [ 0 ], "scrolled": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 116, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# vis\n", "from pyecharts import options as opts\n", "from pyecharts.charts import EffectScatter\n", "from pyecharts.faker import Faker\n", "\n", "c = (\n", " EffectScatter()\n", " .add_xaxis(Faker.choose())\n", " .add_yaxis(\"\", Faker.values())\n", " .set_global_opts(title_opts=opts.TitleOpts(title=\"EffectScatter-基本示例\"))\n", " #.render(\"effectscatter_base.html\")\n", ")\n", "\n", "c.render_notebook()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Funnel" ] }, { "cell_type": "code", "execution_count": 148, "metadata": { "ExecuteTime": { "end_time": "2020-05-11T18:09:23.704202Z", "start_time": "2020-05-11T18:09:23.677748Z" }, "code_folding": [ 4 ], "scrolled": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 148, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pyecharts import options as opts\n", "from pyecharts.charts import Funnel\n", "from pyecharts.faker import Faker\n", "\n", "c = (\n", " Funnel()\n", " .add(\"商品\", [list(z) for z in zip(Faker.choose(), Faker.values())])\n", " .set_global_opts(title_opts=opts.TitleOpts(title=\"Funnel-基本示例\"))\n", " #.render(\"funnel_base.html\")\n", ")\n", "\n", "c.render_notebook()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Gauge" ] }, { "cell_type": "code", "execution_count": 149, "metadata": { "ExecuteTime": { "end_time": "2020-05-11T18:09:39.840494Z", "start_time": "2020-05-11T18:09:39.825193Z" }, "code_folding": [ 3 ], "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 149, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pyecharts import options as opts\n", "from pyecharts.charts import Gauge\n", "\n", "c = (\n", " Gauge()\n", " .add(\"\", [(\"完成率\", 55.6)])\n", " .set_global_opts(title_opts=opts.TitleOpts(title=\"Gauge-基本示例\"))\n", " #.render(\"gauge_base.html\")\n", ")\n", "\n", "c.render_notebook()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Geo" ] }, { "cell_type": "code", "execution_count": 150, "metadata": { "ExecuteTime": { "end_time": "2020-05-11T18:10:02.719815Z", "start_time": "2020-05-11T18:10:02.668059Z" }, "code_folding": [ 2 ], "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "from pyecharts.charts import Geo\n", "\n", "data = [\n", " (\"海门\", 9),(\"鄂尔多斯\", 12),(\"招远\", 12),(\"舟山\", 12),(\"齐齐哈尔\", 14),(\"盐城\", 15),\n", " (\"赤峰\", 16),(\"青岛\", 18),(\"乳山\", 18),(\"金昌\", 19),(\"泉州\", 21),(\"莱西\", 21),\n", " (\"日照\", 21),(\"胶南\", 22),(\"南通\", 23),(\"拉萨\", 24),(\"云浮\", 24),(\"梅州\", 25),\n", " (\"文登\", 25),(\"上海\", 25),(\"攀枝花\", 25),(\"威海\", 25),(\"承德\", 25),(\"厦门\", 26),\n", " (\"汕尾\", 26),(\"潮州\", 26),(\"丹东\", 27),(\"太仓\", 27),(\"曲靖\", 27),(\"烟台\", 28),\n", " (\"福州\", 29),(\"瓦房店\", 30),(\"即墨\", 30),(\"抚顺\", 31),(\"玉溪\", 31),(\"张家口\", 31),\n", " (\"阳泉\", 31),(\"莱州\", 32),(\"湖州\", 32),(\"汕头\", 32),(\"昆山\", 33),(\"宁波\", 33),\n", " (\"湛江\", 33),(\"揭阳\", 34),(\"荣成\", 34),(\"连云港\", 35),(\"葫芦岛\", 35),(\"常熟\", 36),\n", " (\"东莞\", 36),(\"河源\", 36),(\"淮安\", 36),(\"泰州\", 36),(\"南宁\", 37),(\"营口\", 37),\n", " (\"惠州\", 37),(\"江阴\", 37),(\"蓬莱\", 37),(\"韶关\", 38),(\"嘉峪关\", 38),(\"广州\", 38),\n", " (\"延安\", 38),(\"太原\", 39),(\"清远\", 39),(\"中山\", 39),(\"昆明\", 39),(\"寿光\", 40),\n", " (\"盘锦\", 40),(\"长治\", 41),(\"深圳\", 41),(\"珠海\", 42),(\"宿迁\", 43),(\"咸阳\", 43),\n", " (\"铜川\", 44),(\"平度\", 44),(\"佛山\", 44),(\"海口\", 44),(\"江门\", 45),(\"章丘\", 45),\n", " (\"肇庆\", 46),(\"大连\", 47),(\"临汾\", 47),(\"吴江\", 47),(\"石嘴山\", 49),(\"沈阳\", 50),\n", " (\"苏州\", 50),(\"茂名\", 50),(\"嘉兴\", 51),(\"长春\", 51),(\"胶州\", 52),(\"银川\", 52),\n", " (\"张家港\", 52),(\"三门峡\", 53),(\"锦州\", 54),(\"南昌\", 54),(\"柳州\", 54),(\"三亚\", 54),\n", " (\"自贡\", 56),(\"吉林\", 56),(\"阳江\", 57),(\"泸州\", 57),(\"西宁\", 57),(\"宜宾\", 58),\n", " (\"呼和浩特\", 58),(\"成都\", 58),(\"大同\", 58),(\"镇江\", 59),(\"桂林\", 59),(\"张家界\", 59),\n", " (\"宜兴\", 59),(\"北海\", 60),(\"西安\", 61),(\"金坛\", 62),(\"东营\", 62),(\"牡丹江\", 63),\n", " (\"遵义\", 63),(\"绍兴\", 63),(\"扬州\", 64),(\"常州\", 64),(\"潍坊\", 65),(\"重庆\", 66),\n", " (\"台州\", 67),(\"南京\", 67),(\"滨州\", 70),(\"贵阳\", 71),(\"无锡\", 71),(\"本溪\", 71),\n", " (\"克拉玛依\", 72),(\"渭南\", 72),(\"马鞍山\", 72),(\"宝鸡\", 72),(\"焦作\", 75),(\"句容\", 75),\n", " (\"北京\", 79),(\"徐州\", 79),(\"衡水\", 80),(\"包头\", 80),(\"绵阳\", 80),(\"乌鲁木齐\", 84),\n", " (\"枣庄\", 84),(\"杭州\", 84),(\"淄博\", 85),(\"鞍山\", 86),(\"溧阳\", 86),(\"库尔勒\", 86),\n", " (\"安阳\", 90),(\"开封\", 90),(\"济南\", 92),(\"德阳\", 93),(\"温州\", 95),(\"九江\", 96),\n", " (\"邯郸\", 98),(\"临安\", 99),(\"兰州\", 99),(\"沧州\", 100),(\"临沂\", 103),(\"南充\", 104),\n", " (\"天津\", 105),(\"富阳\", 106),(\"泰安\", 112),(\"诸暨\", 112),(\"郑州\", 113),(\"哈尔滨\", 114),\n", " (\"聊城\", 116),(\"芜湖\", 117),(\"唐山\", 119),(\"平顶山\", 119),(\"邢台\", 119),(\"德州\", 120),\n", " (\"济宁\", 120),(\"荆州\", 127),(\"宜昌\", 130),(\"义乌\", 132),(\"丽水\", 133),(\"洛阳\", 134),\n", " (\"秦皇岛\", 136),(\"株洲\", 143),(\"石家庄\", 147),(\"莱芜\", 148),(\"常德\", 152),(\"保定\", 153),\n", " (\"湘潭\", 154),(\"金华\", 157),(\"岳阳\", 169),(\"长沙\", 175),(\"衢州\", 177),(\"廊坊\", 193),\n", " (\"菏泽\", 194),(\"合肥\", 229),(\"武汉\", 273),(\"大庆\", 279)]" ] }, { "cell_type": "code", "execution_count": 151, "metadata": { "ExecuteTime": { "end_time": "2020-05-11T18:10:28.392941Z", "start_time": "2020-05-11T18:10:28.338999Z" }, "code_folding": [ 0 ], "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 151, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c = (\n", " Geo()\n", " .add_schema(maptype=\"china\")\n", " .add(\"geo\", [list(z) for z in data])\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=\"Geo-VisualMap(分段型)\"),\n", " )\n", " #.render(\"geo_visualmap_piecewise.html\")\n", ")\n", "\n", "c.render_notebook()" ] }, { "cell_type": "code", "execution_count": 152, "metadata": { "ExecuteTime": { "end_time": "2020-05-11T18:10:46.970299Z", "start_time": "2020-05-11T18:10:46.946593Z" }, "code_folding": [ 2 ], "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 152, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pyecharts.globals import ChartType\n", "\n", "c = (\n", " Geo()\n", " .add_schema(maptype=\"china\")\n", " .add(\n", " \"geo\",\n", " [list(z) for z in data],\n", " type_=ChartType.HEATMAP,\n", " )\n", " .set_series_opts(label_opts=opts.LabelOpts(is_show=False))\n", " .set_global_opts(\n", " visualmap_opts=opts.VisualMapOpts(),\n", " title_opts=opts.TitleOpts(title=\"Geo-HeatMap\"),\n", " )\n", ")\n", "\n", "c.render_notebook()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Graph" ] }, { "cell_type": "code", "execution_count": 153, "metadata": { "ExecuteTime": { "end_time": "2020-05-11T18:11:11.165012Z", "start_time": "2020-05-11T18:11:11.124393Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "import json\n", "\n", "from pyecharts import options as opts\n", "from pyecharts.charts import Graph\n", "\n", "\n", "with open(\"les-miserables.json\", \"r\", encoding=\"utf-8\") as f:\n", " j = json.load(f)\n", " nodes = j[\"nodes\"]\n", " links = j[\"links\"]\n", " categories = j[\"categories\"]\n", "\n" ] }, { "cell_type": "code", "execution_count": 154, "metadata": { "ExecuteTime": { "end_time": "2020-05-11T18:11:15.129285Z", "start_time": "2020-05-11T18:11:15.114376Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "{'id': '0',\n", " 'name': 'Myriel',\n", " 'symbolSize': 19.12381,\n", " 'x': -266.82776,\n", " 'y': 299.6904,\n", " 'value': 28.685715,\n", " 'label': {'normal': {'show': True}},\n", " 'category': 0}" ] }, "execution_count": 154, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nodes[0]" ] }, { "cell_type": "code", "execution_count": 124, "metadata": { "ExecuteTime": { "end_time": "2020-05-10T09:10:41.087962Z", "start_time": "2020-05-10T09:10:41.084318Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "{'id': '0', 'source': '1', 'target': '0'}" ] }, "execution_count": 124, "metadata": {}, "output_type": "execute_result" } ], "source": [ "links[0] " ] }, { "cell_type": "code", "execution_count": 155, "metadata": { "ExecuteTime": { "end_time": "2020-05-11T18:12:07.410433Z", "start_time": "2020-05-11T18:12:07.376597Z" }, "code_folding": [ 0 ], "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 155, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c = (\n", " Graph(init_opts=opts.InitOpts(width=\"1000px\", height=\"600px\"))\n", " .add(\n", " \"\",\n", " nodes=nodes,\n", " links=links,\n", " categories=categories,\n", " layout=\"circular\",\n", " is_rotate_label=True,\n", " linestyle_opts=opts.LineStyleOpts(color=\"source\", curve=0.5),\n", " label_opts=opts.LabelOpts(position=\"right\"),\n", " )\n", " .set_global_opts(\n", " title_opts=opts.TitleOpts(title=\"Graph-Les Miserables\"),\n", " legend_opts=opts.LegendOpts(orient=\"vertical\", pos_left=\"2%\", pos_top=\"20%\"),\n", " )\n", " #.render(\"graph_les_miserables.html\")\n", ")\n", "c.render_notebook()" ] }, { "cell_type": "code", "execution_count": 126, "metadata": { "ExecuteTime": { "end_time": "2020-05-10T09:10:45.268192Z", "start_time": "2020-05-10T09:10:45.251254Z" }, "code_folding": [ 0 ], "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 126, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c = (\n", " Graph(init_opts=opts.InitOpts(width=\"1000px\", height=\"600px\"))\n", " .add(\n", " \"\",\n", " nodes=nodes,\n", " links=links,\n", " categories=categories,\n", " layout=\"none\",\n", " is_rotate_label=True,\n", " linestyle_opts=opts.LineStyleOpts(color=\"source\", curve=0.3),\n", " label_opts=opts.LabelOpts(position=\"right\"),\n", " )\n", " .set_global_opts(\n", " title_opts=opts.TitleOpts(title=\"Graph-Les Miserables\"),\n", " legend_opts=opts.LegendOpts(orient=\"vertical\", pos_left=\"2%\", pos_top=\"20%\"),\n", " )\n", " #.render(\"graph_les_miserables.html\")\n", ")\n", "c.render_notebook()" ] }, { "cell_type": "code", "execution_count": 127, "metadata": { "ExecuteTime": { "end_time": "2020-05-10T09:10:48.055440Z", "start_time": "2020-05-10T09:10:48.045181Z" }, "code_folding": [ 0 ], "scrolled": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 127, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# vis\n", "from pyecharts import options as opts\n", "from pyecharts.charts import Graph\n", "import networkx as nx\n", "\n", "ba=nx.nx.karate_club_graph()\n", "links = []\n", "nodes = []\n", "for i in ba.edges:\n", " links.append({\"source\": i[0], \"target\": i[1]})\n", "for i in ba.nodes:\n", " nodes.append({'name': i})\n", " \n", "c = (\n", " Graph()\n", " .add(\"\", nodes, links, repulsion=80)\n", " .set_global_opts(title_opts=opts.TitleOpts(title=\"Graph-基本示例\"))\n", " #.render(\"graph_base.html\")\n", ")\n", "c.render_notebook()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## HeatMap" ] }, { "cell_type": "code", "execution_count": 139, "metadata": { "ExecuteTime": { "end_time": "2020-05-10T09:14:30.990466Z", "start_time": "2020-05-10T09:14:30.979175Z" }, "code_folding": [ 0 ], "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 139, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# vis\n", "import random\n", "from pyecharts import options as opts\n", "from pyecharts.charts import HeatMap\n", "from pyecharts.faker import Faker\n", "\n", "value = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)]\n", "c = (\n", " HeatMap()\n", " .add_xaxis(Faker.clock)\n", " .add_yaxis(\n", " \"series0\",\n", " Faker.week,\n", " value,\n", " label_opts=opts.LabelOpts(is_show=True, position=\"inside\"),\n", " )\n", " .set_global_opts(\n", " title_opts=opts.TitleOpts(title=\"HeatMap-Label 显示\"),\n", " visualmap_opts=opts.VisualMapOpts(),\n", " )\n", " #.render(\"heatmap_with_label_show.html\")\n", ")\n", "\n", "c.render_notebook()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Line3D" ] }, { "cell_type": "code", "execution_count": 130, "metadata": { "ExecuteTime": { "end_time": "2020-05-10T09:11:31.005721Z", "start_time": "2020-05-10T09:11:30.966239Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "import math\n", "\n", "from pyecharts import options as opts\n", "from pyecharts.charts import Line3D\n", "from pyecharts.faker import Faker\n", "\n", "data = []\n", "for t in range(0, 25000):\n", " _t = t / 1000\n", " x = (1 + 0.25 * math.cos(75 * _t)) * math.cos(_t)\n", " y = (1 + 0.25 * math.cos(75 * _t)) * math.sin(_t)\n", " z = _t + 2.0 * math.sin(75 * _t)\n", " data.append([x, y, z])\n" ] }, { "cell_type": "code", "execution_count": 131, "metadata": { "ExecuteTime": { "end_time": "2020-05-10T09:11:32.223007Z", "start_time": "2020-05-10T09:11:31.765946Z" }, "code_folding": [ 0 ], "scrolled": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 131, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c = (\n", " Line3D()\n", " .add(\n", " \"\",\n", " data,\n", " xaxis3d_opts=opts.Axis3DOpts(Faker.clock, type_=\"value\"),\n", " yaxis3d_opts=opts.Axis3DOpts(Faker.week_en, type_=\"value\"),\n", " grid3d_opts=opts.Grid3DOpts(\n", " width=100, depth=100, rotate_speed=150, is_rotate=True\n", " ),\n", " )\n", " .set_global_opts(\n", " visualmap_opts=opts.VisualMapOpts(\n", " max_=30, min_=0, range_color=Faker.visual_color\n", " ),\n", " title_opts=opts.TitleOpts(title=\"Line3D-旋转的弹簧\"),\n", " )\n", " #.render(\"line3d_autorotate.html\")\n", ")\n", "c.render_notebook()" ] }, { "cell_type": "code", "execution_count": 137, "metadata": { "ExecuteTime": { "end_time": "2020-05-10T09:12:25.069739Z", "start_time": "2020-05-10T09:12:25.036715Z" }, "code_folding": [ 0, 5, 134 ], "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 137, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# vis\n", "import pyecharts.options as opts\n", "from pyecharts.charts import ThemeRiver\n", "\n", "x_data = [\"DQ\", \"TY\", \"SS\", \"QG\", \"SY\", \"DD\"]\n", "y_data = [\n", " [\"2015/11/08\", 10, \"DQ\"],\n", " [\"2015/11/09\", 15, \"DQ\"],\n", " [\"2015/11/10\", 35, \"DQ\"],\n", " [\"2015/11/11\", 38, \"DQ\"],\n", " [\"2015/11/12\", 22, \"DQ\"],\n", " [\"2015/11/13\", 16, \"DQ\"],\n", " [\"2015/11/14\", 7, \"DQ\"],\n", " [\"2015/11/15\", 2, \"DQ\"],\n", " [\"2015/11/16\", 17, \"DQ\"],\n", " [\"2015/11/17\", 33, \"DQ\"],\n", " [\"2015/11/18\", 40, \"DQ\"],\n", " [\"2015/11/19\", 32, \"DQ\"],\n", " [\"2015/11/20\", 26, \"DQ\"],\n", " [\"2015/11/21\", 35, \"DQ\"],\n", " [\"2015/11/22\", 40, \"DQ\"],\n", " [\"2015/11/23\", 32, \"DQ\"],\n", " [\"2015/11/24\", 26, \"DQ\"],\n", " [\"2015/11/25\", 22, \"DQ\"],\n", " [\"2015/11/26\", 16, \"DQ\"],\n", " [\"2015/11/27\", 22, \"DQ\"],\n", " [\"2015/11/28\", 10, \"DQ\"],\n", " [\"2015/11/08\", 35, \"TY\"],\n", " [\"2015/11/09\", 36, \"TY\"],\n", " [\"2015/11/10\", 37, \"TY\"],\n", " [\"2015/11/11\", 22, \"TY\"],\n", " [\"2015/11/12\", 24, \"TY\"],\n", " [\"2015/11/13\", 26, \"TY\"],\n", " [\"2015/11/14\", 34, \"TY\"],\n", " [\"2015/11/15\", 21, \"TY\"],\n", " [\"2015/11/16\", 18, \"TY\"],\n", " [\"2015/11/17\", 45, \"TY\"],\n", " [\"2015/11/18\", 32, \"TY\"],\n", " [\"2015/11/19\", 35, \"TY\"],\n", " [\"2015/11/20\", 30, \"TY\"],\n", " [\"2015/11/21\", 28, \"TY\"],\n", " [\"2015/11/22\", 27, \"TY\"],\n", " [\"2015/11/23\", 26, \"TY\"],\n", " [\"2015/11/24\", 15, \"TY\"],\n", " [\"2015/11/25\", 30, \"TY\"],\n", " [\"2015/11/26\", 35, \"TY\"],\n", " [\"2015/11/27\", 42, \"TY\"],\n", " [\"2015/11/28\", 42, \"TY\"],\n", " [\"2015/11/08\", 21, \"SS\"],\n", " [\"2015/11/09\", 25, \"SS\"],\n", " [\"2015/11/10\", 27, \"SS\"],\n", " [\"2015/11/11\", 23, \"SS\"],\n", " [\"2015/11/12\", 24, \"SS\"],\n", " [\"2015/11/13\", 21, \"SS\"],\n", " [\"2015/11/14\", 35, \"SS\"],\n", " [\"2015/11/15\", 39, \"SS\"],\n", " [\"2015/11/16\", 40, \"SS\"],\n", " [\"2015/11/17\", 36, \"SS\"],\n", " [\"2015/11/18\", 33, \"SS\"],\n", " [\"2015/11/19\", 43, \"SS\"],\n", " [\"2015/11/20\", 40, \"SS\"],\n", " [\"2015/11/21\", 34, \"SS\"],\n", " [\"2015/11/22\", 28, \"SS\"],\n", " [\"2015/11/23\", 26, \"SS\"],\n", " [\"2015/11/24\", 37, \"SS\"],\n", " [\"2015/11/25\", 41, \"SS\"],\n", " [\"2015/11/26\", 46, \"SS\"],\n", " [\"2015/11/27\", 47, \"SS\"],\n", " [\"2015/11/28\", 41, \"SS\"],\n", " [\"2015/11/08\", 10, \"QG\"],\n", " [\"2015/11/09\", 15, \"QG\"],\n", " [\"2015/11/10\", 35, \"QG\"],\n", " [\"2015/11/11\", 38, \"QG\"],\n", " [\"2015/11/12\", 22, \"QG\"],\n", " [\"2015/11/13\", 16, \"QG\"],\n", " [\"2015/11/14\", 7, \"QG\"],\n", " [\"2015/11/15\", 2, \"QG\"],\n", " [\"2015/11/16\", 17, \"QG\"],\n", " [\"2015/11/17\", 33, \"QG\"],\n", " [\"2015/11/18\", 40, \"QG\"],\n", " [\"2015/11/19\", 32, \"QG\"],\n", " [\"2015/11/20\", 26, \"QG\"],\n", " [\"2015/11/21\", 35, \"QG\"],\n", " [\"2015/11/22\", 40, \"QG\"],\n", " [\"2015/11/23\", 32, \"QG\"],\n", " [\"2015/11/24\", 26, \"QG\"],\n", " [\"2015/11/25\", 22, \"QG\"],\n", " [\"2015/11/26\", 16, \"QG\"],\n", " [\"2015/11/27\", 22, \"QG\"],\n", " [\"2015/11/28\", 10, \"QG\"],\n", " [\"2015/11/08\", 10, \"SY\"],\n", " [\"2015/11/09\", 15, \"SY\"],\n", " [\"2015/11/10\", 35, \"SY\"],\n", " [\"2015/11/11\", 38, \"SY\"],\n", " [\"2015/11/12\", 22, \"SY\"],\n", " [\"2015/11/13\", 16, \"SY\"],\n", " [\"2015/11/14\", 7, \"SY\"],\n", " [\"2015/11/15\", 2, \"SY\"],\n", " [\"2015/11/16\", 17, \"SY\"],\n", " [\"2015/11/17\", 33, \"SY\"],\n", " [\"2015/11/18\", 40, \"SY\"],\n", " [\"2015/11/19\", 32, \"SY\"],\n", " [\"2015/11/20\", 26, \"SY\"],\n", " [\"2015/11/21\", 35, \"SY\"],\n", " [\"2015/11/22\", 4, \"SY\"],\n", " [\"2015/11/23\", 32, \"SY\"],\n", " [\"2015/11/24\", 26, \"SY\"],\n", " [\"2015/11/25\", 22, \"SY\"],\n", " [\"2015/11/26\", 16, \"SY\"],\n", " [\"2015/11/27\", 22, \"SY\"],\n", " [\"2015/11/28\", 10, \"SY\"],\n", " [\"2015/11/08\", 10, \"DD\"],\n", " [\"2015/11/09\", 15, \"DD\"],\n", " [\"2015/11/10\", 35, \"DD\"],\n", " [\"2015/11/11\", 38, \"DD\"],\n", " [\"2015/11/12\", 22, \"DD\"],\n", " [\"2015/11/13\", 16, \"DD\"],\n", " [\"2015/11/14\", 7, \"DD\"],\n", " [\"2015/11/15\", 2, \"DD\"],\n", " [\"2015/11/16\", 17, \"DD\"],\n", " [\"2015/11/17\", 33, \"DD\"],\n", " [\"2015/11/18\", 4, \"DD\"],\n", " [\"2015/11/19\", 32, \"DD\"],\n", " [\"2015/11/20\", 26, \"DD\"],\n", " [\"2015/11/21\", 35, \"DD\"],\n", " [\"2015/11/22\", 40, \"DD\"],\n", " [\"2015/11/23\", 32, \"DD\"],\n", " [\"2015/11/24\", 26, \"DD\"],\n", " [\"2015/11/25\", 22, \"DD\"],\n", " [\"2015/11/26\", 16, \"DD\"],\n", " [\"2015/11/27\", 22, \"DD\"],\n", " [\"2015/11/28\", 10, \"DD\"],\n", "]\n", "\n", "c = (\n", " ThemeRiver(init_opts=opts.InitOpts(width=\"1600px\", height=\"800px\"))\n", " .add(\n", " series_name=x_data,\n", " data=y_data,\n", " singleaxis_opts=opts.SingleAxisOpts(\n", " pos_top=\"50\", pos_bottom=\"50\", type_=\"time\"\n", " ),\n", " )\n", " .set_global_opts(\n", " tooltip_opts=opts.TooltipOpts(trigger=\"axis\", axis_pointer_type=\"line\")\n", " )\n", " #.render(\"theme_river.html\")\n", ")\n", "\n", "c.render_notebook()" ] }, { "cell_type": "code", "execution_count": 138, "metadata": { "ExecuteTime": { "end_time": "2020-05-10T09:12:30.196945Z", "start_time": "2020-05-10T09:12:30.187082Z" }, "code_folding": [ 0 ], "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 138, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# vis\n", "from pyecharts import options as opts\n", "from pyecharts.charts import Boxplot\n", "\n", "v1 = [\n", " [850, 740, 900, 1070, 930, 850, 950, 980, 980, 880, 1000, 980],\n", " [960, 940, 960, 940, 880, 800, 850, 880, 900, 840, 830, 790],\n", "]\n", "v2 = [\n", " [890, 810, 810, 820, 800, 770, 760, 740, 750, 760, 910, 920],\n", " [890, 840, 780, 810, 760, 810, 790, 810, 820, 850, 870, 870],\n", "]\n", "c = Boxplot()\n", "c.add_xaxis([\"expr1\", \"expr2\"])\n", "c.add_yaxis(\"A\", c.prepare_data(v1))\n", "c.add_yaxis(\"B\", c.prepare_data(v2))\n", "c.set_global_opts(title_opts=opts.TitleOpts(title=\"BoxPlot-基本示例\"))\n", "c.render_notebook()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## WordCloud" ] }, { "cell_type": "code", "execution_count": 156, "metadata": { "ExecuteTime": { "end_time": "2020-05-11T18:14:15.499019Z", "start_time": "2020-05-11T18:14:14.981549Z" }, "code_folding": [ 0 ], "scrolled": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 156, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# vis\n", "import pyecharts.options as opts\n", "from pyecharts.charts import WordCloud\n", "\n", "import jieba.analyse\n", "import numpy as np\n", "\n", "with open('../data/gov_reports1954-2017.txt', 'r') as f:\n", " reports = f.readlines()\n", "\n", "txt = reports[-1]\n", "tf = jieba.analyse.extract_tags(txt, topK=100, withWeight=True)\n", "\n", "c = (\n", " WordCloud()\n", " .add(series_name=\"热点分析\", data_pair=tf, word_size_range=[6, 100])\n", " .set_global_opts(\n", " title_opts=opts.TitleOpts(\n", " title=\"热点分析\", title_textstyle_opts=opts.TextStyleOpts(font_size=23)\n", " ),\n", " tooltip_opts=opts.TooltipOpts(is_show=True),\n", " )\n", " #.render(\"basic_wordcloud.html\")\n", ")\n", "\n", "c.render_notebook()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Timeline" ] }, { "cell_type": "code", "execution_count": 136, "metadata": { "ExecuteTime": { "end_time": "2020-05-10T09:12:21.254759Z", "start_time": "2020-05-10T09:12:21.243527Z" }, "code_folding": [ 0 ], "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 136, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# vis\n", "from pyecharts import options as opts\n", "from pyecharts.charts import Bar, Timeline\n", "from pyecharts.faker import Faker\n", "\n", "x = Faker.choose()\n", "tl = Timeline()\n", "for i in range(2015, 2020):\n", " bar = (\n", " Bar()\n", " .add_xaxis(x)\n", " .add_yaxis(\"商家A\", Faker.values())\n", " .add_yaxis(\"商家B\", Faker.values())\n", " .set_global_opts(title_opts=opts.TitleOpts(\"某商店{}年营业额\".format(i)))\n", " )\n", " tl.add(bar, \"{}年\".format(i))\n", "tl.render_notebook()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Grid" ] }, { "cell_type": "code", "execution_count": 134, "metadata": { "ExecuteTime": { "end_time": "2020-05-10T09:12:10.848062Z", "start_time": "2020-05-10T09:12:10.832269Z" }, "code_folding": [ 0, 5, 15, 26, 36 ], "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 134, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# vis\n", "from pyecharts import options as opts\n", "from pyecharts.charts import Grid, Line, Scatter\n", "from pyecharts.faker import Faker\n", "\n", "scatter = (\n", " Scatter()\n", " .add_xaxis(Faker.choose())\n", " .add_yaxis(\"商家A\", Faker.values())\n", " .add_yaxis(\"商家B\", Faker.values())\n", " .set_global_opts(\n", " #title_opts=opts.TitleOpts(title=\"Grid-Scatter\"),\n", " #legend_opts=opts.LegendOpts(pos_left=\"20%\"),\n", " )\n", ")\n", "line = (\n", " Line()\n", " .add_xaxis(Faker.choose())\n", " .add_yaxis(\"商家A\", Faker.values())\n", " .add_yaxis(\"商家B\", Faker.values())\n", " .set_global_opts(\n", " #title_opts=opts.TitleOpts(title=\"Grid-Line\", pos_right=\"5%\"),\n", " #legend_opts=opts.LegendOpts(pos_right=\"20%\"),\n", " )\n", ")\n", "\n", "scatter2 = (\n", " Scatter()\n", " .add_xaxis(Faker.choose())\n", " .add_yaxis(\"商家A\", Faker.values())\n", " .add_yaxis(\"商家B\", Faker.values())\n", " .set_global_opts(\n", " #title_opts=opts.TitleOpts(title=\"Grid-Scatter\"),\n", " #legend_opts=opts.LegendOpts(pos_left=\"20%\"),\n", " )\n", ")\n", "line2 = (\n", " Line()\n", " .add_xaxis(Faker.choose())\n", " .add_yaxis(\"商家A\", Faker.values())\n", " .add_yaxis(\"商家B\", Faker.values())\n", " .set_global_opts(\n", " #title_opts=opts.TitleOpts(title=\"Grid-Line\", pos_right=\"5%\"),\n", " #legend_opts=opts.LegendOpts(pos_right=\"20%\"),\n", " )\n", ")\n", "grid = (\n", " Grid()\n", " .add(scatter, grid_opts=opts.GridOpts(pos_bottom=\"60%\",pos_left=\"60%\"))\n", " .add(line, grid_opts=opts.GridOpts(pos_bottom=\"60%\",pos_right=\"60%\"))\n", " .add(line2, grid_opts=opts.GridOpts(pos_top=\"60%\",pos_left=\"60%\"))\n", " .add(scatter2, grid_opts=opts.GridOpts(pos_top=\"60%\",pos_right=\"60%\"))\n", " #.render(\"grid_horizontal.html\")\n", ")\n", "grid.render_notebook() " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Overlap" ] }, { "cell_type": "code", "execution_count": 135, "metadata": { "ExecuteTime": { "end_time": "2020-05-10T09:12:18.003234Z", "start_time": "2020-05-10T09:12:17.991826Z" }, "code_folding": [ 0 ], "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 135, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# vis\n", "from pyecharts import options as opts\n", "from pyecharts.charts import Bar, Line\n", "from pyecharts.faker import Faker\n", "\n", "v1 = [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3]\n", "v2 = [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3]\n", "v3 = [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2]\n", "\n", "\n", "bar = (\n", " Bar()\n", " .add_xaxis(Faker.months)\n", " .add_yaxis(\"蒸发量\", v1)\n", " .add_yaxis(\"降水量\", v2)\n", " .extend_axis(\n", " yaxis=opts.AxisOpts(\n", " axislabel_opts=opts.LabelOpts(formatter=\"{value} °C\"), interval=5\n", " )\n", " )\n", " .set_series_opts(label_opts=opts.LabelOpts(is_show=False))\n", " .set_global_opts(\n", " title_opts=opts.TitleOpts(title=\"Overlap-bar+line\"),\n", " yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter=\"{value} ml\")),\n", " )\n", ")\n", "\n", "line = Line().add_xaxis(Faker.months).add_yaxis(\"平均温度\", v3, yaxis_index=1)\n", "bar.overlap(line)\n", "bar.render_notebook()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Save html files" ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "ExecuteTime": { "end_time": "2020-05-10T08:54:26.161023Z", "start_time": "2020-05-10T08:54:26.153315Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "'/Users/datalab/github/ccbook/content/grid.html'" ] }, "execution_count": 96, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grid.render(path = 'grid.html')\n", "#help(grid.render)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "![image.png](images/end.png)" ] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "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.6" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": false, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 2 }