<h1 dir="auto">Colors</h1>
<p dir="auto">While I was in the process of writing some colormap manipulation scripts, I went into the MPL code on 'colors' to find out how exactly it handles the conversion between the normalized RGBA tuples that MPL uses, and the actual 8-bit RGBA tuples that are used for colors in general.</p>
<p dir="auto">Looking at the <a href="https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/colors.py">colors</a> module, I noticed that the conversion from normalized to 8-bit tuples is inconsistent in several places.</p>
<p dir="auto">For example, when one requests some colors from a <code class="notranslate">Colormap</code> object in their 8-bit forms by using <code class="notranslate">bytes=True</code>, the normalized values are multiplied by <code class="notranslate">255</code> and then rounded down, as shown in </p><div class="Box Box--condensed my-2">
  <div class="Box-header f6">
    <p class="mb-0 text-bold">
      <a href="https://github.com/matplotlib/matplotlib/blob/8bddf0a885384b60864be278917ade792d92674e/lib/matplotlib/colors.py#L575-L583">matplotlib/lib/matplotlib/colors.py</a>
    </p>
    <p class="mb-0 color-fg-muted">
        Lines 575 to 583
      in
      <a data-pjax="true" class="commit-tease-sha" href="/matplotlib/matplotlib/commit/8bddf0a885384b60864be278917ade792d92674e">8bddf0a</a>
    </p>
  </div>
  <div itemprop="text" class="Box-body p-0 blob-wrapper blob-wrapper-embedded data">
    <table class="highlight tab-size mb-0 js-file-line-container" data-tab-size="8" data-paste-markdown-skip="">

        <tbody><tr class="border-0">
          <td id="L575" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="575"></td>
          <td id="LC575" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line"> <span class="pl-k">if</span> <span class="pl-s1">bytes</span>: </td>
        </tr>

        <tr class="border-0">
          <td id="L576" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="576"></td>
          <td id="LC576" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">     <span class="pl-s1">lut</span> <span class="pl-c1">=</span> (<span class="pl-s1">self</span>.<span class="pl-s1">_lut</span> <span class="pl-c1">*</span> <span class="pl-c1">255</span>).<span class="pl-en">astype</span>(<span class="pl-s1">np</span>.<span class="pl-s1">uint8</span>) </td>
        </tr>

        <tr class="border-0">
          <td id="L577" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="577"></td>
          <td id="LC577" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line"> <span class="pl-k">else</span>: </td>
        </tr>

        <tr class="border-0">
          <td id="L578" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="578"></td>
          <td id="LC578" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">     <span class="pl-s1">lut</span> <span class="pl-c1">=</span> <span class="pl-s1">self</span>.<span class="pl-s1">_lut</span>.<span class="pl-en">copy</span>()  <span class="pl-c"># Don't let alpha modify original _lut.</span> </td>
        </tr>

        <tr class="border-0">
          <td id="L579" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="579"></td>
          <td id="LC579" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">  </td>
        </tr>

        <tr class="border-0">
          <td id="L580" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="580"></td>
          <td id="LC580" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line"> <span class="pl-k">if</span> <span class="pl-s1">alpha</span> <span class="pl-c1">is</span> <span class="pl-c1">not</span> <span class="pl-c1">None</span>: </td>
        </tr>

        <tr class="border-0">
          <td id="L581" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="581"></td>
          <td id="LC581" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">     <span class="pl-s1">alpha</span> <span class="pl-c1">=</span> <span class="pl-s1">np</span>.<span class="pl-en">clip</span>(<span class="pl-s1">alpha</span>, <span class="pl-c1">0</span>, <span class="pl-c1">1</span>) </td>
        </tr>

        <tr class="border-0">
          <td id="L582" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="582"></td>
          <td id="LC582" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">     <span class="pl-k">if</span> <span class="pl-s1">bytes</span>: </td>
        </tr>

        <tr class="border-0">
          <td id="L583" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="583"></td>
          <td id="LC583" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">         <span class="pl-s1">alpha</span> <span class="pl-c1">=</span> <span class="pl-en">int</span>(<span class="pl-s1">alpha</span> <span class="pl-c1">*</span> <span class="pl-c1">255</span>) </td>
        </tr>
    </tbody></table>
  </div>
</div>
<p></p>
<p dir="auto">However, if I were to convert a normalized RGBA-tuple into an RGBA-hex (which should be the same as an 8-bit RGBA-tuple) using the <code class="notranslate">to_hex</code> function, then the normalized values are multiplied by <code class="notranslate">255</code> and rounded to nearest, as shown in<br>
</p><div class="Box Box--condensed my-2">
  <div class="Box-header f6">
    <p class="mb-0 text-bold">
      <a href="https://github.com/matplotlib/matplotlib/blob/8bddf0a885384b60864be278917ade792d92674e/lib/matplotlib/colors.py#L333-L343">matplotlib/lib/matplotlib/colors.py</a>
    </p>
    <p class="mb-0 color-fg-muted">
        Lines 333 to 343
      in
      <a data-pjax="true" class="commit-tease-sha" href="/matplotlib/matplotlib/commit/8bddf0a885384b60864be278917ade792d92674e">8bddf0a</a>
    </p>
  </div>
  <div itemprop="text" class="Box-body p-0 blob-wrapper blob-wrapper-embedded data">
    <table class="highlight tab-size mb-0 js-file-line-container" data-tab-size="8" data-paste-markdown-skip="">

        <tbody><tr class="border-0">
          <td id="L333" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="333"></td>
          <td id="LC333" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line"> <span class="pl-k">def</span> <span class="pl-en">to_hex</span>(<span class="pl-s1">c</span>, <span class="pl-s1">keep_alpha</span><span class="pl-c1">=</span><span class="pl-c1">False</span>): </td>
        </tr>

        <tr class="border-0">
          <td id="L334" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="334"></td>
          <td id="LC334" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">     <span class="pl-s">"""</span> </td>
        </tr>

        <tr class="border-0">
          <td id="L335" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="335"></td>
          <td id="LC335" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line"> <span class="pl-s">    Convert *c* to a hex color.</span> </td>
        </tr>

        <tr class="border-0">
          <td id="L336" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="336"></td>
          <td id="LC336" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line"> <span class="pl-s"></span> </td>
        </tr>

        <tr class="border-0">
          <td id="L337" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="337"></td>
          <td id="LC337" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line"> <span class="pl-s">    Uses the ``#rrggbb`` format if *keep_alpha* is False (the default),</span> </td>
        </tr>

        <tr class="border-0">
          <td id="L338" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="338"></td>
          <td id="LC338" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line"> <span class="pl-s">    ``#rrggbbaa`` otherwise.</span> </td>
        </tr>

        <tr class="border-0">
          <td id="L339" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="339"></td>
          <td id="LC339" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line"> <span class="pl-s">    """</span> </td>
        </tr>

        <tr class="border-0">
          <td id="L340" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="340"></td>
          <td id="LC340" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">     <span class="pl-s1">c</span> <span class="pl-c1">=</span> <span class="pl-en">to_rgba</span>(<span class="pl-s1">c</span>) </td>
        </tr>

        <tr class="border-0">
          <td id="L341" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="341"></td>
          <td id="LC341" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">     <span class="pl-k">if</span> <span class="pl-c1">not</span> <span class="pl-s1">keep_alpha</span>: </td>
        </tr>

        <tr class="border-0">
          <td id="L342" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="342"></td>
          <td id="LC342" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">         <span class="pl-s1">c</span> <span class="pl-c1">=</span> <span class="pl-s1">c</span>[:<span class="pl-c1">3</span>] </td>
        </tr>

        <tr class="border-0">
          <td id="L343" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="343"></td>
          <td id="LC343" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">     <span class="pl-k">return</span> <span class="pl-s">"#"</span> <span class="pl-c1">+</span> <span class="pl-s">""</span>.<span class="pl-en">join</span>(<span class="pl-en">format</span>(<span class="pl-en">int</span>(<span class="pl-en">round</span>(<span class="pl-s1">val</span> <span class="pl-c1">*</span> <span class="pl-c1">255</span>)), <span class="pl-s">"02x"</span>) <span class="pl-k">for</span> <span class="pl-s1">val</span> <span class="pl-c1">in</span> <span class="pl-s1">c</span>) </td>
        </tr>
    </tbody></table>
  </div>
