Проблема затенения в Matplotlib при использовании проекций

Я делаю карту неба и хочу заштриховать ее часть в соответствии с определенным склонением (широтой). Я пробовал много разных проекций, таких как Моллвейд, Ламберт и Айтофф. Я также попробовал и fill_between и add_patch. Затенение никогда не закрасит южный полюс под углом около -77,5 градусов.

Проблема возникает в Python 2.7. Ниже то, что я имею до сих пор:

import numpy as np
import matplotlib.pyplot as plt
from astropy.io import ascii
from astropy import units as u
from astropy.coordinates import SkyCoord
from matplotlib.patches import Circle,Polygon

#Plotting: 2D projection of sky.
fig=plt.figure(figsize=(19,12))
ax = fig.add_subplot(111, projection="aitoff")
ax.grid(True)
ax.set_ylabel(r'latitude b ($\degree$)')
ax.set_xlabel (r'longitude l ($\degree$)')

ra_min = -180.
ra_max = 180.
dec_min = -20.
dec_max = 90
ra_range = np.linspace(ra_min, ra_max, 1000)
dec_range=np.linspace(dec_min, dec_max, 1000)
coordsG=SkyCoord(ra_range, dec_min, frame='icrs', unit='deg').galactic
coordinates = np.deg2rad((coordsG.l.wrap_at(180 * u.deg).degree,coordsG.b.wrap_at(180 * u.deg).degree))


#Patch, use Polygon or Circle.
circle = Polygon(coordinates.transpose())
ax.add_patch(circle)

#Plot contour of shape I want to shade:
plt.plot(coordinates[0], coordinates[1], color='r', marker='.', ls='none')

#Use fill_between
plt.fill_between(coordinates[0],coordinates[1], facecolor='k',alpha=0.8)
plt.savefig('PLOT.png')

Я хочу затенить внутреннюю часть красной капли. Обратите внимание, что южный полюс не заштрихован должным образом, а лишняя часть заштрихована снаружи. Попробуйте проекцию Ламберта, чтобы легче увидеть проблему.

1 ответ

На самом деле я понял это. Fill_between работает, если мы разделим кривую на 2, а затем заштрихуем по отношению к северному полюсу.

Другие вопросы по тегам