paper-ParallelPython-Short/data/plots.ipynb

452 lines
97 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import pandas as pd\n",
"plt.rcParams['pdf.fonttype'] = 42\n",
"plt.rcParams['ps.fonttype'] = 42\n",
"\n",
"x = ['1K','10K','100K','1M','10M']\n",
"\n",
"term = pow (10,-6)\n",
"\n",
"labelfontsize = 22\n",
"ticfontsize=22\n",
"ticwidth=2\n",
"ticlength=6\n",
"mylinewidth=3"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>datasize</th>\n",
" <th>coldruntime</th>\n",
" <th>hotruntime</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1K</td>\n",
" <td>0.100575</td>\n",
" <td>0.055373</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>10K</td>\n",
" <td>0.091807</td>\n",
" <td>0.054508</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>100K</td>\n",
" <td>0.130599</td>\n",
" <td>0.077568</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1M</td>\n",
" <td>0.755035</td>\n",
" <td>0.330882</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>10M</td>\n",
" <td>4.626190</td>\n",
" <td>3.199181</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" datasize coldruntime hotruntime\n",
"0 1K 0.100575 0.055373\n",
"1 10K 0.091807 0.054508\n",
"2 100K 0.130599 0.077568\n",
"3 1M 0.755035 0.330882\n",
"4 10M 4.626190 3.199181"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# read data and setup plot metadata and settings\n",
"df=pd.read_csv(\"./scalability-write.csv\")\n",
"yseries = [ \"coldruntime\", \"hotruntime\" ]\n",
"colors = { \"coldruntime\": \"blue\",\n",
" \"hotruntime\": \"red\" }\n",
"serieslabels = { \"coldruntime\" : \"Cold cache\",\n",
" \"hotruntime\": \"Hot cache\" }\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"<ipython-input-11-4bdcd0e9c241>:21: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n",
" plt.axes().spines[axis].set_linewidth(ticwidth)\n"
]
},
{
"data": {
"text/plain": [
"<module 'matplotlib.pyplot' from '/Users/lord_pretzel/.pyenv/versions/3.9.0/lib/python3.9/site-packages/matplotlib/pyplot.py'>"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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li5dyuGHH84HH3xA9erFfxvVqVOHq666ipNOOolatWqlwUqHI73MnQtjx8KSJf60du2sV9WtWxyNDBrk390wK8tW+555ZtLtTZR4hvteBhoBd0QpcytQG3ixNEY5Uk+aI51EZNmyZTz//PMAPPbYY2EFKpD8/HyaNm0alLZnzx4eeughjjjiCHJzc6lRowYdOnTgmmuuYePGjXHbtHLlSk4//XQaN25MjRo16NixI3feeScFBQVxtxVo4+OPP06/fv1o0KABOTk55OXlMWTIEKaG/DNWrlzJbbfdRr9+/WjZsiU5OTk0aNCAfv368dxzz0W9zurVq5k4cSIdO3akVq1a5Obm0qFDBy644AIWRNjVTlV55JFHOOSQQ6hZsyb169dn2LBhEcsDbNy4keuuu46DDjqI2rVrU6tWLbp27cq9997Lnj174r9BjogUFtocU48ewQJ1+ukwb14cAvX++9C3r1+gatSAV1/NKIEC7AMZywHUBBYCBcAnwESgEPgAmOCdC4CvgexY261MBxZCStPNlCmqNWuq2vSqHTVrWnq6ue+++xTQgw46KKH6O3bs0L59+yqgNWvW1MGDB+uoUaO0SZMmCmirVq102bJlxepF+t8sXLhQGzZsqIC2bNlSR48ercccc4xmZ2frSSedpK1atVJAly9fHrONmzZt0h49eiigOTk52r9/fx0zZoweddRRWq9ePW3VqlVQ+ZtvvlkBbdeunQ4cOFBHjx6tvXr10qysLAX04osvDnudd955R3NzcxXQZs2a6fDhw3XEiBHapUsXrVKlit54441FZZcvX150f04//XTNycnRo48+WkeOHFn0HnNzc8Peu2+//VabNWumgLZo0UIHDx6sgwYN0gYNGiigAwYM0F27dsV8fxyR+eUX1WOPDf7u1q6t+uyzcTb0wguq1ar5G6lfX/XTT5Nub8D3KvHnZlyFzWtvlidOBQFn399fAs1LY1BFPpItUoEf1Ew4ksFpp52mgJ511lkJ1b/yyisV0Pbt2+tPP/1UlL59+3YdMWKEAtq9e/di9SL9b7p27aqAnnbaaUEP2gULFui+++5bVC8ekRo2bJgC2qNHD12zZk1Q3o4dO/Stt94KSvviiy90wYIFxdpZvHixtmzZUgH97LPPgvJWrlypderUUUBvvvlm3bNnT7H8OXPmFL32iRSgbdq00aVLlxbl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\n",
"text/plain": [
"<Figure size 432x216 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(6,3))\n",
"\n",
"for s in yseries:\n",
" plt.plot(x, df[s],color=colors[s],label=serieslabels[s],linewidth=mylinewidth,marker=\"o\")\n",
"\n",
"#plt.xticks(x)\n",
"plt.yscale(\"log\")\n",
"\n",
"# axes\n",
"plt.xlabel('Dataset size (rows)', fontsize=labelfontsize)\n",
"plt.xticks(fontsize = ticfontsize)\n",
"plt.tick_params(width=ticwidth,length=ticlength,which='both')\n",
"\n",
"plt.ylabel('Runtime (sec)', fontsize=labelfontsize)\n",
"plt.yticks(fontsize = ticfontsize)\n",
"\n",
"# grid and axis lines\n",
"plt.grid(visible=True, linewidth=2, color=\"black\",which=\"major\", axis=\"y\")\n",
"\n",
"for axis in ['top','bottom','left','right']:\n",
" plt.axes().spines[axis].set_linewidth(ticwidth)\n",
"\n",
"plt.tight_layout()\n",
"\n",
"# legend\n",
"plt.legend(fontsize=labelfontsize,handlelength=1.5,frameon=False)\n",
"# save\n",
"plt.savefig('../graphics/scalability-read.pdf')\n",
"plt"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "FileNotFoundError",
"evalue": "[Errno 2] No such file or directory: './scalability-read.csv'",
"output_type": "error",
"traceback": [
"\u001b[0;31m\u001b[0m",
"\u001b[0;31mFileNotFoundError\u001b[0mTraceback (most recent call last)",
"\u001b[0;32m<ipython-input-12-c3e1efa44641>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# read data and setup plot metadata and settings\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mdf\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"./scalability-read.csv\"\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 3\u001b[0m \u001b[0myseries\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m \u001b[0;34m\"coldruntime\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"hotruntime\"\u001b[0m \u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m colors = { \"coldruntime\": \"blue\",\n\u001b[1;32m 5\u001b[0m \"hotruntime\": \"red\" }\n",
"\u001b[0;32m~/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pandas/io/parsers.py\u001b[0m in \u001b[0;36mread_csv\u001b[0;34m(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, dialect, error_bad_lines, warn_bad_lines, delim_whitespace, low_memory, memory_map, float_precision)\u001b[0m\n\u001b[1;32m 686\u001b[0m )\n\u001b[1;32m 687\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 688\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_read\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwds\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 689\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 690\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pandas/io/parsers.py\u001b[0m in \u001b[0;36m_read\u001b[0;34m(filepath_or_buffer, kwds)\u001b[0m\n\u001b[1;32m 452\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 453\u001b[0m \u001b[0;31m# Create the parser.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 454\u001b[0;31m \u001b[0mparser\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mTextFileReader\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfp_or_buf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\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 455\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 456\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mchunksize\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0miterator\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pandas/io/parsers.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, f, engine, **kwds)\u001b[0m\n\u001b[1;32m 946\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moptions\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"has_index_names\"\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"has_index_names\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 947\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 948\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_make_engine\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mengine\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 949\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 950\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\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~/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pandas/io/parsers.py\u001b[0m in \u001b[0;36m_make_engine\u001b[0;34m(self, engine)\u001b[0m\n\u001b[1;32m 1178\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_make_engine\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mengine\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"c\"\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[1;32m 1179\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mengine\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"c\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1180\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mCParserWrapper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moptions\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 1181\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1182\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mengine\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"python\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pandas/io/parsers.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, src, **kwds)\u001b[0m\n\u001b[1;32m 2008\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"usecols\"\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0musecols\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2009\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2010\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_reader\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mparsers\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTextReader\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msrc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\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 2011\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munnamed_cols\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_reader\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munnamed_cols\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2012\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32mpandas/_libs/parsers.pyx\u001b[0m in \u001b[0;36mpandas._libs.parsers.TextReader.__cinit__\u001b[0;34m()\u001b[0m\n",
"\u001b[0;32mpandas/_libs/parsers.pyx\u001b[0m in \u001b[0;36mpandas._libs.parsers.TextReader._setup_parser_source\u001b[0;34m()\u001b[0m\n",
"\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: './scalability-read.csv'"
]
}
],
"source": [
"# read data and setup plot metadata and settings\n",
"df=pd.read_csv(\"./scalability-read.csv\")\n",
"yseries = [ \"coldruntime\", \"hotruntime\" ]\n",
"colors = { \"coldruntime\": \"blue\",\n",
" \"hotruntime\": \"red\" }\n",
"serieslabels = { \"coldruntime\" : \"Cold cache\",\n",
" \"hotruntime\": \"Hot cache\" }\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"<ipython-input-13-4bdcd0e9c241>:21: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n",
" plt.axes().spines[axis].set_linewidth(ticwidth)\n"
]
},
{
"data": {
"text/plain": [
"<module 'matplotlib.pyplot' from '/Users/lord_pretzel/.pyenv/versions/3.9.0/lib/python3.9/site-packages/matplotlib/pyplot.py'>"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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li5dyuGHH84HH3xA9erFfxvVqVOHq666ipNOOolatWqlwUqHI73MnQtjx8KSJf60du2sV9WtWxyNDBrk390wK8tW+555ZtLtTZR4hvteBhoBd0QpcytQG3ixNEY5Uk+aI51EZNmyZTz//PMAPPbYY2EFKpD8/HyaNm0alLZnzx4eeughjjjiCHJzc6lRowYdOnTgmmuuYePGjXHbtHLlSk4//XQaN25MjRo16NixI3feeScFBQVxtxVo4+OPP06/fv1o0KABOTk55OXlMWTIEKaG/DNWrlzJbbfdRr9+/WjZsiU5OTk0aNCAfv368dxzz0W9zurVq5k4cSIdO3akVq1a5Obm0qFDBy644AIWRNjVTlV55JFHOOSQQ6hZsyb169dn2LBhEcsDbNy4keuuu46DDjqI2rVrU6tWLbp27cq9997Lnj174r9BjogUFtocU48ewQJ1+ukwb14cAvX++9C3r1+gatSAV1/NKIEC7AMZywHUBBYCBcAnwESgEPgAmOCdC4CvgexY261MBxZCStPNlCmqNWuq2vSqHTVrWnq6ue+++xTQgw46KKH6O3bs0L59+yqgNWvW1MGDB+uoUaO0SZMmCmirVq102bJlxepF+t8sXLhQGzZsqIC2bNlSR48ercccc4xmZ2frSSedpK1atVJAly9fHrONmzZt0h49eiigOTk52r9/fx0zZoweddRRWq9ePW3VqlVQ+ZtvvlkBbdeunQ4cOFBHjx6tvXr10qysLAX04osvDnudd955R3NzcxXQZs2a6fDhw3XEiBHapUsXrVKlit54441FZZcvX150f04//XTNycnRo48+WkeOHFn0HnNzc8Peu2+//VabNWumgLZo0UIHDx6sgwYN0gYNGiigAwYM0F27dsV8fxyR+eUX1WOPDf7u1q6t+uyzcTb0wguq1ar5G6lfX/XTT5Nub8D3KvHnZlyFzWtvlidOBQFn399fAs1LY1BFPpItUoEf1Ew4ksFpp52mgJ511lkJ1b/yyisV0Pbt2+tPP/1UlL59+3YdMWKEAtq9e/di9SL9b7p27aqAnnbaaUEP2gULFui+++5bVC8ekRo2bJgC2qNHD12zZk1Q3o4dO/Stt94KSvviiy90wYIFxdpZvHixtmzZUgH97LPPgvJWrlypderUUUBvvvlm3bNnT7H8OXPmFL32iRSgbdq00aVLlxbl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\n",
"text/plain": [
"<Figure size 432x216 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(6,3))\n",
"\n",
"for s in yseries:\n",
" plt.plot(x, df[s],color=colors[s],label=serieslabels[s],linewidth=mylinewidth,marker=\"o\")\n",
"\n",
"#plt.xticks(x)\n",
"plt.yscale(\"log\")\n",
"\n",
"# axes\n",
"plt.xlabel('Dataset size (rows)', fontsize=labelfontsize)\n",
"plt.xticks(fontsize = ticfontsize)\n",
"plt.tick_params(width=ticwidth,length=ticlength,which='both')\n",
"\n",
"plt.ylabel('Runtime (sec)', fontsize=labelfontsize)\n",
"plt.yticks(fontsize = ticfontsize)\n",
"\n",
"# grid and axis lines\n",
"plt.grid(visible=True, linewidth=2, color=\"black\",which=\"major\", axis=\"y\")\n",
"\n",
"for axis in ['top','bottom','left','right']:\n",
" plt.axes().spines[axis].set_linewidth(ticwidth)\n",
"\n",
"plt.tight_layout()\n",
"\n",
"# legend\n",
"plt.legend(fontsize=labelfontsize,handlelength=1.5,frameon=False)\n",
"# save\n",
"plt.savefig('../graphics/scalability-read.pdf')\n",
"plt\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def gantt(infile,outfile):\n",
" import matplotlib.pyplot as plt\n",
" import numpy as np\n",
" import pandas as pd\n",
"\n",
" dfp = pd.read_csv(infile)\n",
" fig = plt.figure(figsize=(6,3))\n",
" x = dfp[\"cellid\"]\n",
"\n",
" plt.bar(x, dfp[\"start\"],color=\"white\")\n",
" plt.bar(x, dfp[\"end\"], bottom=dfp[\"start\"],color=\"blue\",zorder=3)\n",
"\n",
" # axes\n",
" plt.xlabel('Cell Position', fontsize=labelfontsize)\n",
" plt.xticks(fontsize = ticfontsize,ticks=[1,2,3,4,5,6,7,8,9,10,11])\n",
" plt.tick_params(width=ticwidth,length=ticlength,which='both')\n",
"\n",
" plt.ylabel('Runtime (sec)', fontsize=labelfontsize)\n",
" plt.yticks(fontsize = ticfontsize)\n",
"\n",
" # grid and axis lines\n",
" plt.grid(visible=True, linewidth=2, color=\"black\",which=\"major\", axis=\"y\")\n",
"\n",
" for axis in ['top','bottom','left','right']:\n",
" plt.axes().spines[axis].set_linewidth(ticwidth)\n",
"\n",
" plt.tight_layout()\n",
"\n",
" # legend\n",
" plt.legend(fontsize=labelfontsize,handlelength=1.5,frameon=False)\n",
" # save\n",
" plt.savefig(outfile)\n",
" plt"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"<ipython-input-16-3629198e8c08>:25: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n",
" plt.axes().spines[axis].set_linewidth(ticwidth)\n",
"No handles with labels found to put in legend.\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x216 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt = gantt(\"./gantt_parallel.csv\", \"../graphics/gantt_parallel.pdf\")\n",
"plt"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"<ipython-input-16-3629198e8c08>:25: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n",
" plt.axes().spines[axis].set_linewidth(ticwidth)\n",
"No handles with labels found to put in legend.\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x216 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt = gantt(\"./gantt_serial.csv\", \"../graphics/gantt_serial.pdf\")\n",
"plt"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"argv": [
"python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
],
"display_name": "Python 3",
"env": null,
"interrupt_mode": "signal",
"language": "python",
"metadata": null,
"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.9.0"
},
"name": "plots.ipynb"
},
"nbformat": 4,
"nbformat_minor": 4
}