</div>
<p></p>
<p dir="auto">If I go over the several other modules that deal with this conversion, I see that rounding down is much more common than rounding to nearest, even though I would have expected the latter (picking the closest corresponding color makes much more sense than picking the closest darker color).<br>
The latter would also ensure that doing <code class="notranslate">8-bit -&gt; normalized -&gt; 8-bit</code> always gives the same values back, regardless of potential floating point errors.<br>
Is there a reason why there are two different conversions for the same thing, and why the (in my opinion) worse conversion is much more common?</p>
<h1 dir="auto">Colormaps</h1>
<p dir="auto">I also found a similar peculiarity for picking colors from a <code class="notranslate">Colormap</code> object, shown in </p><div class="Box Box--condensed my-2">
  <div class="Box-header f6">
    <p class="mb-0 text-bold">
      <a href="https://github.com/matplotlib/matplotlib/blob/8bddf0a885384b60864be278917ade792d92674e/lib/matplotlib/colors.py#L558-L568">matplotlib/lib/matplotlib/colors.py</a>
    </p>
    <p class="mb-0 color-fg-muted">
        Lines 558 to 568
      in
      <a data-pjax="true" class="commit-tease-sha" href="/matplotlib/matplotlib/commit/8bddf0a885384b60864be278917ade792d92674e">8bddf0a</a>
    </p>
  </div>
  <div itemprop="text" class="Box-body p-0 blob-wrapper blob-wrapper-embedded data">
    <table class="highlight tab-size mb-0 js-file-line-container" data-tab-size="8" data-paste-markdown-skip="">

        <tbody><tr class="border-0">
          <td id="L558" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="558"></td>
          <td id="LC558" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line"> <span class="pl-k">if</span> <span class="pl-s1">xa</span>.<span class="pl-s1">dtype</span>.<span class="pl-s1">kind</span> <span class="pl-c1">==</span> <span class="pl-s">"f"</span>: </td>
        </tr>

        <tr class="border-0">
          <td id="L559" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="559"></td>
          <td id="LC559" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">     <span class="pl-k">with</span> <span class="pl-s1">np</span>.<span class="pl-en">errstate</span>(<span class="pl-s1">invalid</span><span class="pl-c1">=</span><span class="pl-s">"ignore"</span>): </td>
        </tr>

        <tr class="border-0">
          <td id="L560" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="560"></td>
          <td id="LC560" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">         <span class="pl-s1">xa</span> <span class="pl-c1">*=</span> <span class="pl-s1">self</span>.<span class="pl-v">N</span> </td>
        </tr>

        <tr class="border-0">
          <td id="L561" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="561"></td>
          <td id="LC561" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">         <span class="pl-c"># Negative values are out of range, but astype(int) would</span> </td>
        </tr>

        <tr class="border-0">
          <td id="L562" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="562"></td>
          <td id="LC562" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">         <span class="pl-c"># truncate them towards zero.</span> </td>
        </tr>

        <tr class="border-0">
          <td id="L563" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="563"></td>
          <td id="LC563" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">         <span class="pl-s1">xa</span>[<span class="pl-s1">xa</span> <span class="pl-c1">&lt;</span> <span class="pl-c1">0</span>] <span class="pl-c1">=</span> <span class="pl-c1">-</span><span class="pl-c1">1</span> </td>
        </tr>

        <tr class="border-0">
          <td id="L564" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="564"></td>
          <td id="LC564" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">         <span class="pl-c"># xa == 1 (== N after multiplication) is not out of range.</span> </td>
        </tr>

        <tr class="border-0">
          <td id="L565" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="565"></td>
          <td id="LC565" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">         <span class="pl-s1">xa</span>[<span class="pl-s1">xa</span> <span class="pl-c1">==</span> <span class="pl-s1">self</span>.<span class="pl-v">N</span>] <span class="pl-c1">=</span> <span class="pl-s1">self</span>.<span class="pl-v">N</span> <span class="pl-c1">-</span> <span class="pl-c1">1</span> </td>
        </tr>

        <tr class="border-0">
          <td id="L566" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="566"></td>
          <td id="LC566" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">         <span class="pl-c"># Avoid converting large positive values to negative integers.</span> </td>
        </tr>

        <tr class="border-0">
          <td id="L567" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="567"></td>
          <td id="LC567" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">         <span class="pl-s1">np</span>.<span class="pl-en">clip</span>(<span class="pl-s1">xa</span>, <span class="pl-c1">-</span><span class="pl-c1">1</span>, <span class="pl-s1">self</span>.<span class="pl-v">N</span>, <span class="pl-s1">out</span><span class="pl-c1">=</span><span class="pl-s1">xa</span>) </td>
        </tr>

        <tr class="border-0">
          <td id="L568" class="blob-num border-0 px-3 py-0 color-bg-default" data-line-number="568"></td>
          <td id="LC568" class="blob-code border-0 px-3 py-0 color-bg-default blob-code-inner js-file-line">         <span class="pl-s1">xa</span> <span class="pl-c1">=</span> <span class="pl-s1">xa</span>.<span class="pl-en">astype</span>(<span class="pl-s1">int</span>) </td>
        </tr>
    </tbody></table>
  </div>
</div>
<br>
I would have expected here that the nearest color in the colormap is selected when a fraction is given, i.e., <code class="notranslate">xa</code> is calculated as<p></p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="xa = np.rint(xa*(self.N-1))"><pre class="notranslate"><span class="pl-s1">xa</span> <span class="pl-c1">=</span> <span class="pl-s1">np</span>.<span class="pl-en">rint</span>(<span class="pl-s1">xa</span><span class="pl-c1">*</span>(<span class="pl-s1">self</span>.<span class="pl-v">N</span><span class="pl-c1">-</span><span class="pl-c1">1</span>))</pre></div>
<p dir="auto">instead of</p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="xa *= self.N"><pre class="notranslate"><span class="pl-s1">xa</span> <span class="pl-c1">*=</span> <span class="pl-s1">self</span>.<span class="pl-v">N</span></pre></div>
<h3 dir="auto">Bug report</h3>
<p dir="auto"><strong>Bug summary</strong></p>
<p dir="auto">imsave saves some pixels wrong to output image, or possibly it is always mapping certain values of the input array to the wrong output values.  Colormap values appear correct, but actual data saved does not match colormap.</p>
<p dir="auto"><strong>Code for reproduction</strong></p>

<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="#!/usr/bin/env python3
&quot;&quot;&quot;Test imsave using gray colormap
&quot;&quot;&quot;
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
import PIL

def print_arrays_cols(*args):
    for i in range(len(args[1])):
        row_vals = []
        for (j, arg) in enumerate(args):
            print(&quot;%.3f&quot;%(arg[i]), end=&quot;&quot;)
            if j &lt; len(args)-1:
                print(&quot;\t\t&quot;, end=&quot;&quot;)
            row_vals.append(arg[i])
        if all([x==row_vals[0] for x in row_vals]):
            print(&quot;&quot;)
        else:
            print(&quot; ****&quot;)

def main():
    plt.gray()
    test_array = np.vstack((np.arange(0,256), np.arange(0,256)))
    test_array_cm_gray = matplotlib.cm.gray(test_array)
    # scale max to 255
    test_array_cm_gray = test_array_cm_gray * 255
    # save test_array to png
    plt.imsave('testme.png', test_array, format='png')
    # save test_array to tiff
    plt.imsave('testme.tif', test_array, format='tiff')

    # imread from png
    test_png_load = plt.imread('testme.png')
    # scale max to 255
    test_png_load = test_png_load * 255
    # imread from tiff
    test_tiff_load = plt.imread('testme.tif')
    # pil open from png
    pil_png_image = PIL.Image.open('testme.png')
    test_png_pil_load = list(pil_png_image.getdata())
    # just get first row, and R of RGBA
    test_png_pil_load = [x[0] for x in test_png_pil_load[0:256]]
    # pil open from tiff
    pil_tiff_image = PIL.Image.open('testme.tif')
    test_tiff_pil_load = list(pil_tiff_image.getdata())
    # just get first row
    test_tiff_pil_load = test_png_pil_load[0:256]

    # print orig, colormap, and 2 methods of loading png image data
    print(&quot;test_array\tcm.gray()\tpng_pil_load\tpng_imread_load&quot;)
    print(&quot;----------\t---------\t------------\t---------------&quot;)
    print_arrays_cols(
            test_array[0,:].flatten(),
            test_array_cm_gray[0,:,0].flatten(),
            test_png_pil_load,
            test_png_load[0,:,0].flatten(),
            )

    # print orig, colormap, and 2 methods of loading tiff image data
    print(&quot;&quot;)
    print(&quot;test_array\tcm.gray()\ttiff_pil_load\ttiff_imread_load&quot;)
    print(&quot;----------\t---------\t-------------\t----------------&quot;)
    print_arrays_cols(
            test_array[0,:].flatten(),
            test_array_cm_gray[0,:,0].flatten(),
            test_tiff_pil_load,
            test_tiff_load[0,:,0].flatten(),
            )

if __name__ == '__main__':
    main()"><pre class="notranslate"><span class="pl-c">#!/usr/bin/env python3</span>
<span class="pl-s">"""Test imsave using gray colormap</span>
<span class="pl-s">"""</span>
<span class="pl-k">import</span> <span class="pl-s1">numpy</span> <span class="pl-k">as</span> <span class="pl-s1">np</span>
<span class="pl-k">import</span> <span class="pl-s1">matplotlib</span>.<span class="pl-s1">pyplot</span> <span class="pl-k">as</span> <span class="pl-s1">plt</span>
<span class="pl-k">import</span> <span class="pl-s1">matplotlib</span>
<span class="pl-k">import</span> <span class="pl-v">PIL</span>

