{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 5.1 折线图/面积图"
   ]
  },
  {
   "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 Line"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "(\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='基本折线图')\n",
    "    )\n",
    ").render_notebook()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "\n",
    "aqi_data = pd.read_csv('./city_aqi.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "aqi_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "(\n",
    "    Line()\n",
    "    .add_xaxis(aqi_data['日期'].tolist())\n",
    "    .add_yaxis('', aqi_data['AQI'].tolist())\n",
    "    .set_global_opts(\n",
    "        title_opts=opts.TitleOpts(title='空气质量指数'),\n",
    "        datazoom_opts=opts.DataZoomOpts()\n",
    "    )\n",
    ").render_notebook()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 面积图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "(\n",
    "    Line()\n",
    "    .add_xaxis(Faker.choose())\n",
    "    .add_yaxis('组A', Faker.values(), areastyle_opts=opts.AreaStyleOpts(opacity=0.5))\n",
    "    .add_yaxis('组B', Faker.values(), areastyle_opts=opts.AreaStyleOpts(opacity=0.5))\n",
    "    .set_global_opts(\n",
    "        title_opts=opts.TitleOpts(title='基本面积图')\n",
    "    )\n",
    ").render_notebook()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 5.2 K 线图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pyecharts.charts import Candlestick"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_data = [\"2017-10-24\", \"2017-10-25\", \"2017-10-26\", \"2017-10-27\"]\n",
    "y_data = [[20, 30, 10, 35], [40, 35, 30, 55], [33, 38, 33, 40], [40, 40, 32, 42]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "(\n",
    "    Candlestick()\n",
    "    .add_xaxis(x_data)\n",
    "    .add_yaxis(series_name='', y_axis=y_data)\n",
    ").render_notebook()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "stock_data = pd.read_csv('./stock.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "stock_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "(\n",
    "    Candlestick()\n",
    "    .add_xaxis(stock_data['Date'].tolist())\n",
    "    .add_yaxis(series_name='', y_axis=stock_data[['Open', 'Close', 'Low', 'High']].values.tolist())\n",
    "    .set_global_opts(\n",
    "        yaxis_opts=opts.AxisOpts(\n",
    "            is_scale=True,\n",
    "            splitline_opts=opts.SplitLineOpts(\n",
    "                is_show=True, linestyle_opts=opts.LineStyleOpts(width=1)\n",
    "            )\n",
    "        )\n",
    "    )\n",
    ").render_notebook()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 5.3 其他常用图表"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 阶梯图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "(\n",
    "    Line()\n",
    "    .add_xaxis(Faker.days_attrs)\n",
    "    .add_yaxis('', Faker.days_values, is_step=True)\n",
    "    .set_global_opts(\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",
    "    Line()\n",
    "    .add_xaxis(Faker.days_attrs)\n",
    "    .add_yaxis('', Faker.days_values, is_smooth=True)\n",
    "    .set_global_opts(\n",
    "        title_opts=opts.TitleOpts(title='平滑曲线图')\n",
    "    )\n",
    ").render_notebook()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 堆叠折线图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pv_data = pd.read_csv('./pv_data.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pv_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "(\n",
    "    Line()\n",
    "    .add_xaxis(xaxis_data=pv_data['日期'].tolist())\n",
    "    .add_yaxis(\n",
    "        series_name='邮件营销',\n",
    "        stack='stack1',\n",
    "        y_axis=pv_data['邮件营销'].tolist(),\n",
    "        label_opts=opts.LabelOpts(is_show=False),\n",
    "    )\n",
    "    .add_yaxis(\n",
    "        series_name='联盟广告',\n",
    "        stack='stack1',\n",
    "        y_axis=pv_data['联盟广告'].tolist(),\n",
    "        label_opts=opts.LabelOpts(is_show=False),\n",
    "    )\n",
    "    .add_yaxis(\n",
    "        series_name='视频广告',\n",
    "        stack='stack1',\n",
    "        y_axis=pv_data['视频广告'].tolist(),\n",
    "        label_opts=opts.LabelOpts(is_show=False),\n",
    "    )\n",
    "    .add_yaxis(\n",
    "        series_name='直接访问',\n",
    "        stack='stack1',\n",
    "        y_axis=pv_data['直接访问'].tolist(),\n",
    "        label_opts=opts.LabelOpts(is_show=False),\n",
    "    )\n",
    "    .add_yaxis(\n",
    "        series_name='搜索引擎',\n",
    "        stack='stack1',\n",
    "        y_axis=pv_data['搜索引擎'].tolist(),\n",
    "        label_opts=opts.LabelOpts(is_show=False),\n",
    "    )\n",
    "    .set_global_opts(\n",
    "        title_opts=opts.TitleOpts(title='堆叠折线图'),\n",
    "        tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n",
    "        yaxis_opts=opts.AxisOpts(\n",
    "            splitline_opts=opts.SplitLineOpts(is_show=True),\n",
    "        ),\n",
    "        xaxis_opts=opts.AxisOpts(type_=\"category\", boundary_gap=False),\n",
    "    )\n",
    ").render_notebook()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 堆叠面积图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "(\n",
    "    Line()\n",
    "    .add_xaxis(xaxis_data=pv_data['日期'].tolist())\n",
    "    .add_yaxis(\n",
    "        series_name='邮件营销',\n",
    "        stack='stack1',\n",
    "        y_axis=pv_data['邮件营销'].tolist(),\n",
    "        areastyle_opts=opts.AreaStyleOpts(opacity=0.5),\n",
    "        label_opts=opts.LabelOpts(is_show=False),\n",
    "    )\n",
    "    .add_yaxis(\n",
    "        series_name='联盟广告',\n",
    "        stack='stack1',\n",
    "        y_axis=pv_data['联盟广告'].tolist(),\n",
    "        areastyle_opts=opts.AreaStyleOpts(opacity=0.5),\n",
    "        label_opts=opts.LabelOpts(is_show=False),\n",
    "    )\n",
    "    .add_yaxis(\n",
    "        series_name='视频广告',\n",
    "        stack='stack1',\n",
    "        y_axis=pv_data['视频广告'].tolist(),\n",
    "        areastyle_opts=opts.AreaStyleOpts(opacity=0.5),\n",
    "        label_opts=opts.LabelOpts(is_show=False),\n",
    "    )\n",
    "    .add_yaxis(\n",
    "        series_name='直接访问',\n",
    "        stack='stack1',\n",
    "        y_axis=pv_data['直接访问'].tolist(),\n",
    "        areastyle_opts=opts.AreaStyleOpts(opacity=0.5),\n",
    "        label_opts=opts.LabelOpts(is_show=False),\n",
    "    )\n",
    "    .add_yaxis(\n",
    "        series_name='搜索引擎',\n",
    "        stack='stack1',\n",
    "        y_axis=pv_data['搜索引擎'].tolist(),\n",
    "        areastyle_opts=opts.AreaStyleOpts(opacity=0.5),\n",
    "        label_opts=opts.LabelOpts(is_show=False),\n",
    "    )\n",
    "    .set_global_opts(\n",
    "        title_opts=opts.TitleOpts(title='堆叠面积图'),\n",
    "        tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n",
    "        yaxis_opts=opts.AxisOpts(\n",
    "            splitline_opts=opts.SplitLineOpts(is_show=True),\n",
    "        ),\n",
    "        xaxis_opts=opts.AxisOpts(type_=\"category\", boundary_gap=False),\n",
    "    )\n",
    ").render_notebook()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 5.4 常用的配置项"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 提示框配置项"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "(\n",
    "    Line()\n",
    "    .add_xaxis(Faker.choose())\n",
    "    .add_yaxis('组A', Faker.values())\n",
    "    .add_yaxis('组B', Faker.values())\n",
    "    .set_global_opts(\n",
    "        tooltip_opts=opts.TooltipOpts(trigger='axis')\n",
    "    )\n",
    ").render_notebook()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 视觉映射配置项"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "(\n",
    "    Line()\n",
    "    .add_xaxis(aqi_data['日期'].tolist())\n",
    "    .add_yaxis('', \n",
    "               aqi_data['AQI'].tolist(), \n",
    "               is_smooth=True,\n",
    "               is_symbol_show=False\n",
    "      )\n",
    "    .set_global_opts(\n",
    "        title_opts=opts.TitleOpts(title='空气质量指数'),\n",
    "        tooltip_opts=opts.TooltipOpts(trigger='axis'),\n",
    "        visualmap_opts=opts.VisualMapOpts(\n",
    "            pos_top=\"10\",\n",
    "            pos_right=\"10\",\n",
    "            is_piecewise=True,\n",
    "            pieces=[\n",
    "                {\"min\": 0, \"max\": 50, \"color\": \"#096\"},\n",
    "                {\"min\": 50, \"max\": 100, \"color\": \"#ffde33\"},\n",
    "                {\"min\": 100, \"max\": 150, \"color\": \"#ff9933\"},\n",
    "                {\"min\": 150, \"max\": 200, \"color\": \"#cc0033\"},\n",
    "                {\"min\": 200, \"max\": 300, \"color\": \"#660099\"},\n",
    "                {\"min\": 300, \"color\": \"#7e0023\"},\n",
    "            ],\n",
    "            out_of_range={\"color\": \"#999\"},\n",
    "        ),\n",
    "    )\n",
    ").render_notebook()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 折线样式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "(\n",
    "    Line()\n",
    "    .add_xaxis(Faker.choose())\n",
    "    .add_yaxis(\n",
    "        '组A', \n",
    "        Faker.values(),\n",
    "        symbol='triangle',\n",
    "        symbol_size=20,\n",
    "        linestyle_opts=opts.LineStyleOpts(color=\"green\", width=4, type_=\"dashed\"),\n",
    "        itemstyle_opts=opts.ItemStyleOpts(\n",
    "            border_width=3, border_color=\"yellow\", color=\"blue\"\n",
    "        ),\n",
    "    )\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
}
