{ "cells": [ { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import matplotlib\n", "import matplotlib.pyplot as plt\n", "matplotlib.rcParams['font.sans-serif'] = ['SimHei'] #或者把\"SimHei\"换为\"KaiTi\"\n", "matplotlib.rcParams['axes.unicode_minus'] = False \n", "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "program_data = [[\"towers\", 1880, 10152, 18.52, 10144, 100, (10144/10152)*100, 0.0788],\n", " [\"dhrystone\", 4384, 286216, 1.53, 286080, 100, (286080/286216)*100, 0.0475],\n", " [\"vim\", 126712, 3528864, 3.59, 3528518, 100, (3528518/3528864)*100, 0.0098],\n", " [\"bash\", 35548, 2818904, 1.26, 2818690, 100, (2818690/2818904)*100, 0.0076],]\n", "# {\n", "# \"测试程序\" : \"towers\",\n", "# \"原程序体积\" : 10152,\n", "# \"优化后体积\" : 10144,\n", "# },\n", "\n", "data = pd.DataFrame(program_data, columns=[\"测试程序\", \"数据段体积\", \"原程序体积\", \"数据段占比\",\n", " \"优化后体积\", \"原体积比\", \"缩减后体积比\", \"代码缩减效率\"])" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
测试程序数据段体积原程序体积数据段占比优化后体积原体积比缩减后体积比代码缩减效率
0towers18801015218.521014410099.9211980.0788
1dhrystone43842862161.5328608010099.9524830.0475
2vim12671235288643.59352851810099.9901950.0098
3bash3554828189041.26281869010099.9924080.0076
\n", "
" ], "text/plain": [ " 测试程序 数据段体积 原程序体积 数据段占比 优化后体积 原体积比 缩减后体积比 代码缩减效率\n", "0 towers 1880 10152 18.52 10144 100 99.921198 0.0788\n", "1 dhrystone 4384 286216 1.53 286080 100 99.952483 0.0475\n", "2 vim 126712 3528864 3.59 3528518 100 99.990195 0.0098\n", "3 bash 35548 2818904 1.26 2818690 100 99.992408 0.0076" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "ename": "AttributeError", "evalue": "module 'matplotlib.pyplot' has no attribute 'bar_label'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mwidth\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0mp2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"缩减后体积比\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwidth\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mwidth\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtick_label\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"测试程序\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'优化后体积'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 9\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbar_label\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mp1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabel_type\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'edge'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 10\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbar_label\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mp2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabel_type\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'edge'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlegend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mp1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mp2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Original code size(%)'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'Reduced code size(%)'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mloc\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'lower right'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mAttributeError\u001b[0m: module 'matplotlib.pyplot' has no attribute 'bar_label'" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "\n", "total_width, n = 0.6, 2\n", "width = total_width / n\n", "x = list(range(len(data[\"测试程序\"])))\n", "p1 = plt.bar(x, data[\"原体积比\"], width=width, label='原程序体积')\n", "for i in range(len(x)):\n", " x[i] = x[i] + width\n", "p2 = plt.bar(x, data[\"缩减后体积比\"], width=width, tick_label=data[\"测试程序\"], label='优化后体积')\n", "plt.bar_label(p1, label_type='edge')\n", "plt.bar_label(p2, label_type='edge')\n", "plt.legend([p1,p2],['Original code size(%)','Reduced code size(%)'], loc='lower right')\n", "plt.ylim(99.9,100.01)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "\n", "p1 = plt.bar(data[\"测试程序\"], data[\"代码缩减效率\"], width=width, label='代码缩减效率')\n", "plt.bar_label(p1, label_type='edge')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fig = plt.figure()\n", "\n", "# 第1个坐标轴\n", "ax1 = fig.add_subplot()\n", "p1 = ax1.bar(data[\"测试程序\"], data[\"代码缩减效率\"], width=width)\n", "plt.bar_label(p1,label_type='edge')\n", "plt.ylabel('代码缩减效率(%)')\n", "ax1.legend(loc=\"best\")\n", "\n", "# 第2个坐标轴\n", "ax2 = fig.add_subplot(sharex=ax1, frameon=False)\n", "p2, = ax2.plot(data[\"测试程序\"], data[\"数据段占比\"], \"r\", marker='*', ms=10)\n", "ax2.yaxis.tick_right()\n", "ax2.yaxis.set_label_position(\"right\") # 画在右边\n", "plt.ylabel('程序数据段占比(%)')\n", "\n", "plt.legend([p1,p2],['代码缩减效率','程序数据段占比'])\n", "\n", "\n", "# x轴\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fig = plt.figure(figsize=(20,20))\n", "\n", "pic1 = fig.add_subplot(1,2,2)\n", "\n", "total_width, n = 0.6, 2\n", "width = total_width / n\n", "x = list(range(len(data[\"测试程序\"])))\n", "p1 = pic1.bar(x, data[\"原体积比\"], width=width, label='原程序体积')\n", "for i in range(len(x)):\n", " x[i] = x[i] + width\n", "p2 = pic1.bar(x, data[\"缩减后体积比\"], width=width, tick_label=data[\"测试程序\"], label='优化后体积')\n", "plt.bar_label(p1, label_type='edge')\n", "plt.bar_label(p2, label_type='edge')\n", "plt.legend([p1,p2],['原程序体积占比(%)','缩减后体积占比(%)'])\n", "plt.ylim(99.9,100.03)\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.2" } }, "nbformat": 4, "nbformat_minor": 5 }