<span class="pl-k">def</span> <span class="pl-en">print_arrays_cols</span>(<span class="pl-c1">*</span><span class="pl-s1">args</span>):
    <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-en">len</span>(<span class="pl-s1">args</span>[<span class="pl-c1">1</span>])):
        <span class="pl-s1">row_vals</span> <span class="pl-c1">=</span> []
        <span class="pl-k">for</span> (<span class="pl-s1">j</span>, <span class="pl-s1">arg</span>) <span class="pl-c1">in</span> <span class="pl-en">enumerate</span>(<span class="pl-s1">args</span>):
            <span class="pl-en">print</span>(<span class="pl-s">"%.3f"</span><span class="pl-c1">%</span>(<span class="pl-s1">arg</span>[<span class="pl-s1">i</span>]), <span class="pl-s1">end</span><span class="pl-c1">=</span><span class="pl-s">""</span>)
            <span class="pl-k">if</span> <span class="pl-s1">j</span> <span class="pl-c1">&lt;</span> <span class="pl-en">len</span>(<span class="pl-s1">args</span>)<span class="pl-c1">-</span><span class="pl-c1">1</span>:
                <span class="pl-en">print</span>(<span class="pl-s">"<span class="pl-cce">\t</span><span class="pl-cce">\t</span>"</span>, <span class="pl-s1">end</span><span class="pl-c1">=</span><span class="pl-s">""</span>)
            <span class="pl-s1">row_vals</span>.<span class="pl-en">append</span>(<span class="pl-s1">arg</span>[<span class="pl-s1">i</span>])
        <span class="pl-k">if</span> <span class="pl-en">all</span>([<span class="pl-s1">x</span><span class="pl-c1">==</span><span class="pl-s1">row_vals</span>[<span class="pl-c1">0</span>] <span class="pl-k">for</span> <span class="pl-s1">x</span> <span class="pl-c1">in</span> <span class="pl-s1">row_vals</span>]):
            <span class="pl-en">print</span>(<span class="pl-s">""</span>)
        <span class="pl-k">else</span>:
            <span class="pl-en">print</span>(<span class="pl-s">" ****"</span>)

<span class="pl-k">def</span> <span class="pl-en">main</span>():
    <span class="pl-s1">plt</span>.<span class="pl-en">gray</span>()
    <span class="pl-s1">test_array</span> <span class="pl-c1">=</span> <span class="pl-s1">np</span>.<span class="pl-en">vstack</span>((<span class="pl-s1">np</span>.<span class="pl-en">arange</span>(<span class="pl-c1">0</span>,<span class="pl-c1">256</span>), <span class="pl-s1">np</span>.<span class="pl-en">arange</span>(<span class="pl-c1">0</span>,<span class="pl-c1">256</span>)))
    <span class="pl-s1">test_array_cm_gray</span> <span class="pl-c1">=</span> <span class="pl-s1">matplotlib</span>.<span class="pl-s1">cm</span>.<span class="pl-en">gray</span>(<span class="pl-s1">test_array</span>)
    <span class="pl-c"># scale max to 255</span>
    <span class="pl-s1">test_array_cm_gray</span> <span class="pl-c1">=</span> <span class="pl-s1">test_array_cm_gray</span> <span class="pl-c1">*</span> <span class="pl-c1">255</span>
    <span class="pl-c"># save test_array to png</span>
    <span class="pl-s1">plt</span>.<span class="pl-en">imsave</span>(<span class="pl-s">'testme.png'</span>, <span class="pl-s1">test_array</span>, <span class="pl-s1">format</span><span class="pl-c1">=</span><span class="pl-s">'png'</span>)
    <span class="pl-c"># save test_array to tiff</span>
    <span class="pl-s1">plt</span>.<span class="pl-en">imsave</span>(<span class="pl-s">'testme.tif'</span>, <span class="pl-s1">test_array</span>, <span class="pl-s1">format</span><span class="pl-c1">=</span><span class="pl-s">'tiff'</span>)

    <span class="pl-c"># imread from png</span>
    <span class="pl-s1">test_png_load</span> <span class="pl-c1">=</span> <span class="pl-s1">plt</span>.<span class="pl-en">imread</span>(<span class="pl-s">'testme.png'</span>)
    <span class="pl-c"># scale max to 255</span>
    <span class="pl-s1">test_png_load</span> <span class="pl-c1">=</span> <span class="pl-s1">test_png_load</span> <span class="pl-c1">*</span> <span class="pl-c1">255</span>
    <span class="pl-c"># imread from tiff</span>
    <span class="pl-s1">test_tiff_load</span> <span class="pl-c1">=</span> <span class="pl-s1">plt</span>.<span class="pl-en">imread</span>(<span class="pl-s">'testme.tif'</span>)
    <span class="pl-c"># pil open from png</span>
    <span class="pl-s1">pil_png_image</span> <span class="pl-c1">=</span> <span class="pl-v">PIL</span>.<span class="pl-v">Image</span>.<span class="pl-en">open</span>(<span class="pl-s">'testme.png'</span>)
    <span class="pl-s1">test_png_pil_load</span> <span class="pl-c1">=</span> <span class="pl-en">list</span>(<span class="pl-s1">pil_png_image</span>.<span class="pl-en">getdata</span>())
    <span class="pl-c"># just get first row, and R of RGBA</span>
    <span class="pl-s1">test_png_pil_load</span> <span class="pl-c1">=</span> [<span class="pl-s1">x</span>[<span class="pl-c1">0</span>] <span class="pl-k">for</span> <span class="pl-s1">x</span> <span class="pl-c1">in</span> <span class="pl-s1">test_png_pil_load</span>[<span class="pl-c1">0</span>:<span class="pl-c1">256</span>]]
    <span class="pl-c"># pil open from tiff</span>
    <span class="pl-s1">pil_tiff_image</span> <span class="pl-c1">=</span> <span class="pl-v">PIL</span>.<span class="pl-v">Image</span>.<span class="pl-en">open</span>(<span class="pl-s">'testme.tif'</span>)
    <span class="pl-s1">test_tiff_pil_load</span> <span class="pl-c1">=</span> <span class="pl-en">list</span>(<span class="pl-s1">pil_tiff_image</span>.<span class="pl-en">getdata</span>())
    <span class="pl-c"># just get first row</span>
    <span class="pl-s1">test_tiff_pil_load</span> <span class="pl-c1">=</span> <span class="pl-s1">test_png_pil_load</span>[<span class="pl-c1">0</span>:<span class="pl-c1">256</span>]

    <span class="pl-c"># print orig, colormap, and 2 methods of loading png image data</span>
    <span class="pl-en">print</span>(<span class="pl-s">"test_array<span class="pl-cce">\t</span>cm.gray()<span class="pl-cce">\t</span>png_pil_load<span class="pl-cce">\t</span>png_imread_load"</span>)
    <span class="pl-en">print</span>(<span class="pl-s">"----------<span class="pl-cce">\t</span>---------<span class="pl-cce">\t</span>------------<span class="pl-cce">\t</span>---------------"</span>)
    <span class="pl-en">print_arrays_cols</span>(
            <span class="pl-s1">test_array</span>[<span class="pl-c1">0</span>,:].<span class="pl-en">flatten</span>(),
            <span class="pl-s1">test_array_cm_gray</span>[<span class="pl-c1">0</span>,:,<span class="pl-c1">0</span>].<span class="pl-en">flatten</span>(),
            <span class="pl-s1">test_png_pil_load</span>,
            <span class="pl-s1">test_png_load</span>[<span class="pl-c1">0</span>,:,<span class="pl-c1">0</span>].<span class="pl-en">flatten</span>(),
            )

    <span class="pl-c"># print orig, colormap, and 2 methods of loading tiff image data</span>
    <span class="pl-en">print</span>(<span class="pl-s">""</span>)
    <span class="pl-en">print</span>(<span class="pl-s">"test_array<span class="pl-cce">\t</span>cm.gray()<span class="pl-cce">\t</span>tiff_pil_load<span class="pl-cce">\t</span>tiff_imread_load"</span>)
    <span class="pl-en">print</span>(<span class="pl-s">"----------<span class="pl-cce">\t</span>---------<span class="pl-cce">\t</span>-------------<span class="pl-cce">\t</span>----------------"</span>)
    <span class="pl-en">print_arrays_cols</span>(
            <span class="pl-s1">test_array</span>[<span class="pl-c1">0</span>,:].<span class="pl-en">flatten</span>(),
            <span class="pl-s1">test_array_cm_gray</span>[<span class="pl-c1">0</span>,:,<span class="pl-c1">0</span>].<span class="pl-en">flatten</span>(),
            <span class="pl-s1">test_tiff_pil_load</span>,
            <span class="pl-s1">test_tiff_load</span>[<span class="pl-c1">0</span>,:,<span class="pl-c1">0</span>].<span class="pl-en">flatten</span>(),
            )

