{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting graph with points given in file\n", "\n", "#### First we need to have file with points\n", "In this example I will just generate it." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1..100000" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "File.open('tons_of_data', 'w') do |f|\n", " (1..100000).each do |x|\n", " xx = x/1000.0\n", " yy = Math.exp(Math.sin(xx))\n", " f.puts \"#{xx} #{yy}\"\n", " end\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Plot points\n", "Ok, we have file with points so lets plot them:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAMAAAACDyzWAAABMlBMVEX///8AAACgoKD/AAAAwAAAgP/AAP8A7u7AQADIyABBaeH/wCAAgEDAgP8wYICLAABAgAD/gP9//9SlKir//wBA4NAAAAAaGhozMzNNTU1mZmZ/f3+ZmZmzs7PAwMDMzMzl5eX////wMjKQ7pCt2ObwVfDg///u3YL/tsGv7u7/1wAA/wAAZAAA/38iiyIui1cAAP8AAIsZGXAAAIAAAM2HzusA////AP8AztH/FJP/f1DwgID/RQD6gHLplnrw5oy9t2u4hgv19dyggCD/pQDugu6UANPdoN2QUEBVay+AFACAFBSAQBSAQICAYMCAYP+AgAD/gED/oED/oGD/oHD/wMD//4D//8DNt57w//Cgts3B/8HNwLB8/0Cg/yC+vr6fn58fHx+/v79fX1/f398/Pz+/PMttAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAWpklEQVR4nO2dCZajOBBE4Rzcx+dgvf8VyuDyikC7MlJEvDfVZRxCoczP4qWnm4aiKIqiKIqiKIqiKIqiKIqiKIqiKIqiKIqirqluaIdeOgR1WU3d3MxLLx2DuqrG9cc8SMegLi0CSElqnnrpCNSF1baTdATq0tqdAVuKOlNyAn/uAcMmCIxV7WQKIpadzKh+/UEAcUZVPJlRxvcB660BARSczKxpaIcxyQQaakAABScDmoBSLQJIiYoAUi/Nw1e3irSOAFYs3/fa2u8b+M9hS7JQv3Pm2nGxCahT+dS/PX6Y7RN+Ali5HvXvH9/UHMahXeb743lpH798PDt+nCv7pV3Gdv1g6/7UtJ1Lp9eDDPkyigDKaqt/P4z3G7yxWaHr1qvp+m5t/7ysPp9992oc5mZc2tU337mbHk+9HiTPl1MEUFZb/Zf15m5ctpu8uW1+uvJ89r31seX5cP1w6/VU6q/bEcDKtdW/3S677f+D+3/T1M9vy/+z715tkM3txz7ebUzcUAJYuV7MrT/fD7rhfQ/4fLZpm98td9+w3Rn+Dxp2L6lvPjrKl1MEUFZb/YftHDd80tjM4/Me8PnsD4DrGXDq5vnF5utB8nw5RQBl9X0P+Nry+cvBPWD/PPGN/7+8HiTPl1MEUFavV8Hj0L8B3L0KXp9996q/X57H9WOR+9a5X+6nyPVF8utB8nw5RQBl9fU+4AvA0fA+4Gevnu8D3n3DNHftHcfh/SB9vowigNSZCCAlKgJIiYoAUqIigJSoCCAlKgJIiYoAUqIigJSoCCAlKgJIiYoAUqIigJSoCCAlKgJIiYoAUqIigJSoCCAlKgJIiYoAUqIigJSoigFo/GvxX7I7miSOBEFKLUZRVLvDbFEFoEupQHrm4oAJEu8I34kyAG0WTV21njWAFpMvKhSA1mXae4bT1RKLwTlWguuOBGCKZZbqKkbUNEeTaN0LAgjSsyRdRYma5Gi6CIAgHUnTVZAgLkcTShBhAG/2V+pApYIJksABE4QAOjtsFqTTii0qet1xACzX1eieAXU1Pqpw3YEALNXVBD3D6WqJxWSNSgCFHDAnawLYODv09CxRVzGiZq27KgBdugrSs6oAzFl3AijogAkS6yCATwdKR5wcMEEk664MQItFV1dhgkSfrCMWQwCzOWKjIp3O89WdAOZyREetajFKAMzfs3KnFU0ACtYdCsACPSvXVUZ1chBAkwXjpGF3EEC7KgUQImoNiykJIEJHUp1WMKJaHfh1jwSwG9r1H/LcNLWrBvMEKB1J1VWIIDVEjQNw6uZmXvrHg8X4D8k+JrjBF+LbARMk1gET5MgRB2C//pj/T3qnAL5+HAqpVDBB6l9MgnvAJ4Dmf0q7QgDxTytfDpgguQDsusefw/ovavfmCfAL8eWwAGh1wNwtYEU1PREPYL/8/7LcbwjHHYEEMK8jNqr06TwawG76ejjuXgWvAitEbM+sDk0AWh356v5gI0rz1P3u1PgYqhCaemZ1KFqM0RIJ4DK+f99eg4zLj+OSABY8nV8bwKn/2E/cPaB0IQo76osqAmD70LztZ56GiFfB0oUo7FAUNdnpPMcl2K50ALoWAqFnVocmAK2OmLprAtDqgOnIFQEM3AkBFHLoOVkTQGcHTEccHTBBCKB8ISQcMEFSnM6vAuCZJaYQEg6YILF1//jpO402AE8t2roKE0Sw7gRQ0HG+GEVRrQ4C6DkNwFULazEE8HI9q2oxagDM3bOS1zUC6OLAAjB7z0p2lVFdHATQaFHRVUVRCaCzA+duIYFDQd0JoNGiImoViyGARouKqFUspiiA8h1J11WAIM4AygfBABCgI5cEECAIAUzogAni4IAJcugoA+DtM4ZZ0oX4ccAESeCACUIA6+iZrwMmCAFM0jMF17VvB0wQApgGQKsD5m4BLarhGQJodCgCUFFUZADBrmuKuhoXVbzuMABaHTg9szo0AWh1ZL5bIIAZHATQfRoCmMNBAJ2nIYAijqirVsog4nUngCKOGqPWDmDC65qirspHzVx3RQBaHTBXrboAtDqi6l4hgPIduSaAYTshgDIOAvgvAijqgAkS4yCAKXdS1AEThACKF0LEARMkxf3EVQA8tujrKkwQucWoA/DEoq+rMEHk6k4AJR0wQQigeCFyOGKiRt1YZXAQQH0ARkWtajEE0Hsa8ahVLUYRgHl7Vva6RgAdHGAAZu5Z2a4qipr7wD92EECz5WIAytWdAJotGrqqKOqxgwCaLchXLWeHhroTQLNFQdQ6FkMAzRYFUetYTFkApTuSsqviQTwAlA6CAqB4Ry4KoHgQApjQAROkjqhFALyJL9PfARMkgQMmiBiAv0H2Ei/E7zMoQWpfDAE0O2CC1L4YAmh2HFsU3k/ABCGAzo4TAK2O0otRFHX/FAE0OxQBqChqbgC7oR1GwwQaCvH7jJ6uxkSVv59ICeDUzc289PsJ8Loa0zOrQxOAVocmAPv1xzzsJ4ArhO6eOQeBW4zBkvwekAASQJ9pkgPYdfsJNBQipYMAuk+TGsB+MUygoRBFHXVGRQCwm3YT3KWhEEUddUb1XszKRlIA56nbbUt1Bkx6XVPUVemoueueFMDl903AJiGAVgdOz6wOTQBaHe/FhOwk6fuAvWEjATyzVLWYoJ2kBLB9aN5NoKEQZR0E8CmQz4LlCyHkgAkS7iCAKXdS2AEThADGO2A6QgA9HAoBPLLcUDpyMQDj6q4PwEOLxq7CBIk58A2/uU9DAEUdMEHE6k4ARR3Hi1EU1eoggAHTCF+18BZDAG2WqnpW1WIIYMA0BNA1SGUA5uxZ6RsrAmh3oAGYtWelu6ooat4D/8RBAA8sFwNQrO4E8MCC31VFUU8cBPDAAnzVcnWoqDsBPLDAR61kMQTwwAIftZLFFAYQvWc+XVUUFXgxZQGE71mlAAJHJYCeDpgglUQtAeBNfpnpHDBBHBwwQU4cRQA0RfmWfCF221GCVL4YAnjggAlS+WII4IHjyKLiurbbjhKEADo7DgG0OsovRlHU3XME8MChCEBFUQmgs0NRVxVFRQWw/I1VcM8AuxoeFWAxIABaHeyZfxDExewsBDC5gwD6TEMA0zsIoMc0BFDAEXnVShcEoO4EUMBRa1QC6OxQ1FXZqInvJ/QC6FcI2Z5ZHZoAtDquAqDVAdORCwMYsBMCKOCoFcCQnRBACQcBfIkACjtggoQ6CGDKnRR3wAQhgLEOmI5cDMDb9QA0W3R2FSaI1GIUAnhg0dlVmCBSdSeAsg6YIATQ2XEFABEXQwDPLVX1rKrFEMCgaQigWxAC6O7Q07OqADytOxyAGXtWvquKoga/uRXpIIBHlosBKFV3AnhkQe+qoqhnDgJ4ZMG9ajk6dNSdAB5ZwKPWshgCeGQBj1rLYkoDiN0zvxsrApjAURhA8J75dVVRVNwDnwD6OWCC1BK1AIA3gGUmc8AE8bufwI1aAsCjMOatMA6YIAkcMEFSAzhP7x1M7aphN4GOQuy3ogSpezFxAPZD/97BMpsslQGo47q234oSJDGA09xcDUCrA+ZuATPq75PR94DvHQwEMEuQqqJmBXBc2qHfP6+jEPuteroaGhXhfiIhgEs3N+OOQBcAJQoR2jOrQxOAVocqADeNu1fB7a398KAUQnPPHINALubrwfa2iXGIh353sH+MX4ikDgLoNU1CALfXIOOye15HIdI5CKDPNKkAbKPuAa0ORT1LvhhFUYsD2LbPy3i7fioyBL4KRihEQUe9USXOgDalATD5dU1RVyWj5q+7FgCtDpyeWR2aALQ6vhfjvxMCWN5RL4ABOyGAAg4C+BYBlHbABAlzEMCUOxFwwAQhgHEOmI5cDMDbFQE0WbR2FSaIUN01Ami0aO0qTBChuhNAYYd5MYqiWh0EMHAawasW5mII4Jmlqp5VtRgCGDgNAUy0GG0A5uqZRFcVRRWqOx6A2XpGAHMEIYAJHZq6qijqqYMAHm6EvWq5OZTUnQAeboSOWs1iCODhRuio1SymOIDIPfPtqqKosHUvDSB0zyoGEDYqAfRywARxcMAEOXXkB1BJIQwOmCAJHDBBBAD8foxaCMM2lCBVL4YAHm9DCVL1Ygjg8TaDBXUxiqL+PEsAj7fp6aqiqATQ2aGoq2FRIV4eIgAoU4iwnlkdmgC0OgrUHQJAq+PiPbM6FC3m9yEBTO0ggF7TEMDiDpi7BYi6E8Dijpqj1gpghuuaoq7KRS1QdyUAWh04PbM6NAFodUTfLRDA4o6aAfTfCQEs74g9aSA5CGDKnYg4YIIQwBgHTEcuBuDv+fsiAO4t0YUQc8AECau75bF1GpUAGix6uwoTRKbuBFDaYVqMoqhWBwEMnkbsqoW6GAJ4bKmqZ1UthgA+t+jpWVUAWuoOCGCmnsl0VVHUTHcLFgcBPN50MQBl6k4AjzehnjQMExPAQ1UNoFjUehZDAI83AUetZzHlAcTtmX9XFUVFrXtxAIF7VjWAqFEJ4IkDJkiIAybI+eMC/3/A8wCGLSgOmCA1L4YAnmxBCVLzYgjgyZaADTB3C7hRvx8SwJMterqqKCoegFK3yymaiNLVoA0E0HUDTs+sGzQBaN1Q4sAngGk3EEDPaZICOE/73V0MwDyLURTV6sgIYD/0BNC6oe6oogBOs2F3KQAMuV1GaaJmALO8TMl5CTbtLgmA1g04PbNu0ASgdUP8gU8Ai2+oGkDvDQRQfgNMEP8NGgBc5REobANMRy6WPe7g2bERr1JnwOhbD6ANMEFEbh90Ari/97U6cDfABBGpOwHMvcE/Ku7pHBzAtjVc1K8OYEDUqhZT+Ay4VwiAOXpW88dZxTZkqDsigFl6JtVVRVFFvp9FADNvyLMYRVEtDgIYt0Emap7FEMCjLeyZt0PNYgQARO2Z3r/YY9qi5WRdHkDYnoV0lVFjHQTwzAETxN8BE8TiIIAnDpggFS+GAJ44fjchn1Z+o+4cOFG/HhHAE8cOQKuDUfUByP/NrQyAIKdzAAD3Y2B7ZnVoAtDqKHLgE8C0DgJodTQEMDSIWFcVRa0RwLDTikjPqgKwyL9zpwJAqwOnZ1aHJgCtjgQHPgEs7dBzsi5SdwIo74AJQgDdHbezh+mmKeKACSJRd6UA/mzT3VWYIBJ1J4DZHb5RkU/nBNC8DRlA76h1LUYngOl7Jnda0QRghrrbHJAAZuiZXFdzLEZRVJuDAJ5ZME8a2RZzFQAxexZ2WpGJanUQwLMJMHsW1lVFUTEPfAJ46oAJ4uuACWJzEMAzB0yQehdDAM8c3xuxTys3mwMn6ucDcQChu9ro6apvVJS6ywNoGoR50qgLQKujTN2vDGD6nuU7raSPanWUqTsBLOuoP2p9AIaeVgR6VhWAoYvx24kGAK0OmI5kO5owF5NiJwQQwAEThAC6O25HD9JOU8QBE8S37ibHRQBsUhcCBkDsoyl53Qlgdodn1KoWoxbA1D2TPK1oAjB53a0OTACTLzNjV8tHzXc0CdSdAJ5aIKNWtRgRABF7FtpVRVEh6y4BIGTPDhwwQfwcMEGsDgJ46vjcrKir9sXARCWAp44vAK0ORVFhjiZpAGUL4dczq0MTgFZHobqLA2gepbNnOY+m1FGtjkJ1xwcwvKvFe5axq+WjFqq7AgCtDpye2R2KALQ6kuykBgAPuorYswMHTJDydVcL4Md2/V2FCeLgSFx3AljA4RMVfTGpo6ICmLZnshdpv6hWh6JjxWExoAAmXmbWrpaOmvNoKl93GQCL98zu0NOziKMJL+pNBEDAnh06YIL4OGCC2B2RAPZDO/T/v0/tquHHoRzA9xP4Xb3ZHDhR37/FATgO4/bfpmU2Wc4BlO6qR8/gu+oTFafucQBO/f1HPz0eBAF4tGfAntkdeo4VnLrHATiszM3Dx4OdYgGM6WrhnmXtaumopeoeB2D78bMZxuV9Q/hjOZz/aM8pulq8Z3aHnmOlVN0TArh08/2GsDdaDuc/2rOD4/b7S55pijgaRYu52RxSAG4ad6+CVx3Pf7Rnj2Uq6GrKxUgDmLDudzJS3gM+9LvDwDOgzzITOGDwEj+aStc9wavg7v9V8PYaZFx+LGYAC/fM7ih0SijigMHLpe5xAM7b+4Area3XPSBcz04ct+8/5YK4O2CCODgiPwkZh/bxPvR9P/M0uL4KbmC6erM5GmeHfFfdF4MTVeazYJiuugeR72rKqFZHsbqjAxjX1aI9i1sMWlSrI1Hd4QE8cdw+/8g3TREHTJDSdccF8GZzNM4OmJ4dO5wXoyiqU92lAEy4zBQOmJ7ZHYqi2h1iAJZdZpzj9v4pG8TuUBT1+VMUQIRS3WyOxtXBqD6OZ1RZAM8GJilVup6lcNQS9ePngcM9CDqAp45bYylV0Z6dOm42R6NtMdaduC1GDEBrR1x7ZnckKtWJI1lUuyN71MKLkQJwDXBezHTLPHfcnBwQUe0Op6gYi/mvuyiA5yMdSnVzcLhMk8IR3Xe3I8EeJIWjXN3lALxZE1odjZPDWgirI0FUt8XERy2ymJR1FwPwPr11ESAOmCA1LkYOQIpqCCAlLAJIiYoAUqIigJSoCCAlKgJIiYoAUqIigJSoCCAlKgJIiYoAUqIigJSoCCAlKgJIiYoAUqIigJSoCCAlKgJIiYoAUqIigJSoCCAlKgJIiYoAUqIigJSoCCAlKgJIiYoAUqIigJSoCCAlKgJIiYoAUqIigJSoCCAlKgJIiYoAUqIigJSoCCAlKgJIiYoAUqIigJSoCCAlKgJIiYoAUqIigJSokvLRD+3Q55yAqk4p+RiHcfsv2wRUfUrJx9Tff/RTigkCY1U7mYKIZSczapjvP+YhxQQaakAABSc72Vdr2hi2q0LDFEymICIBrHkyBRFhAaSoMyUE0HgPSFGlNPX3H91kcVFUJs3b+4CzdAzqshqH9vd9aIqiKIqiKIqiKIqiKIqiKIrKKdOX9E81T23IyO75FrjXsO5p9o7Zt77Dpu2T98F3snlph8k74vtzfq9h49Iu/lXcMvoN23fZuwNuMn5J/0z98Git58ipm+9l6D2HhY1aNQ+tb8bl+RGl16g13rx+vO4d8fHddK9h/XSvx9T7Tjbeoe3XT2Cdh+27HLA8J019s/+S/umA+f/rXH4jV/P2PRyvYWPQqFXL2PpmfAHoNarr1p99QMTHp/Jew17fZvKbbDtprgeJ87B9l/1mdFfIF7Ta0JGr239YyKiu31J6DXt9ScNr1PI8KfgvbD21B0T0r8fWsNFz2E+Xc32Tz/gVVY8xXiPXs4X3sO2S4zlqXB5mr2HD/QZru8vxHrWdO70Xtob0HNYvc0g9toNkvST4DPvpcggovtOEjPEZ2S8Bw9p28h41r4erN4DL/YZzXAn0GrW+KBiXOaAej3On37D1hZJ/PcYt4+UBfHwRtsQZcOqaAAA3rRcqPwC3s8viP9f/5cz/DLheub2vCPfjxHNlhQAsdg84b1SUuQf8f4+jC1ld63tb9jyPed+mBtQj5o5sXiDvAae+8f6S/sfrI/eRz5t1r2Gr9/2qzy9m6zvZ9hpkPZd5jdqOqzEg4n9BvIZ9vwp2nmw1b8D7DPvpst+M7gr5kn4bMHLqQyZ8vQ8YELP1nex1D+g1ar6PGEMi/lu9hr1ehHgWv2se7wP6DPvpcra/zeH7Jf33W/heI/+HzZ7DpqfZ/+8StL7D5un5Xr/XZK8PJzwjPm+n/CYLq8f9tcvjXU7XYYYu829zUBRFURRFURRFURRFURRFURRFURRFURRFURRFZdUfJmyD0FFNQEEAAAAASUVORK5CYII=", "text/plain": [ "#" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "require 'pilot-gnuplot'\n", "include Gnuplot\n", "\n", "graph = Plot.new(['tons_of_data', title: 'Tons of data', with: 'lines'])\n", "graph.to_png('tons.png')\n", "File.open('tons.png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting graph with points given as array\n", "This example will show how to plot graph from points in polar coordinate system." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "#" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "include Math\n", "\n", "def butterfly_point(angle)\n", " 8 - \n", " 1.2 * sin(angle) +\n", " 2 * sin(3 * angle) +\n", " 2 * sin(5 * angle) -\n", " sin(7 * angle) + \n", " 0.8 * sin(9 * angle) -\n", " 0.3 * sin(11 * angle) +\n", " 4.8 * cos(2 * angle) -\n", " 2 * cos(4 * angle) +\n", " 0.8 * cos(13.2 * angle)\n", "end\n", "\n", "θ = (0.0..10*PI).step(0.01).to_a\n", "r = θ.map { |angle| butterfly_point(angle) }\n", "\n", "butterfly = Plot.new(\n", " [[θ,r], notitle: true, with: 'filledcurve', lt: {rgb: '#BCECFF'}],\n", " [[θ,r], title: 'Butterfly', with: 'lines', lt: {rgb: '#422515', lw: 2}],\n", " polar: true\n", ")\n", "butterfly.to_png('butterfly.png', size: [700,700])\n", "File.open('butterfly.png')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Ruby 2.1.2", "language": "ruby", "name": "ruby" }, "language_info": { "file_extension": "rb", "mimetype": "application/x-ruby", "name": "ruby", "version": "2.1.2" } }, "nbformat": 4, "nbformat_minor": 0 }