matplotlib / matplotlib/basemap

Flawed PDF save when using linewidth=0 in drawparallels() and drawmeridians()

Offen
#493 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
Python
Sterne
817
Forks
395
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

Hi all,

I noticed that when saving a basemap plot to a PDF file, the file is flawed when the code has
drawparallels(..., linewidth=0) or drawmerdians(..., linewidth=0) in it.

A minimal working example:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

figure=plt.figure(figsize=(14,7),dpi=100)
for ii in range(4):
    axii=figure.add_subplot(2,2,ii+1)
    m = Basemap(projection='cyl',
            llcrnrlat=40,urcrnrlat=47,\
            llcrnrlon=-72,urcrnrlon=-67,resolution='l',
            ax=axii, fix_aspect=False)
    m.drawcoastlines()

    lat_ticks=np.arange(41, 47)
    lon_ticks=np.arange(-72, -67)
    m.drawparallels(lat_ticks,labels=[1,0,0,0],linewidth=0)
    m.drawmeridians(lon_ticks,labels=[0,0,0,1],linewidth=0)

figure.savefig('test.pdf')

The PDF won't display correctly in some PDF viewers, for instance Xreader (v.2.4.4) or Adobe reader. But works fine in others, like Okular or Foxit reader. When compiling a LaTeX document using pdflatex, the page containing that figure won't display properly, again it is PDF viewer dependent.

Here is a screenshot of the PDF file opened in Xreader:

Screenshot from 2020-06-07 16-45-02

Here is the same file opened in Okular:

Screenshot from 2020-06-07 16-45-28

The reason for setting linewidth=0 is to remove those grid lines, one relevant questions on Stackoverflow.

One workaround I found is to use zorder=-2 to hide those grid lines while avoiding creating corrupted PDF files.

Note that I've tried a few different matplotlib backends, including Qt5Agg, TkAgg, Agg, and the results are all the same.

Some specs and package versions:
OS: Manjaro Linux
Python = 2.7 or 3.7, in an anaconda env
basemap = 1.2.0
matplotlib = 3.1.3 (for py3) and 1.2.0 (for py2)

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, das minimale Beispiel auszuführen und die an der PDF-Ausgabe beteiligten Einstiegspunkte drawparallels() und drawmeridians() zu untersuchen. Vergleiche die erzeugte PDF in den betroffenen Viewern und bestätige, dass die Verwendung von linewidth=0 nicht mehr zu einer fehlerhaften Darstellung führt, während die Gitterlinien weiterhin ausgeblendet bleiben.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
matplotlib, python
Bereich
data-visualization
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
45/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.