<divid="unreleased-message"> You are reading an old version of the documentation (v2.0.0). For the latest version see <ahref="https://matplotlib.org/stable/devel/contributing.html">https://matplotlib.org/stable/devel/contributing.html</a></div>
<li><aclass="reference internal" href="#submitting-a-bug-report">Submitting a bug report</a></li>
<li><aclass="reference internal" href="#retrieving-and-installing-the-latest-version-of-the-code">Retrieving and installing the latest version of the code</a></li>
<spanid="id1"></span><h1>Contributing<aclass="headerlink" href="#contributing" title="Permalink to this headline">¶</a></h1>
<p>This project is a community effort, and everyone is welcome to
contribute.</p>
<p>The project is hosted on <aclass="reference external" href="https://github.com/matplotlib/matplotlib">https://github.com/matplotlib/matplotlib</a></p>
<divclass="section" id="submitting-a-bug-report">
<h2>Submitting a bug report<aclass="headerlink" href="#submitting-a-bug-report" title="Permalink to this headline">¶</a></h2>
<p>If you find a bug in the code or documentation, do not hesitate to submit a
ticket to the
<aclass="reference external" href="https://github.com/matplotlib/matplotlib/issues">Bug Tracker</a>. You are
also welcome to post feature requests or pull requests.</p>
<h2>Retrieving and installing the latest version of the code<aclass="headerlink" href="#retrieving-and-installing-the-latest-version-of-the-code" title="Permalink to this headline">¶</a></h2>
<p>When working on the Matplotlib source, setting up a <aclass="reference external" href="http://docs.python-guide.org/en/latest/dev/virtualenvs/">virtual
environment</a> or a
<aclass="reference external" href="http://conda.pydata.org/docs/using/envs.html">conda environment</a> is
recommended.</p>
<divclass="admonition warning">
<pclass="first admonition-title">Warning</p>
<pclass="last">If you already have a version of Matplotlib installed, use an
virtual environment or uninstall using the same method you used
to install it. Installing multiple versions of Matplotlib via different
methods into the same environment may not always work as expected.</p>
</div>
<p>We use <aclass="reference external" href="https://git-scm.com/">Git</a> for version control and
<aclass="reference external" href="https://github.com/">GitHub</a> for hosting our main repository.</p>
<p>You can check out the latest sources with the command (see
<aclass="reference internal" href="gitwash/set_up_fork.html#set-up-fork"><spanclass="std std-ref">Set up your fork</span></a> for more details):</p>
<p>or copy <codeclass="file docutils literal"><spanclass="pre">setup.cfg.template</span></code> to <codeclass="file docutils literal"><spanclass="pre">setup.cfg</span></code> and edit it to contain</p>
<li><aclass="reference internal" href="testing.html#testing"><spanclass="std std-ref">Developer’s tips for testing</span></a></li>
</ul>
</div>
</div>
<divclass="section" id="contributing-code">
<h2>Contributing code<aclass="headerlink" href="#contributing-code" title="Permalink to this headline">¶</a></h2>
<divclass="section" id="how-to-contribute">
<h3>How to contribute<aclass="headerlink" href="#how-to-contribute" title="Permalink to this headline">¶</a></h3>
<p>The preferred way to contribute to Matplotlib is to fork the <aclass="reference external" href="https://github.com/matplotlib/matplotlib/">main
repository</a> on GitHub,
then submit a “pull request” (PR):</p>
<blockquote>
<div><olclass="arabic">
<li><pclass="first"><aclass="reference external" href="https://github.com/join">Create an account</a> on
GitHub if you do not already have one.</p>
</li>
<li><pclass="first">Fork the <aclass="reference external" href="https://github.com/matplotlib/matplotlib">project repository</a>: click on the ‘Fork’ button
near the top of the page. This creates a copy of the code under your
account on the GitHub server.</p>
</li>
<li><pclass="first">Clone this copy to your local disk:</p>
<li><pclass="first">Formatting should follow <aclass="reference external" href="https://www.python.org/dev/peps/pep-0008/">PEP8 recommendation</a>. You should consider
installing/enabling automatic PEP8 checking in your editor. Part of the
test suite is checking PEP8 compliance, things go smoother if the code is
mostly PEP8 compliant to begin with.</p>
</li>
<li><pclass="first">Each high-level plotting function should have a simple example in
the <codeclass="docutils literal"><spanclass="pre">Example</span></code> section of the docstring. This should be as simple as
possible to demonstrate the method. More complex examples should go
in the <codeclass="docutils literal"><spanclass="pre">examples</span></code> tree.</p>
</li>
<li><pclass="first">Changes (both new features and bugfixes) should be tested. See
<aclass="reference internal" href="testing.html#testing"><spanclass="std std-ref">Developer’s tips for testing</span></a> for more details.</p>
</li>
<li><pclass="first">Import the following modules using the standard scipy conventions:</p>
<li><pclass="first">If your change is a major new feature, add an entry to the <codeclass="docutils literal"><spanclass="pre">What's</span><spanclass="pre">new</span></code>
section by adding a new file in <codeclass="docutils literal"><spanclass="pre">doc/users/whats_new</span></code> (see
<codeclass="file docutils literal"><spanclass="pre">doc/users/whats_new/README</span></code> for more information).</p>
</li>
<li><pclass="first">If you change the API in a backward-incompatible way, please
document it in <codeclass="xref py py-obj docutils literal"><spanclass="pre">doc/api/api_changes</span></code>, by adding a new file describing your
changes (see <codeclass="file docutils literal"><spanclass="pre">doc/api/api_changes/README</span></code> for more information)</p>
</li>
<li><pclass="first">See below for additional points about
<aclass="reference internal" href="#keyword-argument-processing"><spanclass="std std-ref">Keyword argument processing</span></a>, if code in your pull request
does that.</p>
</li>
</ul>
</div></blockquote>
<p>In addition, you can check for common programming errors with the following
tools:</p>
<blockquote>
<div><ul>
<li><pclass="first">Code with a good unittest coverage (at least 70%, better 100%), check
<spanid="new-contributors"></span><h3>Issues for New Contributors<aclass="headerlink" href="#issues-for-new-contributors" title="Permalink to this headline">¶</a></h3>
<p>New contributors should look for the following tags when looking for issues.
We strongly recommend that new contributors tackle
<spanid="id4"></span><h3>Keyword argument processing<aclass="headerlink" href="#keyword-argument-processing" title="Permalink to this headline">¶</a></h3>
<p>Matplotlib makes extensive use of <codeclass="docutils literal"><spanclass="pre">**kwargs</span></code> for pass-through
customizations from one function to another. A typical example is in
<aclass="reference internal" href="../api/pyplot_api.html#matplotlib.pyplot.text" title="matplotlib.pyplot.text"><codeclass="xref py py-func docutils literal"><spanclass="pre">matplotlib.pyplot.text()</span></code></a>. The definition of the pylab text
<p><aclass="reference internal" href="../api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text" title="matplotlib.axes.Axes.text"><codeclass="xref py py-meth docutils literal"><spanclass="pre">text()</span></code></a> in simplified form looks like this,
i.e., it just passes all <codeclass="docutils literal"><spanclass="pre">args</span></code> and <codeclass="docutils literal"><spanclass="pre">kwargs</span></code> on to
<p><codeclass="docutils literal"><spanclass="pre">update</span></code> does the work looking for methods named like
<codeclass="docutils literal"><spanclass="pre">set_property</span></code> if <codeclass="docutils literal"><spanclass="pre">property</span></code> is a keyword argument. i.e., no one
looks at the keywords, they just get passed through the API to the
artist constructor which looks for suitably named methods and calls
them with the value.</p>
<p>As a general rule, the use of <codeclass="docutils literal"><spanclass="pre">**kwargs</span></code> should be reserved for
pass-through keyword arguments, as in the example above. If all the
keyword args are to be used in the function, and not passed
on, use the key/value keyword args in the function definition rather
than the <codeclass="docutils literal"><spanclass="pre">**kwargs</span></code> idiom.</p>
<p>In some cases, you may want to consume some keys in the local
function, and let others pass through. You can <codeclass="docutils literal"><spanclass="pre">pop</span></code> the ones to be
used locally and pass on the rest. For example, in
<aclass="reference internal" href="../api/_as_gen/matplotlib.axes.Axes.plot.html#matplotlib.axes.Axes.plot" title="matplotlib.axes.Axes.plot"><codeclass="xref py py-meth docutils literal"><spanclass="pre">plot()</span></code></a>, <codeclass="docutils literal"><spanclass="pre">scalex</span></code> and <codeclass="docutils literal"><spanclass="pre">scaley</span></code> are
<spanid="custom-backend"></span><h3>Developing a new backend<aclass="headerlink" href="#developing-a-new-backend" title="Permalink to this headline">¶</a></h3>
<p>If you are working on a custom backend, the <em>backend</em> setting in
<codeclass="file docutils literal"><spanclass="pre">matplotlibrc</span></code> (<aclass="reference internal" href="../users/customizing.html#customizing-matplotlib"><spanclass="std std-ref">Customizing matplotlib</span></a>) supports an
external backend via the <codeclass="docutils literal"><spanclass="pre">module</span></code> directive. if
<codeclass="file docutils literal"><spanclass="pre">my_backend.py</span></code> is a Matplotlib backend in your
<spanclass="target" id="index-0"></span><aclass="reference internal" href="../faq/environment_variables_faq.html#envvar-PYTHONPATH"><codeclass="xref std std-envvar docutils literal"><spanclass="pre">PYTHONPATH</span></code></a>, you can set it on one of several ways</p>
<spanid="sample-data"></span><h3>Writing examples<aclass="headerlink" href="#writing-examples" title="Permalink to this headline">¶</a></h3>
<p>We have hundreds of examples in subdirectories of
<codeclass="file docutils literal"><spanclass="pre">matplotlib/examples</span></code>, and these are automatically generated
when the website is built to show up both in the <aclass="reference external" href="../examples/index.html">examples</a> and <aclass="reference external" href="../gallery.html">gallery</a> sections of the website.</p>
<p>Any sample data that the example uses should be kept small and
distributed with Matplotlib in the
<codeclass="xref py py-obj docutils literal"><spanclass="pre">lib/matplotlib/mpl-data/sample_data/</span></code> directory. Then in your
example code you can load it into a file handle with:</p>