René's URL Explorer Experiment


Title: [Bug]: Creating sub-plots is much slower than Plotly · Issue #26162 · matplotlib/matplotlib · GitHub

Open Graph Title: [Bug]: Creating sub-plots is much slower than Plotly · Issue #26162 · matplotlib/matplotlib

X Title: [Bug]: Creating sub-plots is much slower than Plotly · Issue #26162 · matplotlib/matplotlib

Description: Bug summary Creating sub-plots in Matplotlib is typically 4-12x slower than Plotly. This is not a bug per se, but a serious performance issue for time-critical applications such as interactive web-apps. There are several closed GitHub is...

Open Graph Description: Bug summary Creating sub-plots in Matplotlib is typically 4-12x slower than Plotly. This is not a bug per se, but a serious performance issue for time-critical applications such as interactive web-...

X Description: Bug summary Creating sub-plots in Matplotlib is typically 4-12x slower than Plotly. This is not a bug per se, but a serious performance issue for time-critical applications such as interactive web-...

Opengraph URL: https://github.com/matplotlib/matplotlib/issues/26162

X: @github

direct link

Domain: github.com


Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"[Bug]: Creating sub-plots is much slower than Plotly","articleBody":"### Bug summary\n\nCreating sub-plots in Matplotlib is typically 4-12x slower than Plotly. This is not a bug per se, but a serious performance issue for time-critical applications such as interactive web-apps. There are several closed GitHub issues about the slowness of creating sub-plots that go back 6-7 years, but it's still a problem.\n\n### Code for reproduction\n\n```python\n%matplotlib inline\r\nfrom matplotlib.figure import Figure\r\nfrom plotly.subplots import make_subplots\r\nimport numpy as np\r\nimport pandas as pd\r\nimport timeit\r\n\r\nrng = np.random.default_rng()\r\n\r\nresults = []\r\n\r\nfor i in range(30):\r\n    # Random number of rows and columns.\r\n    rows, cols = rng.integers(low=1, high=20, size=2)\r\n    \r\n    # Plotly won't accept Numpy ints.\r\n    rows = int(rows)\r\n    cols = int(cols)\r\n\r\n    # Total number of sub-plots.\r\n    total = rows*cols\r\n\r\n    # Timer.\r\n    t1 = timeit.default_timer()\r\n\r\n    # Matplotlib.\r\n    fig_matplotlib = Figure()\r\n    axs_matplotlib = fig_matplotlib.subplots(nrows=rows, ncols=cols)\r\n\r\n    # Timer.\r\n    t2 = timeit.default_timer()\r\n\r\n    # Plotly.\r\n    fig_plotly = make_subplots(rows=rows, cols=cols)\r\n\r\n    # Timer.\r\n    t3 = timeit.default_timer()\r\n    \r\n    # Time-usage.\r\n    t_matplotlib = t2 - t1\r\n    t_plotly = t3 - t2\r\n    \r\n    # Relative time-usage.\r\n    t_relative = t_matplotlib / t_plotly\r\n\r\n    # Save results.\r\n    results.append(dict(rows=rows, cols=cols, total=total,\r\n                        t_matplotlib=t_matplotlib, t_plotly=t_plotly,\r\n                        t_relative=t_relative))\r\n\r\n    # Show status.    \r\n    print(f'{rows}\\t{cols}\\t{total}\\t{t_relative:.3f}')\r\n\r\n# Convert results to Pandas DataFrame.\r\ndf_results = pd.DataFrame(results)\r\n\r\n# Plot relative time-usage.\r\ndf_results.plot(kind='scatter', x='total', y='t_relative', grid=True);\r\n\r\n# Plot individual time-usage.\r\ndf2 = df_results.set_index('total').sort_index()\r\ndf2.plot(y=['t_matplotlib', 't_plotly'], grid=True, ylabel='seconds');\n```\n\n\n### Actual outcome\n\nIn my actual application with 3 columns and 10 rows, the time-usage for Matplotlib is consistently around 1.8 seconds, but for some reason it is only around 0.5 seconds in these tests.\r\n\r\nThis plot shows the individual time-usage for Matplotlib and Plotly, where the x-axis is the total number of sub-plots (cols * rows):\r\n\r\n![image](https://github.com/matplotlib/matplotlib/assets/13588114/17ea6afb-97f5-49e7-98f4-d3eeed50ba99)\r\n\r\nNote the jagged lines for the Matplotlib time-usage. We could average several runs to make the lines smoother, but the trend is clear, and the jaggedness is actually quite strange, that the time changes so much from run to run.\r\n\r\nThis plot shows the relative time-usage (Matplotlib time / Plotly time):\r\n\r\n![image](https://github.com/matplotlib/matplotlib/assets/13588114/9395e127-2361-42dc-9f1b-24c4cd6086f6)\r\n\n\n### Expected outcome\n\nI would like it to run [like this](https://www.youtube.com/watch?v=0hFzpF_gGys) - minus the crashes, please.\r\n\n\n### Additional information\n\nThanks again for making Matplotlib! I don't want to sound ingrateful or too demanding, as this is my second GitHub issue in a few days relating to the performance of using many sub-plots in Matplotlib. But these issues are major bottle-necks in my application that take around 90% of the runtime. I also wonder if perhaps the issues are related. (See https://github.com/matplotlib/matplotlib/issues/26150)\r\n\r\nIs there a technical reason that Plotly is so much faster than Matplotlib when it comes to having sub-plots?\r\n\r\nI imagine that Matplotlib has been made by many different people over a long period of time, so perhaps it is getting hard to understand what the code is doing sometimes?\r\n\r\nPlotly runs very fast and is easy to use, but I have already made everything in Matplotlib, and I'm not even sure Plotly has all the features I need to customize the plots. So I'm hoping it would be possible to improve the speed of Matplotlib when using sub-plots.\r\n\r\nThanks!\r\n\n\n### Operating system\n\nKubuntu 22\n\n### Matplotlib Version\n\n3.7.1\n\n### Matplotlib Backend\n\nmodule://matplotlib_inline.backend_inline\n\n### Python version\n\n3.9.12\n\n### Jupyter version\n\n6.4.12 (through VSCode)\n\n### Installation\n\npip","author":{"url":"https://github.com/Hvass-Labs","@type":"Person","name":"Hvass-Labs"},"datePublished":"2023-06-21T12:14:40.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":14},"url":"https://github.com/26162/matplotlib/issues/26162"}

