102 lines
24 KiB
Plaintext
102 lines
24 KiB
Plaintext
|
|
{
|
|||
|
|
"cells": [
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"\n",
|
|||
|
|
"# Bar plots\n",
|
|||
|
|
"\n",
|
|||
|
|
"An example of bar plots with matplotlib.\n"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 2,
|
|||
|
|
"metadata": {
|
|||
|
|
"collapsed": false,
|
|||
|
|
"jupyter": {
|
|||
|
|
"outputs_hidden": false
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"data": {
|
|||
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAnQAAAHcCAYAAABfzjfRAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAQMtJREFUeJzt3X9U1VW+//EXYAhX87ciKSKSCYolgj8A0UkTLzZqTo6Yd7AcHSO0VMZpwYBfDVMrzY61grQ0Ri3lzqBj0zAp1aiQjk0G3Zkks7QoPKQy5c9REs73D6/nejpA/DgHzgeej7VYq7M/+/PxvWeceM3+nL23m8VisQgAAACG5d7cBQAAAKBxCHQAAAAGR6ADAAAwOAIdAACAwRHoAAAADI5ABwAAYHAEOgAAAIMj0AEAABhcm7p0qqqq0qlTp3TrrbfKzc3N2TUBAAC0ehaLRRcuXNBtt90md/fa5+DqFOhOnTolPz8/hxQHAACAuvvqq6/Uu3fvWvvUKdDdeuut1gd26NCh8ZUBAACgVufPn5efn581h9WmToHuxmvWDh06EOgAAACaUF2+7saiCAAAAIMj0AEAABgcgQ4AAMDgCHQAAAAGR6ADAAAwOAIdAACAwRHoAAAADI5ABwAAYHAEOgAAAIMj0AEAABgcgQ4AAMDgCHQAAAAGR6ADAAAwOAIdAACAwRHoAAAADI5ABwAAYHAEOgAAAIMj0AEAABgcgQ4AAMDgCHQAAAAGR6ADAAAwOAIdAACAwRHoAAAADI5ABwAAYHAEOgAAAIMj0AEAABgcgQ4AAMDgCHQAAAAGR6ADAAAwOAIdAACAwRHoAAAADI5ABwAAYHAEOgAAAIMj0AEAABgcgQ4AAMDgCHQAAAAGR6ADAAAwOAIdAACAwRHoAAAADI5ABwAAYHAEOgAAAIMj0AEAABgcgQ4AAMDgCHQAAAAGR6ADAAAwOAIdAACAwRHoAAAADI5ABwAAYHAEOgAAAIMj0AEAABgcgQ4AAMDgCHQAAAAGR6ADAAAwOAIdAACAwRHoAAAADI5ABwAAYHAEOgAAAIMj0AEAABgcgQ4AAMDgCHQtWEZGhgICAuTl5aWwsDDl5+fX2Pehhx6Sm5ub3c+gQYOsfb7//nulp6crMDBQXl5euuuuu/TWW281xVAAAEAtCHQtVHZ2thYtWqTU1FQVFhYqOjpasbGxKikpqbb/+vXrZTabrT9fffWVunTpop///OfWPmlpadqwYYNeeOEFHT16VAkJCZo6daoKCwubalgAAKAabhaLxfJjnc6fP6+OHTvq3Llz6tChQ1PUhUYaMWKEhg4dqszMTGtbcHCw7rvvPq1evfpH7//jH/+on/3sZzp58qT8/f0lSbfddptSU1M1f/58a7/77rtP7du317Zt2xw/CAAAWrH65C9m6FqgiooKHTlyRDExMTbtMTExOnjwYJ2esWnTJt1zzz3WMCdJV69elZeXl00/b29vFRQUNL5oAADQYAS6Fujs2bOqrKyUj4+PTbuPj4/Kysp+9H6z2ay//OUvmjt3rk37hAkTtG7dOh0/flxVVVXKy8vT7t27ZTabHVo/AACoHwJdC+bm5mbz2WKx2LVVJysrS506ddJ9991n075+/Xr1799fQUFB8vT01IIFCzR79mx5eHg4smwAAFBPBLoWqFu3bvLw8LCbjTt9+rTdrN0PWSwWbd68WfHx8fL09LS51r17d/3xj3/UpUuX9OWXX+qTTz5R+/btFRAQ4PAxAACAuiPQtUCenp4KCwtTXl6eTXteXp4iIyNrvXf//v367LPPNGfOnBr7eHl5qVevXrp27ZpycnI0ZcoUh9QNAAAapk1zFwDnSEpKUnx8vMLDwxUREaGNGzeqpKRECQkJkqSUlBSVlpZqy5YtNvdt2rRJI0aMUEhIiN0zDx8+rNLSUg0ZMkSlpaVavny5qqqq9PjjjzfJmAAAQPUIdC1UXFycysvLlZ6eLrPZrJCQEOXm5lpXrZrNZrs96c6dO6ecnBytX7++2mdeuXJFaWlpOnHihNq3b6+JEydq69at6tSpk7OHAwAAasE+dAAAAC6IfegAAABaEQIdAACAwRHoAAAADI5ABwAAYHAEOgAAAIMj0AEAABgcgQ4AAMDgCHQAAAAGR6ADAAAwOAJdDTIyMhQQECAvLy+FhYUpPz+/1v5Xr15Vamqq/P391bZtWwUGBmrz5s02fUwmkwYMGCBvb2/5+flp8eLFunLlijOHAQAAWgHOcq1Gdna2Fi1apIyMDEVFRWnDhg2KjY3V0aNH1adPn2rvmT59ur755htt2rRJt99+u06fPq1r165Zr7/22mtKTk7W5s2bFRkZqU8//VQPPfSQJOm5555rimEBAIAWirNcqzFixAgNHTpUmZmZ1rbg4GDdd999Wr16tV3/t956SzNmzNCJEyfUpUuXap+5YMECFRcX65133rG2/frXv9b777//o7N/tamqktxddJ7VlWsDAMDV1Sd/MUP3AxUVFTpy5IiSk5Nt2mNiYnTw4MFq73njjTcUHh6uZ555Rlu3blW7du00efJkrVixQt7e3pKkUaNGadu2bXr//fc1fPhwnThxQrm5uXrwwQcbVa+7u/Tuu9K33zbqMQ7XubM0dmxzVwEAQOtAoPuBs2fPqrKyUj4+PjbtPj4+Kisrq/aeEydOqKCgQF5eXtq1a5fOnj2rxMRE/etf/7J+j27GjBk6c+aMRo0aJYvFomvXrumRRx6xC44N8e23Unl5ox8DAAAMihdiNXBzc7P5bLFY7NpuqKqqkpubm1577TUNHz5cEydO1Lp165SVlaV///vfkqR9+/Zp5cqVysjI0IcffqidO3fqzTff1IoVK5w+FiNz9OKUrKwsubm52f2wOAUAYGTM0P1At27d5OHhYTcbd/r0abtZuxt8fX3Vq1cvdezY0doWHBwsi8Wir7/+Wv3799fSpUsVHx+vuXPnSpIGDx6sS5cuad68eUpNTZU7Xzaz44zFKZLUoUMHHTt2zKbNy8vLaeMAAMDZSBE/4OnpqbCwMOXl5dm05+XlKTIystp7oqKidOrUKV28eNHa9umnn8rd3V29e/eWJF2+fNkutHl4eMhisagO61JapXXr1mnOnDmaO3eugoODZTKZ5OfnZ7NY5WZvvfWW9u/fr9zcXN1zzz3q27evhg8fbvffm5ubm3r27GnzAwCAkRHoqpGUlKRXXnlFmzdvVnFxsRYvXqySkhIlJCRIklJSUjRr1ixr/5kzZ6pr166aPXu2jh49qgMHDug3v/mNfvnLX1oXRUyaNEmZmZnasWOHTp48qby8PC1dulSTJ0+Wh4dHs4zTld1YnBITE2PTXtfFKb169dIdd9yhJUuWWF9733Dx4kX5+/urd+/e+ulPf6rCwkKnjQMAgKbAK9dqxMXFqby8XOnp6TKbzQoJCVFubq78/f0lSWazWSUlJdb+7du3V15enh599FGFh4era9eumj59up588klrn7S0NLm5uSktLU2lpaXq3r27Jk2apJUrVzb5+IzAWYtTgoKClJWVpcGDB+v8+fNav369oqKi9NFHH6l///5OHxcAAM7APnQtQE6O661y7dpVuv/+ht9/6tQp9erVSwcPHlRERIS1feXKldq6das++eQTu3tiYmKUn5+vsrIy6/cZd+7cqWnTpunSpUvW2dKbVVVVaejQoRo9erSef/75hhcMAICD1Sd/8coVLskZi1Oq4+7urmHDhun48eOOKx4AgCZGoINLctbilB+yWCwqKiqSr6+v44oHAKCJEejgspyxOOWJJ57Qnj17dOLECRUVFWnOnDkqKiqyPhMAACNiUQRcljMWp3z33XeaN2+e9Xt2oaGhOnDggIYPH97k4wMAwFFYFNECtMRFEQAAtHYsigAAAGhFCHQAAAAGR6ADAAAwOAIdAACAwRHoAAAADI5ABwAAYHCtPtBVVTV3BdVz1boAAIDrafUbC7u7S+++K337bXNX8n86d5bGjm3uKgAAgFG0+kAnXQ9zrrYxLwAAQF21+leuAAAARkegAwAAMDgCHZqdKy8AceXaAAC4ge/Qodm54sIUicU
|
|||
|
|
"text/plain": [
|
|||
|
|
"<Figure size 640x480 with 1 Axes>"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"metadata": {},
|
|||
|
|
"output_type": "display_data"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"import numpy as np\n",
|
|||
|
|
"import matplotlib.pyplot as plt\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 生成 12 根柱子\n",
|
|||
|
|
"n = 12\n",
|
|||
|
|
"X = np.arange(n)\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 随机数发生器\n",
|
|||
|
|
"rng = np.random.default_rng()\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 上半部分:线性递减趋势 × 随机系数 [0.5,1]\n",
|
|||
|
|
"Y1 = (1 - X / n) * rng.uniform(0.5, 1.0, n)\n",
|
|||
|
|
"# 下半部分:同样趋势,负向显示\n",
|
|||
|
|
"Y2 = (1 - X / n) * rng.uniform(0.5, 1.0, n)\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 几乎铺满图窗的坐标轴\n",
|
|||
|
|
"plt.axes((0.025, 0.025, 0.95, 0.95))\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 绘制正负双向柱状图\n",
|
|||
|
|
"plt.bar(X, +Y1, facecolor=\"#9999ff\", edgecolor=\"white\")\n",
|
|||
|
|
"plt.bar(X, -Y2, facecolor=\"#ff9999\", edgecolor=\"white\")\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 在柱顶/柱底标注数值\n",
|
|||
|
|
"for x, y in zip(X, Y1):\n",
|
|||
|
|
" plt.text(x, y + 0.05, f\"{y:.2f}\", ha=\"center\", va=\"bottom\")\n",
|
|||
|
|
"for x, y in zip(X, Y2):\n",
|
|||
|
|
" plt.text(x, -y - 0.05, f\"{y:.2f}\", ha=\"center\", va=\"top\")\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 去坐标轴刻度,留出边距\n",
|
|||
|
|
"plt.xlim(-0.5, n)\n",
|
|||
|
|
"plt.xticks([])\n",
|
|||
|
|
"plt.ylim(-1.25, 1.25)\n",
|
|||
|
|
"plt.yticks([])\n",
|
|||
|
|
"\n",
|
|||
|
|
"plt.show()"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"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.12.11"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"nbformat": 4,
|
|||
|
|
"nbformat_minor": 4
|
|||
|
|
}
|