2016-07-26 24 views
2

Ich mache etwas Plotten mit Cartopy und Matplotlib, und ich habe vor kurzem die PlateCarree Transformation verwendet, aber ich wechselte zu Mercator, weil Louisiana ein bisschen zu vermasselt war für meinen Geschmack. Vor dem Schalter hatte ich ein Logo in der linken unteren Ecke angezeigt, diese beiden Zeilen Code mit logo = matplotlib.image.imread('/Users/ian/Desktop/M.png') plt.imshow(logo, extent =(lon-offset -1 + .25, lon - offset + .75, lat - offset + .25, lat - offset + 1 + .75), zorder=35) Image Skewing beim Anwenden von Cartopy-Transformationen

Wo das Ausmaß der Achse festgelegt wurde unter Verwendung dieser Punkte

ax.set_extent([lon-offset-1, lon+offset+1, lat-offset, lat+offset]) 

das ist, was die Handlung sah aus wie mit PlateCarree: enter image description here

Nach dem Umstieg auf Mercator, habe ich alles gut funktionieren außer das Logo. Ich habe die Transformation Stichwort Argument für die Bildausgabe Zeile hinzugefügt, so jetzt heißt es:

plt.imshow(logo, extent =(lon-offset -1 +.25, lon - offset + .75, lat - offset + .25, lat - offset + 1 + .75), zorder=35, transform=ccrs.PlateCarree()) 

aber jetzt ist das das Logo hat ihre Knusprigkeit verloren und verzerrt werden mit der Transformation und die meisten geheimnisvoll, es schaltet Ecken hat in die obere linke Ecke des Grundstücks. Es sieht jetzt so aus: enter image description here

Weiß jemand, wie ich die Projektion meiner Handlung ändern kann, ohne dieses Bild zu verdrehen? Was ich wirklich tun muss, ist sicherzustellen, dass die Ecke des Bildes in der Ecke des Diagramms im transformierten Koordinatensystem liegt, aber den Rest der Bildplatzierung unabhängig vom Koordinatensystem lässt. Ich überlegte mir, ob ich das Bild vielleicht ganz alleine in seinen eigenen Subplot stellen könnte, und dann versuchte ich, diesen Subplot direkt auf den Hauptplot zu legen. Scheint aber eine ziemlich schlechte Lösung. Vielen Dank!

Antwort

3

Sie können bessere Ergebnisse erzielen, wenn Sie das Bildlogo in Achsenkoordinaten anstelle von Datenkoordinaten plotten. Dazu können Sie die Transformation ax.transAxes verwenden und die Ausdehnung in Achsenkoordinaten angeben ([0, 0] unten links, [1, 1] oben rechts).