{ "cells": [ { "cell_type": "code", "execution_count": 7, "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 order by re_date\"\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": 8, "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": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "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", "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[4])\n", " y_data4.append(value[5])\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", " .add_yaxis(\"平均步频\", y_data4,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=(max(y_data3)-min(y_data3))/5,\n", " axislabel_opts=opts.LabelOpts(formatter=\"{value} km/h\"),\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_=0,\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": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", "\n", "\n", "
\n", " \n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bar.overlap(line).render_notebook()" ] }, { "cell_type": "code", "execution_count": 5, "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": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "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", "\n", "colors = [\"#5793f3\", \"#d14a61\", \"#675bba\"]\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[6])\n", " y_data2.append(value[5])\n", " y_data3.append(value[2])\n", "bar = (\n", " Bar()\n", " .add_xaxis(x_data)\n", " .add_yaxis(\n", " series_name=\"平均步幅\", \n", " yaxis_data=y_data1,\n", " yaxis_index=0,\n", " color=colors[1],\n", " gap=\"0%\"\n", " )\n", " .add_yaxis(\"平均步频\", yaxis_data=y_data2, yaxis_index=1, color=colors[0],gap=\"0%\") \n", " .extend_axis(\n", " yaxis=opts.AxisOpts(\n", " name=\"平均步幅\",\n", " type_=\"value\",\n", " min_=0,\n", " max_=200,\n", " position=\"right\",\n", " axisline_opts=opts.AxisLineOpts(\n", " linestyle_opts=opts.LineStyleOpts(color=colors[1])\n", " ),\n", " axislabel_opts=opts.LabelOpts(formatter=\"{value} 厘米\"),\n", " )\n", " )\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", " position=\"left\",\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_=0,\n", " max_=200,\n", " interval=50,\n", " position=\"right\",\n", " offset=40,\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=2,\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": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", "\n", "\n", "
\n", " \n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bar.overlap(line).render_notebook()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "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.2" } }, "nbformat": 4, "nbformat_minor": 4 }