{"id":1591,"date":"2018-11-23T20:54:15","date_gmt":"2018-11-23T19:54:15","guid":{"rendered":"https:\/\/pythonprogramming.altervista.org\/?p=1591"},"modified":"2018-11-26T08:51:51","modified_gmt":"2018-11-26T07:51:51","slug":"lets-make-graphs-with-matplotlib","status":"publish","type":"post","link":"https:\/\/pythonprogramming.altervista.org\/lets-make-graphs-with-matplotlib\/","title":{"rendered":"Let&#8217;s make graphs with MatPlotLib"},"content":{"rendered":"<h2>Draw axis<\/h2>\n<p>To draw axis, you can do this:<\/p>\n<pre class=\"lang:default decode:true\">import matplotlib.pyplot as plt\r\nimport matplotlib as mpl\r\n\r\ndef axis():\r\n\tfig, ax = plt.subplots()\r\n\t# Etichetta X\r\n\tticklab = ax.xaxis.get_ticklabels()[0]\r\n\ttrans = ticklab.get_transform()\r\n\tax.xaxis.set_label_coords(5,0, transform=trans)\r\n\t# Etichetta Y\r\n\tticklab = ax.yaxis.get_ticklabels()[0]\r\n\ttrans = ticklab.get_transform()\r\n\tax.yaxis.set_label_coords(0,5, transform=trans)\r\n\r\n\tax.spines['left'].set_position('center')\r\n\tax.spines['bottom'].set_position('center')\r\n\tax.spines['right'].set_color('none')\r\n\tax.spines['top'].set_color('none')\r\n\tax.xaxis.tick_bottom()\r\n\tplt.axis([-6 , 6, -6, 6])\r\n\tplt.ylabel('Prezzo').set_color('gray')\r\n\tplt.xlabel('Quantit\u00e0').set_color('gray')\r\n\tplt.show()\r\n\r\naxis()<\/pre>\n<p><a href=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/axes.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1604\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/axes.png\" alt=\"\" width=\"582\" height=\"463\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/axes.png 582w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/axes-320x255.png 320w\" sizes=\"auto, (max-width: 582px) 100vw, 582px\" \/><\/a><\/p>\n<h2>Adding some text on the screen<\/h2>\n<p>If you want to add some text like a legend with an arrow pointing to the point you need to explain what is it, you can use annotate.<\/p>\n<pre class=\"lang:default decode:true \">import matplotlib.pyplot as plt\r\nimport matplotlib as mpl\r\n\r\ndef axes(x,y):\r\n\tfig, ax = plt.subplots()\r\n\t# Etichetta X\r\n\tticklab = ax.xaxis.get_ticklabels()[0]\r\n\ttrans = ticklab.get_transform()\r\n\tax.xaxis.set_label_coords(5,0, transform=trans)\r\n\t# Etichetta Y\r\n\tticklab = ax.yaxis.get_ticklabels()[0]\r\n\ttrans = ticklab.get_transform()\r\n\tax.yaxis.set_label_coords(0,5, transform=trans)\r\n\r\n\t# arrows\r\n\tax.annotate(\"This is the origin\", xy=(0, 0), xytext=(0, 1), arrowprops=dict(arrowstyle=\"-&gt;\"))\r\n\r\n\tax.spines['left'].set_position('center')\r\n\tax.spines['bottom'].set_position('center')\r\n\tax.spines['right'].set_color('none')\r\n\tax.spines['top'].set_color('none')\r\n\tax.xaxis.tick_bottom()\r\n\tplt.axis([-6 , 6, -6, 6])\r\n\tplt.ylabel(x).set_color('gray')\r\n\tplt.xlabel(y).set_color('gray')\r\n\r\naxes(x = \"Price\", y=\"Quality\")\r\nif __name__ == \"__main__\":\r\n\tplt.show()\r\n<\/pre>\n<p>You will have this:<\/p>\n<p><a href=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/text_on_the_graph.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1606\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/text_on_the_graph.png\" alt=\"\" width=\"554\" height=\"436\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/text_on_the_graph.png 554w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/text_on_the_graph-320x252.png 320w\" sizes=\"auto, (max-width: 554px) 100vw, 554px\" \/><\/a><\/p>\n<h2>Add a point<\/h2>\n<pre class=\"lang:default decode:true \">import matplotlib.pyplot as plt\r\nimport matplotlib as mpl\r\n\r\ndef axes(x,y):\r\n\tfig, ax = plt.subplots()\r\n\t# Etichetta X\r\n\tticklab = ax.xaxis.get_ticklabels()[0]\r\n\ttrans = ticklab.get_transform()\r\n\tax.xaxis.set_label_coords(5,0, transform=trans)\r\n\t# Etichetta Y\r\n\tticklab = ax.yaxis.get_ticklabels()[0]\r\n\ttrans = ticklab.get_transform()\r\n\tax.yaxis.set_label_coords(0,5, transform=trans)\r\n\r\n\t# arrows\r\n\t#ax.annotate(\"This is the origin\", xy=(0, 0), xytext=(0, 1), arrowprops=dict(arrowstyle=\"-&gt;\"))\r\n\r\n\tax.spines['left'].set_position('center')\r\n\tax.spines['bottom'].set_position('center')\r\n\tax.spines['right'].set_color('none')\r\n\tax.spines['top'].set_color('none')\r\n\tax.xaxis.tick_bottom()\r\n\tplt.axis([-6 , 6, -6, 6])\r\n\tplt.ylabel(x).set_color('gray')\r\n\tplt.xlabel(y).set_color('gray')\r\n\tplt.plot(1,1, 'ro')\r\n\r\naxes(x = \"Price\", y=\"Quality\")\r\nif __name__ == \"__main__\":\r\n\tplt.show()\r\n<\/pre>\n<p><a href=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/point-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1608\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/point-1.png\" alt=\"\" width=\"540\" height=\"427\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/point-1.png 540w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/point-1-320x253.png 320w\" sizes=\"auto, (max-width: 540px) 100vw, 540px\" \/><\/a><\/p>\n<h2><\/h2>\n<h2>A different way<\/h2>\n<p>Let&#8217;s do something basic. Draw a point with some coordinates.<\/p>\n<pre class=\"lang:default decode:true \">import matplotlib.pyplot as plt\r\n\r\n\r\ndef point(axis=0):\r\n\tplt.plot([1], [1], 'ro')\r\n\tplt.ylabel('Prezzo')\r\n\tplt.xlabel('quantit\u00e0')\r\n\r\ndef axis():\r\n\tplt.plot([0,-6], [0, 0], 'k', lw=1)\r\n\tplt.plot([0,0], [0, 6], 'k', lw=1)\r\n\tplt.plot([0,0], [0, -6], 'k', lw=1)\r\n\tplt.plot([6,0], [0,0], 'k', lw=1)\r\n\tplt.axis([-6 , 6, -6, 6])\r\n\tplt.ylabel('Prezzo')\r\n\tplt.xlabel('Quantit\u00e0')\r\n\r\n\r\naxis()\r\npoint()\r\nplt.show()<\/pre>\n<p>The result is this:<\/p>\n<p><a href=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/point.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1593\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/point.png\" alt=\"\" width=\"563\" height=\"441\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/point.png 563w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/point-320x251.png 320w\" sizes=\"auto, (max-width: 563px) 100vw, 563px\" \/><\/a><\/p>\n<h2>Color and size with color and markersize<\/h2>\n<p>This will change the size and the color of our dot.<\/p>\n<pre class=\"lang:default decode:true \">def point(axis=0):\r\n\tplt.plot([1], [1], 'ro', color='green', markersize=24)\r\n\tplt.ylabel('Prezzo')\r\n\tplt.xlabel('quantit\u00e0')<\/pre>\n<p><a href=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/greendot.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1594\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/greendot.png\" alt=\"\" width=\"636\" height=\"542\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/greendot.png 636w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/greendot-320x273.png 320w\" sizes=\"auto, (max-width: 636px) 100vw, 636px\" \/><\/a><\/p>\n<p>Let&#8217;s say we have this table<\/p>\n<table style='border: 1px solid green'><td>OFFERTA<\/td><td> Posti<\/td><td> Qualit\u00e0<\/td><td> Prezzi<\/td><tr><td>Ristorante Alba<\/td><td style='border: 1px solid black;text-align:right'> 50<\/td><td style='border: 1px solid black;text-align:right'> 0<\/td><td style='border: 1px solid black;text-align:right'> -3<\/td><tr><td>Ristorante Baia<\/td><td style='border: 1px solid black;text-align:right'> 60<\/td><td style='border: 1px solid black;text-align:right'> 3<\/td><td style='border: 1px solid black;text-align:right'> -2<\/td><tr><td>Ristorante Calice<\/td><td style='border: 1px solid black;text-align:right'> 120<\/td><td style='border: 1px solid black;text-align:right'> -4<\/td><td style='border: 1px solid black;text-align:right'> -1<\/td><tr><td>Ristorante Delice<\/td><td style='border: 1px solid black;text-align:right'> 50<\/td><td style='border: 1px solid black;text-align:right'> -3<\/td><td style='border: 1px solid black;text-align:right'> -2<\/td><tr><td>Ristorante Elena<\/td><td style='border: 1px solid black;text-align:right'> 60<\/td><td style='border: 1px solid black;text-align:right'> -4<\/td><td style='border: 1px solid black;text-align:right'> -1<\/td><tr><\/table><td>Preferenze dei segmenti di clientela<table style='border: 1px solid red'><td>DOMANDA<\/td><td> Qualit\u00e0<\/td><td> Prezzi<\/td><tr><td>\"Privati\"<\/td><td style='border: 1px solid black;text-align:right'> 25 <\/td><td>[-4]<\/td><td> [-1]<\/td><tr><td>\"Banchetti\"<\/td><td style='border: 1px solid black;text-align:right'> 25<\/td><td> [2]<\/td><td> [2]<\/td><tr><td>\"Turisti\"<\/td><td style='border: 1px solid black;text-align:right'> 50<\/td><td> [3]<\/td><td> [0]<\/td><tr><\/table><\/table>\n<p>Now lets do something more fun<\/p>\n<pre class=\"lang:default decode:true \">import matplotlib.pyplot as plt\r\n\r\n\r\ndef point(name, size, x, y, color):\r\n\tplt.plot(x, y, 'ro', color=color, markersize=size\/2, alpha=0.7)\r\n\tplt.ylabel('Prezzo')\r\n\tplt.xlabel('quantit\u00e0')\r\n\tplt.annotate(name, xy=(x,y),bbox=dict(boxstyle='round,pad=0.5', fc='yellow', alpha=0.5))\r\n\r\ndef axis():\r\n\tplt.plot([0,-6], [0, 0], 'k', lw=1)\r\n\tplt.plot([0,0], [0, 6], 'k', lw=1)\r\n\tplt.plot([0,0], [0, -6], 'k', lw=1)\r\n\tplt.plot([6,0], [0,0], 'k', lw=1)\r\n\tplt.axis([-6 , 6, -6, 6])\r\n\tplt.ylabel('Prezzo')\r\n\tplt.xlabel('Quantit\u00e0')\r\n\r\na = \"\"\"\r\nRistorante Alba\t50\t-3\t3\r\nRistorante Baia\t90\t3\t1\r\nRistorante Calice\t90\t-1\t-3\r\nRistorante Delice\t50\t3\t4\r\nRistorante Elena\t120\t3\t-4\r\n\"\"\"\r\n\r\nb = \"\"\"\r\n\"Privati\"\t40\t[0]\t[2]\r\n\"Banchetti\"\t40\t[2]\t[-4]\r\n\"Turisti\"\t20\t[1]\t[0]\r\n\"\"\"\r\n\r\n\r\ndef list_it(a):\r\n\ta = a.replace(\"\\\"\",\"\").replace(\"[\",\"\").replace(\"]\",\"\")\r\n\ta = a.splitlines()[1:]\r\n\tfor n,x in enumerate(a):\r\n\t\ta[n] = a[n].split()\r\n\treturn a\r\na = list_it(a)\r\nb = list_it(b)\r\n\r\n\r\naxis()\r\n\r\nfor r in a:\r\n\tpoint(r[1], int(r[2]), int(r[3]), int(r[4]), 'green')\r\nfor r in b:\r\n\tpoint(r[0], int(r[1])*2.5, int(r[2]), int(r[3]), 'orange')\r\n\r\n\r\nplt.show()\r\n<\/pre>\n<p><a href=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/fun.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1596\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/fun.png\" alt=\"\" width=\"628\" height=\"540\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/fun.png 628w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/fun-320x275.png 320w\" sizes=\"auto, (max-width: 628px) 100vw, 628px\" \/><\/a><\/p>\n<h2>More graphs<\/h2>\n<p>With this code we can add more data for more situations, creating one graph for each data. If some data are in the same spot, they will show in the same label the names that share the same spot.<\/p>\n<pre class=\"lang:default decode:true \">import matplotlib.pyplot as plt\r\nfrom random import random\r\n\r\ndef axes(x,y, name):\r\n\tfig, ax = plt.subplots()\r\n\t# Etichetta X\r\n\tax.set_title(name)\r\n\tax.ticklabel_format(axis='both', style='plain', scilimits=(0,0))\r\n\tticklab = ax.xaxis.get_ticklabels()[0]\r\n\ttrans = ticklab.get_transform()\r\n\tax.xaxis.set_label_coords(5,0, transform=trans)\r\n\t# Etichetta Y\r\n\tticklab = ax.yaxis.get_ticklabels()[0]\r\n\ttrans = ticklab.get_transform()\r\n\tax.yaxis.set_label_coords(0,5, transform=trans)\r\n\r\n\t# arrow\r\n\t#ax.annotate(\"This is the origin\", xy=(0, 0), xytext=(0, 1), arrowprops=dict(arrowstyle=\"-&gt;\"))\r\n\r\n\tax.spines['left'].set_position('center')\r\n\tax.spines['bottom'].set_position('center')\r\n\tax.spines['right'].set_color('none')\r\n\tax.spines['top'].set_color('none')\r\n\tax.xaxis.tick_bottom()\r\n\taxis = [-6, 6, -6, 6]\r\n\tplt.axis(axis, axis*2)\r\n\t#plt.yticks(axis, [\"a\",\"b\",\"c\", \"d\"] )#(-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6))\r\n\tplt.ylabel(x).set_color('gray')\r\n\tplt.xlabel(y).set_color('gray')\r\n\r\ndef annotate(name, x, y):\r\n\tplt.annotate(name, xy=(x,y),bbox=dict(boxstyle='round,pad=0.1', fc='green', alpha=0.7))\r\n\r\ndef annotate2(name, x, y):\r\n\tplt.annotate(name, xy=(x,y),bbox=dict(boxstyle='round,pad=0.3', fc='yellow', alpha=0.7))\r\n\r\ndef point(name, size, x, y, color):\r\n\tplt.plot(x, y, 'ro', color=color, markersize=size\/2, alpha=0.7)\r\n\tfor t in xy:\r\n\t\tif [x,y] == t[0]:\r\n\t\t\tif name not in name:\r\n\t\t\t\tname = name + \" e \" + t[1]\r\n\txy.append([[x,y], name])\r\n\tif \"Conc\" not in name:\r\n\t\tname = \"Conc.:\" + name\r\n\tannotate(name, x, y)\r\nxy = []\r\ndef point2(name, size, x, y, color):\r\n\tplt.plot(x, y, 'ro', color=color, markersize=size, alpha=0.7)\r\n\tfor t in xy:\r\n\t\tif [x,y] == t[0]:\r\n\t\t\tname = name + \" - \" + t[1]\r\n\txy.append([[x,y], name])\r\n\tif \"Targ:\" not in name:\r\n\t\tname = \"Targ.:\" + name\r\n\tannotate2(name,x,y)\r\n\r\n\r\nclass Alunni:\r\n\tdict = {}\r\n\tdef __init__(self, name, offerta, domanda):\r\n\t\tself.name = name\r\n\t\tself.offerta = offerta\r\n\t\tself.domanda = domanda\r\n\t\tAlunni.dict[name] = self\r\n\r\n\r\n\r\n\r\ndef list_it(a):\r\n\ta = a.replace(\"\\\"\",\"\").replace(\"[\",\"\").replace(\"]\",\"\")\r\n\ta = a.splitlines()[1:]\r\n\tfor n,x in enumerate(a):\r\n\t\ta[n] = a[n].split()\r\n\treturn a\r\n# ========================= alunni =====================\r\nAma_restaurant = Alunni(\"AMA\",\r\n\"\"\"\r\nRistorante Alba\t    50\t0\t-3\r\nRistorante Baia\t    60\t3\t-2\r\nRistorante Calice\t120\t-4\t-1\r\nRistorante Delice\t50\t-3\t-2\r\nRistorante Elena\t60\t-4\t-1\r\n\"\"\",\r\n\r\n\"\"\"\r\n\"Privati\"\t25\t[-4] [-1]\r\n\"Banchetti\"\t25\t[2]\t [2]\r\n\"Turisti\"\t50\t[3]\t [0]\r\n\"\"\")\r\n\r\nBort_restaurant = Alunni(\"BORT\",\r\n\t\"\"\"\r\nRistorante Alba\t90\t0\t0\r\nRistorante Baia\t120\t-1\t-3\r\nRistorante Calice\t70\t1\t4\r\nRistorante Delice\t90\t-2\t2\r\nRistorante Elena\t50\t1\t1\r\n\"\"\",\r\n\"\"\"\r\n\"Privati\"\t40\t[-1]\t[-4]\r\n\"Banchetti\"\t25\t[-1]\t[-4]\r\n\"Turisti\"\t35\t[-2]\t[0]\r\n\"\"\"\r\n)\r\n# ========================================================\r\n\r\n\r\ndef start(name, o, d):\r\n\tglobal a,b\r\n\tnome, a,b = name, o, d\r\n\ta = list_it(a)\r\n\tb = list_it(b)\r\n\taxes(x=\"Prezzo\", y=\"Qualit\u00e0\", name=nome)\r\n\tfor r in a:\r\n\t\tpoint(r[1], int(r[2]), int(r[3]), int(r[4]), 'blue')\r\n\tfor r in b:\r\n\t\tpoint2(r[0], int(r[1])*2.5, int(r[2]), int(r[3]), 'orange')\r\n\r\nfor k in Alunni.dict:\r\n\tstart(Alunni.dict[k].name, Alunni.dict[k].offerta, Alunni.dict[k].domanda)\r\n\txy = []\r\nplt.show()\r\n<\/pre>\n<p><a href=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/ama2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1614\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/ama2.png\" alt=\"\" width=\"640\" height=\"480\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/ama2.png 640w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/ama2-320x240.png 320w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a> <a href=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/bort2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1615\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/bort2.png\" alt=\"\" width=\"640\" height=\"480\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/bort2.png 640w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2018\/11\/bort2-320x240.png 320w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"Let&#8217;s see how to make a graph with matplotlib in the easiest way: draw a plot on a cartesian graph.\n<a class=\"moretag\" href=\"https:\/\/pythonprogramming.altervista.org\/lets-make-graphs-with-matplotlib\/\"> [...]<\/a>","protected":false},"author":1,"featured_media":1596,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","footnotes":""},"categories":[1,324],"tags":[326,325],"class_list":["post-1591","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-examples","category-matplotlib","tag-graph","tag-matplotlib"],"avopt_banners_inside_post":true,"avopt_banners_on_page":true,"av_copy_from":"","av_sharing_message":"","av_sharing_allowed":false,"av_sharing_on":{"fb":[],"tw":[]},"av_allow_affiliate_banner":false,"av_allow_affiliate_multi_banner":false,"av_show_affiliation_buy_button":false,"av_post_rating":true,"av_have_post_rating_value":false,"av_is_artificial_intelligence_content":false,"_links":{"self":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts\/1591","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/comments?post=1591"}],"version-history":[{"count":8,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts\/1591\/revisions"}],"predecessor-version":[{"id":1616,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts\/1591\/revisions\/1616"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/media\/1596"}],"wp:attachment":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/media?parent=1591"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/categories?post=1591"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/tags?post=1591"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}