route-pattern/_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format)
route-controllervoltron_issues_fragments
route-actionissue_layout
fetch-noncev2:eec5b036-4c13-d1aa-4590-db50572fcf2a
current-catalog-service-hash81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114
request-idDB16:50D6E:1C3977:281C4C:6A54EB64
html-safe-nonce18a47ed724abf05a0335135badfc2157a61f89b96f5997b9d4b992bb95f3bed2
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEQjE2OjUwRDZFOjFDMzk3NzoyODFDNEM6NkE1NEVCNjQiLCJ2aXNpdG9yX2lkIjoiNzI2MDMyMTk4NzcyMjczNjQiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ==
visitor-hmacf46adde8abbcfcaa274296db9db6b0c53b4746e9d11c44bc418446f7ae993d5d
hovercard-subject-tagissue:1767467120
github-keyboard-shortcutsrepository,issues,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///voltron/issues_fragments/issue_layout
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/matplotlib/matplotlib/26162/issue_layout
twitter:imagehttps://opengraph.githubassets.com/111fcdae25e4f1ea45a155c26efa62b0367084822f34aedccae535413230f812/matplotlib/matplotlib/issues/26162
twitter:cardsummary_large_image
og:imagehttps://opengraph.githubassets.com/111fcdae25e4f1ea45a155c26efa62b0367084822f34aedccae535413230f812/matplotlib/matplotlib/issues/26162
og:image:altBug summary Creating sub-plots in Matplotlib is typically 4-12x slower than Plotly. This is not a bug per se, but a serious performance issue for time-critical applications such as interactive web-...
og:image:width1200
og:image:height600
og:site_nameGitHub
og:typeobject
og:author:usernameHvass-Labs
hostnamegithub.com
expected-hostnamegithub.com
Noneeae2aab99907699a22d2c8449aa683ca74454fca87211b98f7c7b722086b2839
turbo-cache-controlno-preview
go-importgithub.com/matplotlib/matplotlib git https://github.com/matplotlib/matplotlib.git
octolytics-dimension-user_id215947
octolytics-dimension-user_loginmatplotlib
octolytics-dimension-repository_id1385122
octolytics-dimension-repository_nwomatplotlib/matplotlib
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id1385122
octolytics-dimension-repository_network_root_nwomatplotlib/matplotlib
turbo-body-classeslogged-out env-production page-responsive
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
releasebb1b4ffdc07c66de20ad344214f55df0aa364bd3
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/matplotlib/matplotlib/issues/26162#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmatplotlib%2Fmatplotlib%2Fissues%2F26162
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub Copilot appDirect agents from issue to mergehttps://github.com/features/ai/github-app
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
View all resourceshttps://github.com/resources
GitHub SponsorsFund open source developershttps://github.com/open-source/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/open-source/accelerator
GitHub Starshttps://stars.github.com
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmatplotlib%2Fmatplotlib%2Fissues%2F26162
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-repo&source_repo=matplotlib%2Fmatplotlib
Reloadhttps://github.com/matplotlib/matplotlib/issues/26162
Reloadhttps://github.com/matplotlib/matplotlib/issues/26162
Reloadhttps://github.com/matplotlib/matplotlib/issues/26162
Please reload this pagehttps://github.com/matplotlib/matplotlib/issues/26162
matplotlib https://github.com/matplotlib
matplotlibhttps://github.com/matplotlib/matplotlib
Please reload this pagehttps://github.com/matplotlib/matplotlib/issues/26162
Notifications https://github.com/login?return_to=%2Fmatplotlib%2Fmatplotlib
Fork 8.4k https://github.com/login?return_to=%2Fmatplotlib%2Fmatplotlib
Star 23k https://github.com/login?return_to=%2Fmatplotlib%2Fmatplotlib
Code https://github.com/matplotlib/matplotlib
Issues 1.1k https://github.com/matplotlib/matplotlib/issues
Pull requests 409 https://github.com/matplotlib/matplotlib/pulls
Actions https://github.com/matplotlib/matplotlib/actions
Projects https://github.com/matplotlib/matplotlib/projects
Wiki https://github.com/matplotlib/matplotlib/wiki
Security and quality 0 https://github.com/matplotlib/matplotlib/security
Insights https://github.com/matplotlib/matplotlib/pulse
Code https://github.com/matplotlib/matplotlib
Issues https://github.com/matplotlib/matplotlib/issues
Pull requests https://github.com/matplotlib/matplotlib/pulls
Actions https://github.com/matplotlib/matplotlib/actions
Projects https://github.com/matplotlib/matplotlib/projects
Wiki https://github.com/matplotlib/matplotlib/wiki
Security and quality https://github.com/matplotlib/matplotlib/security
Insights https://github.com/matplotlib/matplotlib/pulse
[Bug]: Creating sub-plots is much slower than Plotlyhttps://github.com/matplotlib/matplotlib/issues/26162#top
Performancehttps://github.com/matplotlib/matplotlib/issues?q=state%3Aopen%20label%3A%22Performance%22
https://github.com/Hvass-Labs
Hvass-Labshttps://github.com/Hvass-Labs
on Jun 21, 2023https://github.com/matplotlib/matplotlib/issues/26162#issue-1767467120
https://private-user-images.githubusercontent.com/13588114/247539412-17ea6afb-97f5-49e7-98f4-d3eeed50ba99.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODM5NTA0ODAsIm5iZiI6MTc4Mzk1MDE4MCwicGF0aCI6Ii8xMzU4ODExNC8yNDc1Mzk0MTItMTdlYTZhZmItOTdmNS00OWU3LTk4ZjQtZDNlZWVkNTBiYTk5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA3MTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNzEzVDEzNDMwMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTAwOTZjNzY3YWRiOWQyZTMzYTcwYmUxNjlkNDVlN2E1NzhhMTJiZjkxNTMwNzMwY2IxYjY1M2ZiNDg2YzMyMzUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.Q1B03_GRSOqN_nETRET1k2zeE7eHmGVpgxZ648ISAyw
https://private-user-images.githubusercontent.com/13588114/247539483-9395e127-2361-42dc-9f1b-24c4cd6086f6.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODM5NTA0ODAsIm5iZiI6MTc4Mzk1MDE4MCwicGF0aCI6Ii8xMzU4ODExNC8yNDc1Mzk0ODMtOTM5NWUxMjctMjM2MS00MmRjLTlmMWItMjRjNGNkNjA4NmY2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA3MTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNzEzVDEzNDMwMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTAwYWZiZjM3NTk0MGQxOTBmM2MzOWU1YzdlMmEyNzE4ZDljMDZjMDBlNzU1Yjg2NjlmZDgyODgyOWNlMDAyYmUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.9XK-WP22HFJ-nrutzMoMlpdmngulo3gl-ADrNm_1cZI
like thishttps://www.youtube.com/watch?v=0hFzpF_gGys
#26150https://github.com/matplotlib/matplotlib/issues/26150
Performancehttps://github.com/matplotlib/matplotlib/issues?q=state%3Aopen%20label%3A%22Performance%22
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.