<span class="pl-k">if</span> <span class="pl-s1">__name__</span> <span class="pl-c1">==</span> <span class="pl-s">'__main__'</span>:
    <span class="pl-en">main</span>()</pre></div>
<p dir="auto"><strong>Actual outcome</strong></p>

<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="test_array	cm.gray()	png_pil_load	png_imread_load
----------	---------	------------	---------------
0.000		0.000		0.000		0.000
1.000		1.000		1.000		1.000
2.000		2.000		2.000		2.000
3.000		3.000		3.000		3.000
4.000		4.000		4.000		4.000
5.000		5.000		5.000		5.000
6.000		6.000		6.000		6.000
7.000		7.000		7.000		7.000
8.000		8.000		8.000		8.000
9.000		9.000		9.000		9.000
10.000		10.000		10.000		10.000
11.000		11.000		11.000		11.000
12.000		12.000		12.000		12.000
13.000		13.000		13.000		13.000
14.000		14.000		14.000		14.000
15.000		15.000		15.000		15.000
16.000		16.000		16.000		16.000
17.000		17.000		17.000		17.000
18.000		18.000		18.000		18.000
19.000		19.000		19.000		19.000
20.000		20.000		20.000		20.000
21.000		21.000		21.000		21.000
22.000		22.000		22.000		22.000
23.000		23.000		23.000		23.000
24.000		24.000		24.000		24.000
25.000		25.000		25.000		25.000
26.000		26.000		26.000		26.000
27.000		27.000		27.000		27.000
28.000		28.000		28.000		28.000
29.000		29.000		29.000		29.000
30.000		30.000		30.000		30.000
31.000		31.000		31.000		31.000
32.000		32.000		32.000		32.000
33.000		33.000		32.000		32.000 ****
34.000		34.000		34.000		34.000
35.000		35.000		35.000		35.000
36.000		36.000		36.000		36.000
37.000		37.000		36.000		36.000 ****
38.000		38.000		38.000		38.000
39.000		39.000		39.000		39.000
40.000		40.000		40.000		40.000
41.000		41.000		40.000		40.000 ****
42.000		42.000		42.000		42.000
43.000		43.000		43.000		43.000
44.000		44.000		44.000		44.000
45.000		45.000		44.000		44.000 ****
46.000		46.000		46.000		46.000
47.000		47.000		47.000		47.000
48.000		48.000		48.000		48.000
49.000		49.000		48.000		48.000 ****
50.000		50.000		50.000		50.000
51.000		51.000		51.000		51.000
52.000		52.000		52.000		52.000
53.000		53.000		52.000		52.000 ****
54.000		54.000		54.000		54.000
55.000		55.000		55.000		55.000
56.000		56.000		56.000		56.000
57.000		57.000		56.000		56.000 ****
58.000		58.000		58.000		58.000
59.000		59.000		59.000		59.000
60.000		60.000		60.000		60.000
61.000		61.000		60.000		60.000 ****
62.000		62.000		62.000		62.000
63.000		63.000		63.000		63.000
64.000		64.000		64.000		64.000
65.000		65.000		65.000		65.000
66.000		66.000		65.000		65.000 ****
67.000		67.000		67.000		67.000
68.000		68.000		68.000		68.000
69.000		69.000		69.000		69.000
70.000		70.000		70.000		70.000
71.000		71.000		71.000		71.000
72.000		72.000		72.000		72.000
73.000		73.000		73.000		73.000
74.000		74.000		73.000		73.000 ****
75.000		75.000		75.000		75.000
76.000		76.000		76.000		76.000
77.000		77.000		77.000		77.000
78.000		78.000		78.000		78.000
79.000		79.000		79.000		79.000
80.000		80.000		80.000		80.000
81.000		81.000		81.000		81.000
82.000		82.000		81.000		81.000 ****
83.000		83.000		83.000		83.000
84.000		84.000		84.000		84.000
85.000		85.000		85.000		85.000
86.000		86.000		86.000		86.000
87.000		87.000		87.000		87.000
88.000		88.000		88.000		88.000
89.000		89.000		89.000		89.000
90.000		90.000		89.000		89.000 ****
91.000		91.000		91.000		91.000
92.000		92.000		92.000		92.000
93.000		93.000		93.000		93.000
94.000		94.000		94.000		94.000
95.000		95.000		95.000		95.000
96.000		96.000		96.000		96.000
97.000		97.000		97.000		97.000
98.000		98.000		97.000		97.000 ****
99.000		99.000		99.000		99.000
100.000		100.000		100.000		100.000
101.000		101.000		101.000		101.000
102.000		102.000		102.000		102.000
103.000		103.000		103.000		103.000
104.000		104.000		104.000		104.000
105.000		105.000		105.000		105.000
106.000		106.000		105.000		105.000 ****
107.000		107.000		107.000		107.000
108.000		108.000		108.000		108.000
109.000		109.000		109.000		109.000
110.000		110.000		110.000		110.000
111.000		111.000		111.000		111.000
112.000		112.000		112.000		112.000
113.000		113.000		113.000		113.000
114.000		114.000		113.000		113.000 ****
115.000		115.000		115.000		115.000
116.000		116.000		116.000		116.000
117.000		117.000		117.000		117.000
118.000		118.000		118.000		118.000
119.000		119.000		119.000		119.000
120.000		120.000		120.000		120.000
121.000		121.000		121.000		121.000
122.000		122.000		121.000		121.000 ****
123.000		123.000		123.000		123.000
124.000		124.000		124.000		124.000
125.000		125.000		125.000		125.000
126.000		126.000		126.000		126.000
127.000		127.000		127.000		127.000
128.000		128.000		128.000		128.000
129.000		129.000		129.000		129.000
130.000		130.000		130.000		130.000
131.000		131.000		131.000		131.000
132.000		132.000		131.000		131.000 ****
133.000		133.000		133.000		133.000
134.000		134.000		134.000		134.000
135.000		135.000		135.000		135.000
136.000		136.000		136.000		136.000
137.000		137.000		137.000		137.000
138.000		138.000		138.000		138.000
139.000		139.000		139.000		139.000
140.000		140.000		140.000		140.000
141.000		141.000		141.000		141.000
142.000		142.000		142.000		142.000
143.000		143.000		143.000		143.000
144.000		144.000		144.000		144.000
145.000		145.000		145.000		145.000
146.000		146.000		146.000		146.000
147.000		147.000		147.000		147.000
148.000		148.000		147.000		147.000 ****
149.000		149.000		149.000		149.000
150.000		150.000		150.000		150.000
151.000		151.000		151.000		151.000
152.000		152.000		152.000		152.000
153.000		153.000		153.000		153.000
154.000		154.000		154.000		154.000
155.000		155.000		155.000		155.000
156.000		156.000		156.000		156.000
157.000		157.000		157.000		157.000
158.000		158.000		158.000		158.000
159.000		159.000		159.000		159.000
160.000		160.000		160.000		160.000
161.000		161.000		161.000		161.000
162.000		162.000		162.000		162.000
163.000		163.000		163.000		163.000
164.000		164.000		163.000		163.000 ****
165.000		165.000		165.000		165.000
166.000		166.000		166.000		166.000
167.000		167.000		167.000		167.000
168.000		168.000		168.000		168.000
169.000		169.000		169.000		169.000
170.000		170.000		170.000		170.000
171.000		171.000		171.000		171.000
172.000		172.000		172.000		172.000
173.000		173.000		173.000		173.000
174.000		174.000		174.000		174.000
175.000		175.000		175.000		175.000
176.000		176.000		176.000		176.000
177.000		177.000		177.000		177.000
178.000		178.000		178.000		178.000
179.000		179.000		179.000		179.000
180.000		180.000		179.000		179.000 ****
181.000		181.000		181.000		181.000
182.000		182.000		182.000		182.000
183.000		183.000		183.000		183.000
184.000		184.000		184.000		184.000
185.000		185.000		185.000		185.000
186.000		186.000		186.000		186.000
187.000		187.000		187.000		187.000
188.000		188.000		188.000		188.000
189.000		189.000		189.000		189.000
190.000		190.000		190.000		190.000
191.000		191.000		191.000		191.000
192.000		192.000		192.000		192.000
193.000		193.000		193.000		193.000
194.000		194.000		194.000		194.000
195.000		195.000		195.000		195.000
196.000		196.000		195.000		195.000 ****
197.000		197.000		197.000		197.000
198.000		198.000		198.000		198.000
199.000		199.000		199.000		199.000
200.000		200.000		200.000		200.000
201.000		201.000		201.000		201.000
202.000		202.000		202.000		202.000
203.000		203.000		203.000		203.000
204.000		204.000		204.000		204.000
205.000		205.000		205.000		205.000
206.000		206.000		206.000		206.000
207.000		207.000		207.000		207.000
208.000		208.000		208.000		208.000
209.000		209.000		209.000		209.000
210.000		210.000		210.000		210.000
211.000		211.000		211.000		211.000
212.000		212.000		211.000		211.000 ****
213.000		213.000		213.000		213.000
214.000		214.000		214.000		214.000
215.000		215.000		215.000		215.000
216.000		216.000		216.000		216.000
217.000		217.000		217.000		217.000
218.000		218.000		218.000		218.000
219.000		219.000		219.000		219.000
220.000		220.000		220.000		220.000
221.000		221.000		221.000		221.000
222.000		222.000		222.000		222.000
223.000		223.000		223.000		223.000
224.000		224.000		224.000		224.000
225.000		225.000		225.000		225.000
226.000		226.000		226.000		226.000
227.000		227.000		227.000		227.000
228.000		228.000		227.000		227.000 ****
229.000		229.000		229.000		229.000
230.000		230.000		230.000		230.000
231.000		231.000		231.000		231.000
232.000		232.000		232.000		232.000
233.000		233.000		233.000		233.000
234.000		234.000		234.000		234.000
235.000		235.000		235.000		235.000
236.000		236.000		236.000		236.000
237.000		237.000		237.000		237.000
238.000		238.000		238.000		238.000
239.000		239.000		239.000		239.000
240.000		240.000		240.000		240.000
241.000		241.000		241.000		241.000
242.000		242.000		242.000		242.000
243.000		243.000		243.000		243.000
244.000		244.000		243.000		243.000 ****
245.000		245.000		245.000		245.000
246.000		246.000		246.000		246.000
247.000		247.000		247.000		247.000
248.000		248.000		248.000		248.000
249.000		249.000		249.000		249.000
250.000		250.000		250.000		250.000
251.000		251.000		251.000		251.000
252.000		252.000		252.000		252.000
253.000		253.000		253.000		253.000
254.000		254.000		254.000		254.000
255.000		255.000		255.000		255.000

