{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": true }, "outputs": [], "source": [ "import pymysql\n", "import pyecharts\n", "from datetime import datetime\n", "\n", "db = pymysql.connect(\"localhost\",\"songyi\",\"yylzs\",\"mydata\" )\n", "cursor = db.cursor()\n", "item_id =1\n", "per_id = 1\n", "list_date = []\n", "dict_tar = {}\n", "dict_det = {}\n", "dict_date = {}\n", "## 获取项目信息\n", "sql = \"select a.id,a.name,a.unit from sports_target as a,sports_item_target as b where b.item_id =%s and a.id =b.target_id\"\n", "cursor.execute(sql, (item_id))\n", "results = cursor.fetchall()\n", "for result in results:\n", " dict_tar[result[0]] = [result[1],result[2]]\n", "## 获取运动记录信息\n", "sql = \"select id,re_date from sports_record where item_id =%s and person_id =%s\"\n", "cursor.execute(sql, (item_id,per_id))\n", "results = cursor.fetchall()\n", "for result in results:\n", " list_date.append(result[0])\n", " dict_date[result[0]] = result[1].strftime(\"%Y-%m-%d\")\n", "s_date = '' \n", "sql = \"select rec_id_id,target_id_id,value from sports_detail where rec_id_id in {}\".format(tuple(list_date))\n", "cursor.execute(sql)\n", "results = cursor.fetchall()\n", "for s in list_date:\n", " dict_det[dict_date[s]] = {}\n", "for result in results:\n", " s = result[0]\n", " dict_det[dict_date[s]][result[1]] = result[2]\n", "#print(dict_det)\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#柱状、曲线组合\n", "from pyecharts.globals import CurrentConfig, NotebookType\n", "CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB\n", "from pyecharts import options as opts\n", "from pyecharts.charts import Bar,Line\n", "import pyecharts.options as opts\n", "x_data = []\n", "y_data1 = []\n", "y_data2 = []\n", "y_data3 = []\n", "for key,value in dict_det.items():\n", " x_data.append(key)\n", " y_data1.append(value[8])\n", " y_data2.append(value[9])\n", " y_data3.append(value[2])\n", "bar = (\n", " Bar()\n", " .add_xaxis(x_data)\n", " .add_yaxis(\"平均心率\", y_data1,label_opts=opts.LabelOpts(is_show=False),gap=\"0%\")\n", " .add_yaxis(\"最大心率\", y_data2,label_opts=opts.LabelOpts(is_show=False),gap=\"0%\") \n", " .extend_axis(\n", " yaxis=opts.AxisOpts(\n", " name=\"运动时间\",\n", " type_=\"value\",\n", " min_=min(y_data3),\n", " max_=max(y_data3),\n", " interval=int((max(y_data3)-min(y_data3))/4),\n", " axislabel_opts=opts.LabelOpts(formatter=\"{value} 分\"),\n", " )\n", " )\n", " .set_global_opts(\n", " tooltip_opts=opts.TooltipOpts(\n", " is_show=True, trigger=\"axis\", axis_pointer_type=\"cross\"\n", " ),\n", " xaxis_opts=opts.AxisOpts(\n", " type_=\"category\",\n", " axispointer_opts=opts.AxisPointerOpts(is_show=True, type_=\"shadow\"),\n", " ),\n", " yaxis_opts=opts.AxisOpts(\n", " name=\"心率\",\n", " type_=\"value\",\n", " min_=100,\n", " max_=180,\n", " interval=20,\n", " axislabel_opts=opts.LabelOpts(formatter=\"{value} 次/分钟\"),\n", " axistick_opts=opts.AxisTickOpts(is_show=True),\n", " splitline_opts=opts.SplitLineOpts(is_show=True),\n", " ),\n", " )\n", " .set_global_opts(title_opts=opts.TitleOpts(title=\"运动心率\", subtitle=\"户外运动\"),)\n", ")\n", "line = (\n", " Line()\n", " .add_xaxis(xaxis_data=x_data)\n", " .add_yaxis(\n", " series_name=\"运动时间\",\n", " yaxis_index=1,\n", " y_axis=y_data3,\n", " label_opts=opts.LabelOpts(is_show=False),\n", " )\n", ")\n", "\n", "bar.overlap(line).load_javascript()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "bar.overlap(line).render_notebook()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#Grid - Grid_vertical多图组合\n", "from pyecharts.globals import CurrentConfig, NotebookType\n", "CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB\n", "from pyecharts import options as opts\n", "from pyecharts.charts import Bar, Grid\n", "import pyecharts.options as opts\n", "\n", "x_data = []\n", "y_data1 = []\n", "y_data2 = []\n", "y_data3 = []\n", "y_data4 = []\n", "for key,value in dict_det.items():\n", " x_data.append(key)\n", " y_data1.append(value[8])\n", " y_data2.append(value[9])\n", " y_data3.append(value[6])\n", " y_data4.append(value[5])\n", "bar1 = (\n", " Bar()\n", " .add_xaxis(x_data)\n", " .add_yaxis(\"平均心率\", y_data1,label_opts=opts.LabelOpts(is_show=False),gap=\"0%\")\n", " .add_yaxis(\"最大心率\", y_data2,label_opts=opts.LabelOpts(is_show=False),gap=\"0%\") \n", " .set_global_opts(\n", " tooltip_opts=opts.TooltipOpts(\n", " is_show=True, trigger=\"axis\", axis_pointer_type=\"cross\"\n", " ),\n", " xaxis_opts=opts.AxisOpts(\n", " type_=\"category\",\n", " axispointer_opts=opts.AxisPointerOpts(is_show=True, type_=\"shadow\"),\n", " ),\n", " yaxis_opts=opts.AxisOpts(\n", " name=\"心率\",\n", " type_=\"value\",\n", " min_=100,\n", " max_=180,\n", " interval=20,\n", " axislabel_opts=opts.LabelOpts(formatter=\"{value} 次/分钟\"),\n", " axistick_opts=opts.AxisTickOpts(is_show=True),\n", " splitline_opts=opts.SplitLineOpts(is_show=True),\n", " ),\n", " )\n", " .set_global_opts(title_opts=opts.TitleOpts(title=\"运动心率\", subtitle=\"户外运动\"),)\n", ")\n", "bar2 = (\n", " Bar()\n", " .add_xaxis(x_data)\n", " .add_yaxis(\"平均步幅\", y_data3,label_opts=opts.LabelOpts(is_show=False),gap=\"0%\")\n", " .add_yaxis(\"平均步频\", y_data4,label_opts=opts.LabelOpts(is_show=False),gap=\"0%\") \n", " .set_global_opts(\n", " tooltip_opts=opts.TooltipOpts(\n", " is_show=True, trigger=\"axis\", axis_pointer_type=\"cross\"\n", " ),\n", " xaxis_opts=opts.AxisOpts(\n", " type_=\"category\",\n", " axispointer_opts=opts.AxisPointerOpts(is_show=True, type_=\"shadow\"),\n", " ),\n", " yaxis_opts=opts.AxisOpts(\n", " name=\"心率\",\n", " type_=\"value\",\n", " min_=40,\n", " max_=180,\n", " interval=20,\n", " axislabel_opts=opts.LabelOpts(formatter=\"{value} \"),\n", " axistick_opts=opts.AxisTickOpts(is_show=True),\n", " splitline_opts=opts.SplitLineOpts(is_show=True),\n", " ),\n", " )\n", " .set_global_opts(\n", " title_opts=opts.TitleOpts(title=\"运动步频\", pos_top=\"48%\"),\n", " legend_opts=opts.LegendOpts(pos_top=\"48%\"),\n", " )\n", ")\n", "grid = (\n", " Grid()\n", " .add(bar1, grid_opts=opts.GridOpts(pos_bottom=\"60%\"))\n", " .add(bar2, grid_opts=opts.GridOpts(pos_top=\"60%\"))\n", " \n", ")\n", "grid.load_javascript()\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "grid.render_notebook()" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "new Promise(function(resolve, reject) {\n", " var script = document.createElement(\"script\");\n", " script.onload = resolve;\n", " script.onerror = reject;\n", " script.src = \"https://assets.pyecharts.org/assets/echarts.min.js\";\n", " document.head.appendChild(script);\n", "}).then(() => {\n", "\n", "});" ], "text/plain": [ "" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pyecharts import options as opts\n", "from pyecharts.globals import CurrentConfig, NotebookType\n", "CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB\n", "from pyecharts.charts import Bar\n", "from pyecharts.globals import ThemeType\n", "from pyecharts.faker import Faker\n", "c = (\n", " Bar(init_opts=opts.InitOpts(theme=ThemeType.VINTAGE))\n", " # 等价于 Bar(init_opts=opts.InitOpts(theme=ThemeType.WHITE))\n", " .add_xaxis(Faker.choose())\n", " .add_yaxis(\"商家A\", Faker.values())\n", " .add_yaxis(\"商家B\", Faker.values())\n", " .add_yaxis(\"商家C\", Faker.values())\n", " .add_yaxis(\"商家D\", Faker.values())\n", " .set_global_opts(title_opts=opts.TitleOpts(\"Theme-default\"))\n", " )\n", "c.load_javascript()" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", "\n", "\n", "
\n", " \n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c.render_notebook()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "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.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }