Title: Unexpected plot behavior when running stock code for confusion matrix · Issue #15368 · matplotlib/matplotlib · GitHub
Open Graph Title: Unexpected plot behavior when running stock code for confusion matrix · Issue #15368 · matplotlib/matplotlib
X Title: Unexpected plot behavior when running stock code for confusion matrix · Issue #15368 · matplotlib/matplotlib
Description: Bug report Bug summary I'm fairly new to matplotlib and I was trying to create a confusion matrix following the tutorial here: https://scikit-learn.org/stable/auto_examples/model_selection/plot_confusion_matrix.html. I downloaded the exa...
Open Graph Description: Bug report Bug summary I'm fairly new to matplotlib and I was trying to create a confusion matrix following the tutorial here: https://scikit-learn.org/stable/auto_examples/model_selection/plot_con...
X Description: Bug report Bug summary I'm fairly new to matplotlib and I was trying to create a confusion matrix following the tutorial here: https://scikit-learn.org/stable/auto_examples/model_selection/plot...
Opengraph URL: https://github.com/matplotlib/matplotlib/issues/15368
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Unexpected plot behavior when running stock code for confusion matrix","articleBody":"### Bug report\r\n\r\n**Bug summary**\r\n\r\nI'm fairly new to matplotlib and I was trying to create a confusion matrix following the tutorial here: https://scikit-learn.org/stable/auto_examples/model_selection/plot_confusion_matrix.html. I downloaded the example code and when I ran it, the plots looked slightly cropped on the top and bottom edges.\r\n\r\n**Code for reproduction**\r\n\r\n```python\r\nprint(__doc__)\r\n\r\nimport numpy as np\r\nimport matplotlib.pyplot as plt\r\n\r\nfrom sklearn import svm, datasets\r\nfrom sklearn.model_selection import train_test_split\r\nfrom sklearn.metrics import confusion_matrix\r\nfrom sklearn.utils.multiclass import unique_labels\r\n\r\n# import some data to play with\r\niris = datasets.load_iris()\r\nX = iris.data\r\ny = iris.target\r\nclass_names = iris.target_names\r\n\r\n# Split the data into a training set and a test set\r\nX_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)\r\n\r\n# Run classifier, using a model that is too regularized (C too low) to see\r\n# the impact on the results\r\nclassifier = svm.SVC(kernel='linear', C=0.01)\r\ny_pred = classifier.fit(X_train, y_train).predict(X_test)\r\n\r\n\r\ndef plot_confusion_matrix(y_true, y_pred, classes,\r\n normalize=False,\r\n title=None,\r\n cmap=plt.cm.Blues):\r\n \"\"\"\r\n This function prints and plots the confusion matrix.\r\n Normalization can be applied by setting `normalize=True`.\r\n \"\"\"\r\n if not title:\r\n if normalize:\r\n title = 'Normalized confusion matrix'\r\n else:\r\n title = 'Confusion matrix, without normalization'\r\n\r\n # Compute confusion matrix\r\n cm = confusion_matrix(y_true, y_pred)\r\n # Only use the labels that appear in the data\r\n classes = classes[unique_labels(y_true, y_pred)]\r\n if normalize:\r\n cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\r\n print(\"Normalized confusion matrix\")\r\n else:\r\n print('Confusion matrix, without normalization')\r\n\r\n print(cm)\r\n\r\n fig, ax = plt.subplots()\r\n im = ax.imshow(cm, interpolation='nearest', cmap=cmap)\r\n ax.figure.colorbar(im, ax=ax)\r\n # We want to show all ticks...\r\n ax.set(xticks=np.arange(cm.shape[1]),\r\n yticks=np.arange(cm.shape[0]),\r\n # ... and label them with the respective list entries\r\n xticklabels=classes, yticklabels=classes,\r\n title=title,\r\n ylabel='True label',\r\n xlabel='Predicted label')\r\n\r\n # Rotate the tick labels and set their alignment.\r\n plt.setp(ax.get_xticklabels(), rotation=45, ha=\"right\",\r\n rotation_mode=\"anchor\")\r\n\r\n # Loop over data dimensions and create text annotations.\r\n fmt = '.2f' if normalize else 'd'\r\n thresh = cm.max() / 2.\r\n for i in range(cm.shape[0]):\r\n for j in range(cm.shape[1]):\r\n ax.text(j, i, format(cm[i, j], fmt),\r\n ha=\"center\", va=\"center\",\r\n color=\"white\" if cm[i, j] \u003e thresh else \"black\")\r\n fig.tight_layout()\r\n return ax\r\n\r\n\r\nnp.set_printoptions(precision=2)\r\n\r\n# Plot non-normalized confusion matrix\r\nplot_confusion_matrix(y_test, y_pred, classes=class_names,\r\n title='Confusion matrix, without normalization')\r\n\r\n# Plot normalized confusion matrix\r\nplot_confusion_matrix(y_test, y_pred, classes=class_names, normalize=True,\r\n title='Normalized confusion matrix')\r\n\r\nplt.show()\r\n```\r\n\r\n**Actual outcome**\r\n\r\n\r\n\r\n**Expected outcome**\r\n\r\nThe plots were expected to not look cropped.\r\n\r\n**Matplotlib version**\r\n\r\n * Operating system: Ubunto 18.04\r\n * Matplotlib version: 3.1.1\r\n * Matplotlib backend (`print(matplotlib.get_backend())`):\r\n * Python version: 3.7\r\n * Jupyter version (if applicable):\r\n * Other libraries: \r\n\r\nmatplotlib installed via pip.","author":{"url":"https://github.com/vkng12","@type":"Person","name":"vkng12"},"datePublished":"2019-10-03T14:20:34.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":1},"url":"https://github.com/15368/matplotlib/issues/15368"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:2978ed88-e2ff-7d73-a6c1-4be2d409090d |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 83B8:25F3E7:278A101:35DFC69:6A543FB2 |
| html-safe-nonce | 5dd9555c6fcee7c5797dbc6752033f0c77051ee201da84809a31871f290d8520 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4M0I4OjI1RjNFNzoyNzhBMTAxOjM1REZDNjk6NkE1NDNGQjIiLCJ2aXNpdG9yX2lkIjoiNDAwMjE4OTA5NjcyNjU3NzA3NCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 9b9c91ae03409d09c0ae6f20b00578b9325a73809c208d59cd3af6e8cd3cbc93 |
| hovercard-subject-tag | issue:502096982 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/matplotlib/matplotlib/15368/issue_layout |
| twitter:image | https://opengraph.githubassets.com/36b97ece856b722955152e99bf11567c6cf8a0f6d43a576108b70532c7a8a7ba/matplotlib/matplotlib/issues/15368 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/36b97ece856b722955152e99bf11567c6cf8a0f6d43a576108b70532c7a8a7ba/matplotlib/matplotlib/issues/15368 |
| og:image:alt | Bug report Bug summary I'm fairly new to matplotlib and I was trying to create a confusion matrix following the tutorial here: https://scikit-learn.org/stable/auto_examples/model_selection/plot_con... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | vkng12 |
| hostname | github.com |
| expected-hostname | github.com |
| None | b9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb |
| turbo-cache-control | no-preview |
| go-import | github.com/matplotlib/matplotlib git https://github.com/matplotlib/matplotlib.git |
| octolytics-dimension-user_id | 215947 |
| octolytics-dimension-user_login | matplotlib |
| octolytics-dimension-repository_id | 1385122 |
| octolytics-dimension-repository_nwo | matplotlib/matplotlib |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1385122 |
| octolytics-dimension-repository_network_root_nwo | matplotlib/matplotlib |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 07a982c1d40157c619b364352b704c3ce66bb332 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width