test_array	cm.gray()	tiff_pil_load	tiff_imread_load
----------	---------	-------------	----------------
0.000		0.000		0.000		0.000
1.000		1.000		1.000		1.000
2.000		2.000		2.000		2.000
3.000		3.000		3.000		3.000
4.000		4.000		4.000		4.000
5.000		5.000		5.000		5.000
6.000		6.000		6.000		6.000
7.000		7.000		7.000		7.000
8.000		8.000		8.000		8.000
9.000		9.000		9.000		9.000
10.000		10.000		10.000		10.000
11.000		11.000		11.000		11.000
12.000		12.000		12.000		12.000
13.000		13.000		13.000		13.000
14.000		14.000		14.000		14.000
15.000		15.000		15.000		15.000
16.000		16.000		16.000		16.000
17.000		17.000		17.000		17.000
18.000		18.000		18.000		18.000
19.000		19.000		19.000		19.000
20.000		20.000		20.000		20.000
21.000		21.000		21.000		21.000
22.000		22.000		22.000		22.000
23.000		23.000		23.000		23.000
24.000		24.000		24.000		24.000
25.000		25.000		25.000		25.000
26.000		26.000		26.000		26.000
27.000		27.000		27.000		27.000
28.000		28.000		28.000		28.000
29.000		29.000		29.000		29.000
30.000		30.000		30.000		30.000
31.000		31.000		31.000		31.000
32.000		32.000		32.000		32.000
33.000		33.000		32.000		32.000 ****
34.000		34.000		34.000		34.000
35.000		35.000		35.000		35.000
36.000		36.000		36.000		36.000
37.000		37.000		36.000		36.000 ****
38.000		38.000		38.000		38.000
39.000		39.000		39.000		39.000
40.000		40.000		40.000		40.000
41.000		41.000		40.000		40.000 ****
42.000		42.000		42.000		42.000
43.000		43.000		43.000		43.000
44.000		44.000		44.000		44.000
45.000		45.000		44.000		44.000 ****
46.000		46.000		46.000		46.000
47.000		47.000		47.000		47.000
48.000		48.000		48.000		48.000
49.000		49.000		48.000		48.000 ****
50.000		50.000		50.000		50.000
51.000		51.000		51.000		51.000
52.000		52.000		52.000		52.000
53.000		53.000		52.000		52.000 ****
54.000		54.000		54.000		54.000
55.000		55.000		55.000		55.000
56.000		56.000		56.000		56.000
57.000		57.000		56.000		56.000 ****
58.000		58.000		58.000		58.000
59.000		59.000		59.000		59.000
60.000		60.000		60.000		60.000
61.000		61.000		60.000		60.000 ****
62.000		62.000		62.000		62.000
63.000		63.000		63.000		63.000
64.000		64.000		64.000		64.000
65.000		65.000		65.000		65.000
66.000		66.000		65.000		65.000 ****
67.000		67.000		67.000		67.000
68.000		68.000		68.000		68.000
69.000		69.000		69.000		69.000
70.000		70.000		70.000		70.000
71.000		71.000		71.000		71.000
72.000		72.000		72.000		72.000
73.000		73.000		73.000		73.000
74.000		74.000		73.000		73.000 ****
75.000		75.000		75.000		75.000
76.000		76.000		76.000		76.000
77.000		77.000		77.000		77.000
78.000		78.000		78.000		78.000
79.000		79.000		79.000		79.000
80.000		80.000		80.000		80.000
81.000		81.000		81.000		81.000
82.000		82.000		81.000		81.000 ****
83.000		83.000		83.000		83.000
84.000		84.000		84.000		84.000
85.000		85.000		85.000		85.000
86.000		86.000		86.000		86.000
87.000		87.000		87.000		87.000
88.000		88.000		88.000		88.000
89.000		89.000		89.000		89.000
90.000		90.000		89.000		89.000 ****
91.000		91.000		91.000		91.000
92.000		92.000		92.000		92.000
93.000		93.000		93.000		93.000
94.000		94.000		94.000		94.000
95.000		95.000		95.000		95.000
96.000		96.000		96.000		96.000
97.000		97.000		97.000		97.000
98.000		98.000		97.000		97.000 ****
99.000		99.000		99.000		99.000
100.000		100.000		100.000		100.000
101.000		101.000		101.000		101.000
102.000		102.000		102.000		102.000
103.000		103.000		103.000		103.000
104.000		104.000		104.000		104.000
105.000		105.000		105.000		105.000
106.000		106.000		105.000		105.000 ****
107.000		107.000		107.000		107.000
108.000		108.000		108.000		108.000
109.000		109.000		109.000		109.000
110.000		110.000		110.000		110.000
111.000		111.000		111.000		111.000
112.000		112.000		112.000		112.000
113.000		113.000		113.000		113.000
114.000		114.000		113.000		113.000 ****
115.000		115.000		115.000		115.000
116.000		116.000		116.000		116.000
117.000		117.000		117.000		117.000
118.000		118.000		118.000		118.000
119.000		119.000		119.000		119.000
120.000		120.000		120.000		120.000
121.000		121.000		121.000		121.000
122.000		122.000		121.000		121.000 ****
123.000		123.000		123.000		123.000
124.000		124.000		124.000		124.000
125.000		125.000		125.000		125.000
126.000		126.000		126.000		126.000
127.000		127.000		127.000		127.000
128.000		128.000		128.000		128.000
129.000		129.000		129.000		129.000
130.000		130.000		130.000		130.000
131.000		131.000		131.000		131.000
132.000		132.000		131.000		131.000 ****
133.000		133.000		133.000		133.000
134.000		134.000		134.000		134.000
135.000		135.000		135.000		135.000
136.000		136.000		136.000		136.000
137.000		137.000		137.000		137.000
138.000		138.000		138.000		138.000
139.000		139.000		139.000		139.000
140.000		140.000		140.000		140.000
141.000		141.000		141.000		141.000
142.000		142.000		142.000		142.000
143.000		143.000		143.000		143.000
144.000		144.000		144.000		144.000
145.000		145.000		145.000		145.000
146.000		146.000		146.000		146.000
147.000		147.000		147.000		147.000
148.000		148.000		147.000		147.000 ****
149.000		149.000		149.000		149.000
150.000		150.000		150.000		150.000
151.000		151.000		151.000		151.000
152.000		152.000		152.000		152.000
153.000		153.000		153.000		153.000
154.000		154.000		154.000		154.000
155.000		155.000		155.000		155.000
156.000		156.000		156.000		156.000
157.000		157.000		157.000		157.000
158.000		158.000		158.000		158.000
159.000		159.000		159.000		159.000
160.000		160.000		160.000		160.000
161.000		161.000		161.000		161.000
162.000		162.000		162.000		162.000
163.000		163.000		163.000		163.000
164.000		164.000		163.000		163.000 ****
165.000		165.000		165.000		165.000
166.000		166.000		166.000		166.000
167.000		167.000		167.000		167.000
168.000		168.000		168.000		168.000
169.000		169.000		169.000		169.000
170.000		170.000		170.000		170.000
171.000		171.000		171.000		171.000
172.000		172.000		172.000		172.000
173.000		173.000		173.000		173.000
174.000		174.000		174.000		174.000
175.000		175.000		175.000		175.000
176.000		176.000		176.000		176.000
177.000		177.000		177.000		177.000
178.000		178.000		178.000		178.000
179.000		179.000		179.000		179.000
180.000		180.000		179.000		179.000 ****
181.000		181.000		181.000		181.000
182.000		182.000		182.000		182.000
183.000		183.000		183.000		183.000
184.000		184.000		184.000		184.000
185.000		185.000		185.000		185.000
186.000		186.000		186.000		186.000
187.000		187.000		187.000		187.000
188.000		188.000		188.000		188.000
189.000		189.000		189.000		189.000
190.000		190.000		190.000		190.000
191.000		191.000		191.000		191.000
192.000		192.000		192.000		192.000
193.000		193.000		193.000		193.000
194.000		194.000		194.000		194.000
195.000		195.000		195.000		195.000
196.000		196.000		195.000		195.000 ****
197.000		197.000		197.000		197.000
198.000		198.000		198.000		198.000
199.000		199.000		199.000		199.000
200.000		200.000		200.000		200.000
201.000		201.000		201.000		201.000
202.000		202.000		202.000		202.000
203.000		203.000		203.000		203.000
204.000		204.000		204.000		204.000
205.000		205.000		205.000		205.000
206.000		206.000		206.000		206.000
207.000		207.000		207.000		207.000
208.000		208.000		208.000		208.000
209.000		209.000		209.000		209.000
210.000		210.000		210.000		210.000
211.000		211.000		211.000		211.000
212.000		212.000		211.000		211.000 ****
213.000		213.000		213.000		213.000
214.000		214.000		214.000		214.000
215.000		215.000		215.000		215.000
216.000		216.000		216.000		216.000
217.000		217.000		217.000		217.000
218.000		218.000		218.000		218.000
219.000		219.000		219.000		219.000
220.000		220.000		220.000		220.000
221.000		221.000		221.000		221.000
222.000		222.000		222.000		222.000
223.000		223.000		223.000		223.000
224.000		224.000		224.000		224.000
225.000		225.000		225.000		225.000
226.000		226.000		226.000		226.000
227.000		227.000		227.000		227.000
228.000		228.000		227.000		227.000 ****
229.000		229.000		229.000		229.000
230.000		230.000		230.000		230.000
231.000		231.000		231.000		231.000
232.000		232.000		232.000		232.000
233.000		233.000		233.000		233.000
234.000		234.000		234.000		234.000
235.000		235.000		235.000		235.000
236.000		236.000		236.000		236.000
237.000		237.000		237.000		237.000
238.000		238.000		238.000		238.000
239.000		239.000		239.000		239.000
240.000		240.000		240.000		240.000
241.000		241.000		241.000		241.000
242.000		242.000		242.000		242.000
243.000		243.000		243.000		243.000
244.000		244.000		243.000		243.000 ****
245.000		245.000		245.000		245.000
246.000		246.000		246.000		246.000
247.000		247.000		247.000		247.000
248.000		248.000		248.000		248.000
249.000		249.000		249.000		249.000
250.000		250.000		250.000		250.000
251.000		251.000		251.000		251.000
252.000		252.000		252.000		252.000
253.000		253.000		253.000		253.000
254.000		254.000		254.000		254.000
255.000		255.000		255.000		255.000"><pre class="notranslate"><code class="notranslate">test_array	cm.gray()	png_pil_load	png_imread_load
----------	---------	------------	---------------
0.000		0.000		0.000		0.000
1.000		1.000		1.000		1.000
2.000		2.000		2.000		2.000
3.000		3.000		3.000		3.000
4.000		4.000		4.000		4.000
5.000		5.000		5.000		5.000
6.000		6.000		6.000		6.000
7.000		7.000		7.000		7.000
8.000		8.000		8.000		8.000
9.000		9.000		9.000		9.000
10.000		10.000		10.000		10.000
11.000		11.000		11.000		11.000
12.000		12.000		12.000		12.000
13.000		13.000		13.000		13.000
14.000		14.000		14.000		14.000
15.000		15.000		15.000		15.000
16.000		16.000		16.000		16.000
17.000		17.000		17.000		17.000
18.000		18.000		18.000		18.000
19.000		19.000		19.000		19.000
20.000		20.000		20.000		20.000
21.000		21.000		21.000		21.000
22.000		22.000		22.000		22.000
23.000		23.000		23.000		23.000
24.000		24.000		24.000		24.000
25.000		25.000		25.000		25.000
26.000		26.000		26.000		26.000
27.000		27.000		27.000		27.000
28.000		28.000		28.000		28.000
29.000		29.000		29.000		29.000
30.000		30.000		30.000		30.000
31.000		31.000		31.000		31.000
32.000		32.000		32.000		32.000
33.000		33.000		32.000		32.000 ****
34.000		34.000		34.000		34.000
35.000		35.000		35.000		35.000
36.000		36.000		36.000		36.000
37.000		37.000		36.000		36.000 ****
38.000		38.000		38.000		38.000
39.000		39.000		39.000		39.000
40.000		40.000		40.000		40.000
41.000		41.000		40.000		40.000 ****
42.000		42.000		42.000		42.000
43.000		43.000		43.000		43.000
44.000		44.000		44.000		44.000
45.000		45.000		44.000		44.000 ****
46.000		46.000		46.000		46.000
47.000		47.000		47.000		47.000
48.000		48.000		48.000		48.000
49.000		49.000		48.000		48.000 ****
50.000		50.000		50.000		50.000
51.000		51.000		51.000		51.000
52.000		52.000		52.000		52.000
53.000		53.000		52.000		52.000 ****
54.000		54.000		54.000		54.000
55.000		55.000		55.000		55.000
56.000		56.000		56.000		56.000
57.000		57.000		56.000		56.000 ****
58.000		58.000		58.000		58.000
59.000		59.000		59.000		59.000
60.000		60.000		60.000		60.000
61.000		61.000		60.000		60.000 ****
62.000		62.000		62.000		62.000
63.000		63.000		63.000		63.000
64.000		64.000		64.000		64.000
65.000		65.000		65.000		65.000
66.000		66.000		65.000		65.000 ****
67.000		67.000		67.000		67.000
68.000		68.000		68.000		68.000
69.000		69.000		69.000		69.000
70.000		70.000		70.000		70.000
71.000		71.000		71.000		71.000
72.000		72.000		72.000		72.000
73.000		73.000		73.000		73.000
74.000		74.000		73.000		73.000 ****
75.000		75.000		75.000		75.000
76.000		76.000		76.000		76.000
77.000		77.000		77.000		77.000
78.000		78.000		78.000		78.000
79.000		79.000		79.000		79.000
80.000		80.000		80.000		80.000
81.000		81.000		81.000		81.000
82.000		82.000		81.000		81.000 ****
83.000		83.000		83.000		83.000
84.000		84.000		84.000		84.000
85.000		85.000		85.000		85.000
86.000		86.000		86.000		86.000
87.000		87.000		87.000		87.000
88.000		88.000		88.000		88.000
89.000		89.000		89.000		89.000
90.000		90.000		89.000		89.000 ****
91.000		91.000		91.000		91.000
92.000		92.000		92.000		92.000
93.000		93.000		93.000		93.000
94.000		94.000		94.000		94.000
95.000		95.000		95.000		95.000
96.000		96.000		96.000		96.000
97.000		97.000		97.000		97.000
98.000		98.000		97.000		97.000 ****
99.000		99.000		99.000		99.000
100.000		100.000		100.000		100.000
101.000		101.000		101.000		101.000
102.000		102.000		102.000		102.000
103.000		103.000		103.000		103.000
104.000		104.000		104.000		104.000
105.000		105.000		105.000		105.000
106.000		106.000		105.000		105.000 ****
107.000		107.000		107.000		107.000
108.000		108.000		108.000		108.000
109.000		109.000		109.000		109.000
110.000		110.000		110.000		110.000
111.000		111.000		111.000		111.000
112.000		112.000		112.000		112.000
113.000		113.000		113.000		113.000
114.000		114.000		113.000		113.000 ****
115.000		115.000		115.000		115.000
116.000		116.000		116.000		116.000
117.000		117.000		117.000		117.000
118.000		118.000		118.000		118.000
119.000		119.000		119.000		119.000
120.000		120.000		120.000		120.000
121.000		121.000		121.000		121.000
122.000		122.000		121.000		121.000 ****
123.000		123.000		123.000		123.000
124.000		124.000		124.000		124.000
125.000		125.000		125.000		125.000
126.000		126.000		126.000		126.000
127.000		127.000		127.000		127.000
128.000		128.000		128.000		128.000
129.000		129.000		129.000		129.000
130.000		130.000		130.000		130.000
131.000		131.000		131.000		131.000
132.000		132.000		131.000		131.000 ****
133.000		133.000		133.000		133.000
134.000		134.000		134.000		134.000
135.000		135.000		135.000		135.000
136.000		136.000		136.000		136.000
137.000		137.000		137.000		137.000
138.000		138.000		138.000		138.000
139.000		139.000		139.000		139.000
140.000		140.000		140.000		140.000
141.000		141.000		141.000		141.000
142.000		142.000		142.000		142.000
143.000		143.000		143.000		143.000
144.000		144.000		144.000		144.000
145.000		145.000		145.000		145.000
146.000		146.000		146.000		146.000
147.000		147.000		147.000		147.000
148.000		148.000		147.000		147.000 ****
149.000		149.000		149.000		149.000
150.000		150.000		150.000		150.000
151.000		151.000		151.000		151.000
152.000		152.000		152.000		152.000
153.000		153.000		153.000		153.000
154.000		154.000		154.000		154.000
155.000		155.000		155.000		155.000
156.000		156.000		156.000		156.000
157.000		157.000		157.000		157.000
158.000		158.000		158.000		158.000
159.000		159.000		159.000		159.000
160.000		160.000		160.000		160.000
161.000		161.000		161.000		161.000
162.000		162.000		162.000		162.000
163.000		163.000		163.000		163.000
164.000		164.000		163.000		163.000 ****
165.000		165.000		165.000		165.000
166.000		166.000		166.000		166.000
167.000		167.000		167.000		167.000
168.000		168.000		168.000		168.000
169.000		169.000		169.000		169.000
170.000		170.000		170.000		170.000
171.000		171.000		171.000		171.000
172.000		172.000		172.000		172.000
173.000		173.000		173.000		173.000
174.000		174.000		174.000		174.000
175.000		175.000		175.000		175.000
176.000		176.000		176.000		176.000
177.000		177.000		177.000		177.000
178.000		178.000		178.000		178.000
179.000		179.000		179.000		179.000
180.000		180.000		179.000		179.000 ****
181.000		181.000		181.000		181.000
182.000		182.000		182.000		182.000
183.000		183.000		183.000		183.000
184.000		184.000		184.000		184.000
185.000		185.000		185.000		185.000
186.000		186.000		186.000		186.000
187.000		187.000		187.000		187.000
188.000		188.000		188.000		188.000
189.000		189.000		189.000		189.000
190.000		190.000		190.000		190.000
191.000		191.000		191.000		191.000
192.000		192.000		192.000		192.000
193.000		193.000		193.000		193.000
194.000		194.000		194.000		194.000
195.000		195.000		195.000		195.000
196.000		196.000		195.000		195.000 ****
197.000		197.000		197.000		197.000
198.000		198.000		198.000		198.000
199.000		199.000		199.000		199.000
200.000		200.000		200.000		200.000
201.000		201.000		201.000		201.000
202.000		202.000		202.000		202.000
203.000		203.000		203.000		203.000
204.000		204.000		204.000		204.000
205.000		205.000		205.000		205.000
206.000		206.000		206.000		206.000
207.000		207.000		207.000		207.000
208.000		208.000		208.000		208.000
209.000		209.000		209.000		209.000
210.000		210.000		210.000		210.000
211.000		211.000		211.000		211.000
212.000		212.000		211.000		211.000 ****
213.000		213.000		213.000		213.000
214.000		214.000		214.000		214.000
215.000		215.000		215.000		215.000
216.000		216.000		216.000		216.000
217.000		217.000		217.000		217.000
218.000		218.000		218.000		218.000
219.000		219.000		219.000		219.000
220.000		220.000		220.000		220.000
221.000		221.000		221.000		221.000
222.000		222.000		222.000		222.000
223.000		223.000		223.000		223.000
224.000		224.000		224.000		224.000
225.000		225.000		225.000		225.000
226.000		226.000		226.000		226.000
227.000		227.000		227.000		227.000
228.000		228.000		227.000		227.000 ****
229.000		229.000		229.000		229.000
230.000		230.000		230.000		230.000
231.000		231.000		231.000		231.000
232.000		232.000		232.000		232.000
233.000		233.000		233.000		233.000
234.000		234.000		234.000		234.000
235.000		235.000		235.000		235.000
236.000		236.000		236.000		236.000
237.000		237.000		237.000		237.000
238.000		238.000		238.000		238.000
239.000		239.000		239.000		239.000
240.000		240.000		240.000		240.000
241.000		241.000		241.000		241.000
242.000		242.000		242.000		242.000
243.000		243.000		243.000		243.000
244.000		244.000		243.000		243.000 ****
245.000		245.000		245.000		245.000
246.000		246.000		246.000		246.000
247.000		247.000		247.000		247.000
248.000		248.000		248.000		248.000
249.000		249.000		249.000		249.000
250.000		250.000		250.000		250.000
251.000		251.000		251.000		251.000
252.000		252.000		252.000		252.000
253.000		253.000		253.000		253.000
254.000		254.000		254.000		254.000
255.000		255.000		255.000		255.000

test_array	cm.gray()	tiff_pil_load	tiff_imread_load
----------	---------	-------------	----------------
0.000		0.000		0.000		0.000
1.000		1.000		1.000		1.000
2.000		2.000		2.000		2.000
3.000		3.000		3.000		3.000
4.000		4.000		4.000		4.000
5.000		5.000		5.000		5.000
6.000		6.000		6.000		6.000
7.000		7.000		7.000		7.000
8.000		8.000		8.000		8.000
9.000		9.000		9.000		9.000
10.000		10.000		10.000		10.000
11.000		11.000		11.000		11.000
12.000		12.000		12.000		12.000
13.000		13.000		13.000		13.000
14.000		14.000		14.000		14.000
15.000		15.000		15.000		15.000
16.000		16.000		16.000		16.000
17.000		17.000		17.000		17.000
18.000		18.000		18.000		18.000
19.000		19.000		19.000		19.000
20.000		20.000		20.000		20.000
21.000		21.000		21.000		21.000
22.000		22.000		22.000		22.000
23.000		23.000		23.000		23.000
24.000		24.000		24.000		24.000
25.000		25.000		25.000		25.000
26.000		26.000		26.000		26.000
27.000		27.000		27.000		27.000
28.000		28.000		28.000		28.000
29.000		29.000		29.000		29.000
30.000		30.000		30.000		30.000
31.000		31.000		31.000		31.000
32.000		32.000		32.000		32.000
33.000		33.000		32.000		32.000 ****
34.000		34.000		34.000		34.000
35.000		35.000		35.000		35.000
36.000		36.000		36.000		36.000
37.000		37.000		36.000		36.000 ****
38.000		38.000		38.000		38.000
39.000		39.000		39.000		39.000
40.000		40.000		40.000		40.000
41.000		41.000		40.000		40.000 ****
42.000		42.000		42.000		42.000
43.000		43.000		43.000		43.000
44.000		44.000		44.000		44.000
45.000		45.000		44.000		44.000 ****
46.000		46.000		46.000		46.000
47.000		47.000		47.000		47.000
48.000		48.000		48.000		48.000
49.000		49.000		48.000		48.000 ****
50.000		50.000		50.000		50.000
51.000		51.000		51.000		51.000
52.000		52.000		52.000		52.000
53.000		53.000		52.000		52.000 ****
54.000		54.000		54.000		54.000
55.000		55.000		55.000		55.000
56.000		56.000		56.000		56.000
57.000		57.000		56.000		56.000 ****
58.000		58.000		58.000		58.000
59.000		59.000		59.000		59.000
60.000		60.000		60.000		60.000
61.000		61.000		60.000		60.000 ****
62.000		62.000		62.000		62.000
63.000		63.000		63.000		63.000
64.000		64.000		64.000		64.000
65.000		65.000		65.000		65.000
66.000		66.000		65.000		65.000 ****
67.000		67.000		67.000		67.000
68.000		68.000		68.000		68.000
69.000		69.000		69.000		69.000
70.000		70.000		70.000		70.000
71.000		71.000		71.000		71.000
72.000		72.000		72.000		72.000
73.000		73.000		73.000		73.000
74.000		74.000		73.000		73.000 ****
75.000		75.000		75.000		75.000
76.000		76.000		76.000		76.000
77.000		77.000		77.000		77.000
78.000		78.000		78.000		78.000
79.000		79.000		79.000		79.000
80.000		80.000		80.000		80.000
81.000		81.000		81.000		81.000
82.000		82.000		81.000		81.000 ****
83.000		83.000		83.000		83.000
84.000		84.000		84.000		84.000
85.000		85.000		85.000		85.000
86.000		86.000		86.000		86.000
87.000		87.000		87.000		87.000
88.000		88.000		88.000		88.000
89.000		89.000		89.000		89.000
90.000		90.000		89.000		89.000 ****
91.000		91.000		91.000		91.000
92.000		92.000		92.000		92.000
93.000		93.000		93.000		93.000
94.000		94.000		94.000		94.000
95.000		95.000		95.000		95.000
96.000		96.000		96.000		96.000
97.000		97.000		97.000		97.000
98.000		98.000		97.000		97.000 ****
99.000		99.000		99.000		99.000
100.000		100.000		100.000		100.000
101.000		101.000		101.000		101.000
102.000		102.000		102.000		102.000
103.000		103.000		103.000		103.000
104.000		104.000		104.000		104.000
105.000		105.000		105.000		105.000
106.000		106.000		105.000		105.000 ****
107.000		107.000		107.000		107.000
108.000		108.000		108.000		108.000
109.000		109.000		109.000		109.000
110.000		110.000		110.000		110.000
111.000		111.000		111.000		111.000
112.000		112.000		112.000		112.000
113.000		113.000		113.000		113.000
114.000		114.000		113.000		113.000 ****
115.000		115.000		115.000		115.000
116.000		116.000		116.000		116.000
117.000		117.000		117.000		117.000
118.000		118.000		118.000		118.000
119.000		119.000		119.000		119.000
120.000		120.000		120.000		120.000
121.000		121.000		121.000		121.000
122.000		122.000		121.000		121.000 ****
123.000		123.000		123.000		123.000
124.000		124.000		124.000		124.000
125.000		125.000		125.000		125.000
126.000		126.000		126.000		126.000
127.000		127.000		127.000		127.000
128.000		128.000		128.000		128.000
129.000		129.000		129.000		129.000
130.000		130.000		130.000		130.000
131.000		131.000		131.000		131.000
132.000		132.000		131.000		131.000 ****
133.000		133.000		133.000		133.000
134.000		134.000		134.000		134.000
135.000		135.000		135.000		135.000
136.000		136.000		136.000		136.000
137.000		137.000		137.000		137.000
138.000		138.000		138.000		138.000
139.000		139.000		139.000		139.000
140.000		140.000		140.000		140.000
141.000		141.000		141.000		141.000
142.000		142.000		142.000		142.000
143.000		143.000		143.000		143.000
144.000		144.000		144.000		144.000
145.000		145.000		145.000		145.000
146.000		146.000		146.000		146.000
147.000		147.000		147.000		147.000
148.000		148.000		147.000		147.000 ****
149.000		149.000		149.000		149.000
150.000		150.000		150.000		150.000
151.000		151.000		151.000		151.000
152.000		152.000		152.000		152.000
153.000		153.000		153.000		153.000
154.000		154.000		154.000		154.000
155.000		155.000		155.000		155.000
156.000		156.000		156.000		156.000
157.000		157.000		157.000		157.000
158.000		158.000		158.000		158.000
159.000		159.000		159.000		159.000
160.000		160.000		160.000		160.000
161.000		161.000		161.000		161.000
162.000		162.000		162.000		162.000
163.000		163.000		163.000		163.000
164.000		164.000		163.000		163.000 ****
165.000		165.000		165.000		165.000
166.000		166.000		166.000		166.000
167.000		167.000		167.000		167.000
168.000		168.000		168.000		168.000
169.000		169.000		169.000		169.000
170.000		170.000		170.000		170.000
171.000		171.000		171.000		171.000
172.000		172.000		172.000		172.000
173.000		173.000		173.000		173.000
174.000		174.000		174.000		174.000
175.000		175.000		175.000		175.000
176.000		176.000		176.000		176.000
177.000		177.000		177.000		177.000
178.000		178.000		178.000		178.000
179.000		179.000		179.000		179.000
180.000		180.000		179.000		179.000 ****
181.000		181.000		181.000		181.000
182.000		182.000		182.000		182.000
183.000		183.000		183.000		183.000
184.000		184.000		184.000		184.000
185.000		185.000		185.000		185.000
186.000		186.000		186.000		186.000
187.000		187.000		187.000		187.000
188.000		188.000		188.000		188.000
189.000		189.000		189.000		189.000
190.000		190.000		190.000		190.000
191.000		191.000		191.000		191.000
192.000		192.000		192.000		192.000
193.000		193.000		193.000		193.000
194.000		194.000		194.000		194.000
195.000		195.000		195.000		195.000
196.000		196.000		195.000		195.000 ****
197.000		197.000		197.000		197.000
198.000		198.000		198.000		198.000
199.000		199.000		199.000		199.000
200.000		200.000		200.000		200.000
201.000		201.000		201.000		201.000
202.000		202.000		202.000		202.000
203.000		203.000		203.000		203.000
204.000		204.000		204.000		204.000
205.000		205.000		205.000		205.000
206.000		206.000		206.000		206.000
207.000		207.000		207.000		207.000
208.000		208.000		208.000		208.000
209.000		209.000		209.000		209.000
210.000		210.000		210.000		210.000
211.000		211.000		211.000		211.000
212.000		212.000		211.000		211.000 ****
213.000		213.000		213.000		213.000
214.000		214.000		214.000		214.000
215.000		215.000		215.000		215.000
216.000		216.000		216.000		216.000
217.000		217.000		217.000		217.000
218.000		218.000		218.000		218.000
219.000		219.000		219.000		219.000
220.000		220.000		220.000		220.000
221.000		221.000		221.000		221.000
222.000		222.000		222.000		222.000
223.000		223.000		223.000		223.000
224.000		224.000		224.000		224.000
225.000		225.000		225.000		225.000
226.000		226.000		226.000		226.000
227.000		227.000		227.000		227.000
228.000		228.000		227.000		227.000 ****
229.000		229.000		229.000		229.000
230.000		230.000		230.000		230.000
231.000		231.000		231.000		231.000
232.000		232.000		232.000		232.000
233.000		233.000		233.000		233.000
234.000		234.000		234.000		234.000
235.000		235.000		235.000		235.000
236.000		236.000		236.000		236.000
237.000		237.000		237.000		237.000
238.000		238.000		238.000		238.000
239.000		239.000		239.000		239.000
240.000		240.000		240.000		240.000
241.000		241.000		241.000		241.000
242.000		242.000		242.000		242.000
243.000		243.000		243.000		243.000
244.000		244.000		243.000		243.000 ****
245.000		245.000		245.000		245.000
246.000		246.000		246.000		246.000
247.000		247.000		247.000		247.000
248.000		248.000		248.000		248.000
249.000		249.000		249.000		249.000
250.000		250.000		250.000		250.000
251.000		251.000		251.000		251.000
252.000		252.000		252.000		252.000
253.000		253.000		253.000		253.000
254.000		254.000		254.000		254.000
255.000		255.000		255.000		255.000
</code></pre></div>
<p dir="auto"><strong>Expected outcome</strong></p>


<p dir="auto">In the console output, lines with asterisks '****' indicate lines where the image read-back shows image has wrong value.  This happens with both an imsave'd png or tiff output image.  Image read-back is verified by reading back using two different packages (Pillow and maptlotlib) to eliminate the possibility of the image read being the issue.</p>
<p dir="auto">In the code output I'm only comparing the 'R' byte of the RGBA data, because the other bytes appear to be consistent, i.e. R=G=B and A=255.</p>
<p dir="auto">From the console output you can see:</p>
<ul dir="auto">
<li>colormap always outputs the correct values based on the input array and 'gray' colormap</li>
<li>image read back using imread shows some wrong values were saved</li>
<li>image read back using PIL getdata() shows the same wrong values</li>
</ul>
<p dir="auto"><strong>Matplotlib version</strong></p>

<ul dir="auto">
<li>Operating system:
<ul dir="auto">
<li>macOS 10.13.6</li>
<li>Windows 10</li>
</ul>
</li>
<li>Matplotlib version:
<ul dir="auto">
<li>2.2.3 (macOS 10.13.6)</li>
<li>2.2.3 (Windows 10)</li>
</ul>
</li>
<li>Matplotlib backend (<code class="notranslate">print(matplotlib.get_backend())</code>):  and
<ul dir="auto">
<li>'MacOSX' (macOS 10.13.6)</li>
<li>'TkAgg' (Windows 10)</li>
</ul>
</li>
<li>Python version:
<ul dir="auto">
<li>3.7.0 (macOS 10.13.6)</li>
<li>3.6.6 (Windows 10)</li>
</ul>
</li>
<li>Jupyter version (if applicable): N/A</li>
<li>Other libraries:
<ul dir="auto">
<li>Pillow 5.2.0 (macOS 10.13.6)</li>
<li>Pillow 5.2.0 (Windows 10)</li>
</ul>
</li>
</ul>


<ul dir="auto">
<li>matplotlib was installed on macOS using pip3 install into a homebrew python</li>
<li>matplotlib was installed on Win10 using pip3 install --user</li>
</ul>