Создайте график экваториальных координат RA и DEC с питоном

Я пытаюсь создать экваториальный график координат, который должен выглядеть примерно так:

введите описание изображения здесь

(Фигура взята из этой статьи , и она показывает положение Большого и Малого MC в экваториальных координатах)

Важные вещи, чтобы заметить об этом сюжете:

  • theta ось (т. Е. Правое вознесение) находится в h: m: s (часы, минуты, секунды), поскольку она привыкла в астрономии, а не в градусах, как по умолчанию polar опция в matplotlib .
  • Ось r (то есть: склонение) возрастает наружу от -90º, а сетка находится в центре (0h, -90º).
  • Сюжет обрезается , а это означает, что только часть его отображается в противоположность всему кругу (по умолчанию используется matplotlib ).

Используя параметр polar=True в matplotlib , ближайший график, который мне удалось создать, – это (здесь MWE , файл данных, некоторые точки отсутствуют по сравнению с изображением выше, поскольку файл данных немного меньше):

введите описание изображения здесь

Мне также нужно добавить третий график данных в график, поэтому я добавляю colorbar и цвет каждой точки в соответствии с массивом z :

введите описание изображения здесь

Так что мне в основном нужно прямо сейчас, это способ обрезать сюжет. Основанный главным образом на этом вопросе, и этот пример @cphlewis пришел довольно близко к его ответу , но некоторые вещи все еще отсутствуют (упомянутый в его ответе).

Любая помощь и / или указатели с этой проблемой будут высоко оценены.


MWE

(Обратите внимание, что я использую gridspec для размещения подзаголовка, потому что мне нужно сгенерировать несколько из них в том же файле выходного изображения)

 import numpy as np import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec def skip_comments(f): ''' Read lines that DO NOT start with a # symbol. ''' for line in f: if not line.strip().startswith('#'): yield line def get_data_bb(): '''RA, DEC data file. ''' # Path to data file. out_file = 'bb_cat.dat' # Read data file with open(out_file) as f: ra, dec = [], [] for line in skip_comments(f): ra.append(float(line.split()[0])) dec.append(float(line.split()[1])) return ra, dec # Read RA, DEC data from file. ra, dec = get_data_bb() # Convert RA from decimal degrees to radians. ra = [x / 180.0 * 3.141593 for x in ra] # Make plot. fig = plt.figure(figsize=(20, 20)) gs = gridspec.GridSpec(4, 2) # Position plot in figure using gridspec. ax = plt.subplot(gs[0], polar=True) ax.set_ylim(-90, -55) # Set x,y ticks angs = np.array([330., 345., 0., 15., 30., 45., 60., 75., 90., 105., 120.]) plt.xticks(angs * np.pi / 180., fontsize=8) plt.yticks(np.arange(-80, -59, 10), fontsize=8) ax.set_rlabel_position(120) ax.set_xticklabels(['$22^h$', '$23^h$', '$0^h$', '$1^h$', '$2^h$', '$3^h$', '$4^h$', '$5^h$', '$6^h$', '$7^h$', '$8^h$'], fontsize=10) ax.set_yticklabels(['$-80^{\circ}$', '$-70^{\circ}$', '$-60^{\circ}$'], fontsize=10) # Plot points. ax.scatter(ra, dec, marker='o', c='k', s=1, lw=0.) # Use this block to generate colored points with a colorbar. #cm = plt.cm.get_cmap('RdYlBu_r') #z = np.random.random((len(ra), 1)) # RGB values #SC = ax.scatter(ra, dec, marker='o', c=z, s=10, lw=0., cmap=cm) # Colorbar #cbar = plt.colorbar(SC, shrink=1., pad=0.05) #cbar.ax.tick_params(labelsize=8) #cbar.set_label('colorbar', fontsize=8) # Output png file. fig.tight_layout() plt.savefig(ra_dec_plot.png', dpi=300) 

2 Solutions collect form web for “Создайте график экваториальных координат RA и DEC с питоном”

Получение цветовой панели можно сделать с слиянием кода OP с отличным ответом @ cphlewis . Я разместил это как готовое решение по запросу OP в чате . Первая версия кода просто добавляет цветную панель, окончательная версия (под EDIT 2) делает аффинный перевод осей и корректирует несколько параметров / упрощает код, чтобы точно соответствовать спецификации OP.

 """ An experimental support for curvilinear grid. """ import numpy as np import mpl_toolkits.axisartist.angle_helper as angle_helper import matplotlib.cm as cmap from matplotlib.projections import PolarAxes from matplotlib.transforms import Affine2D from mpl_toolkits.axisartist import SubplotHost from mpl_toolkits.axisartist import GridHelperCurveLinear def curvelinear_test2(fig): """ polar projection, but in a rectangular box. """ global ax1 # see demo_curvelinear_grid.py for details tr = Affine2D().scale(np.pi/180., 1.) + PolarAxes.PolarTransform() extreme_finder = angle_helper.ExtremeFinderCycle(10, 60, lon_cycle = 360, lat_cycle = None, lon_minmax = None, lat_minmax = (0, np.inf), ) grid_locator1 = angle_helper.LocatorHMS(12) #changes theta gridline count tick_formatter1 = angle_helper.FormatterHMS() grid_locator2 = angle_helper.LocatorDMS(6) tick_formatter2 = angle_helper.FormatterDMS() grid_helper = GridHelperCurveLinear(tr, extreme_finder=extreme_finder, grid_locator1=grid_locator1, tick_formatter1=tick_formatter1, grid_locator2=grid_locator2, tick_formatter2=tick_formatter2 ) ax1 = SubplotHost(fig, 1, 1, 1, grid_helper=grid_helper) # make ticklabels of right and top axis visible. ax1.axis["right"].major_ticklabels.set_visible(True) ax1.axis["top"].major_ticklabels.set_visible(True) ax1.axis["bottom"].major_ticklabels.set_visible(True) #Turn off? # let right and bottom axis show ticklabels for 1st coordinate (angle) ax1.axis["right"].get_helper().nth_coord_ticks=0 ax1.axis["bottom"].get_helper().nth_coord_ticks=0 fig.add_subplot(ax1) grid_helper = ax1.get_grid_helper() ax1.set_aspect(1.) ax1.set_xlim(-4,15) # moves the origin left-right in ax1 ax1.set_ylim(-3, 20) # moves the origin up-down ax1.set_ylabel('90$^\circ$ + Declination') ax1.set_xlabel('Ascension') ax1.grid(True) #ax1.grid(linestyle='--', which='x') # either keyword applies to both #ax1.grid(linestyle=':', which='y') # sets of gridlines return tr import matplotlib.pyplot as plt fig = plt.figure(1, figsize=(5, 5)) fig.clf() tr = curvelinear_test2(fig) # tr.transform_point((x, 0)) is always (0,0) # => (theta, r) in but (r, theta) out... r_test = [0, 1.2, 2.8, 3.8, 5, 8, 10, 13.3, 17] # distance from origin deg_test = [0, -7, 12, 28, 45, 70, 79, 90, 100] # degrees ascension out_test = tr.transform(zip(deg_test, r_test)) sizes = [40, 30, 10, 30, 80, 33, 12, 48, 45] #hues = [.9, .3, .2, .8, .6, .1, .4, .5,.7] # Oddly, floats-to-colormap worked for a while. hues = np.random.random((9,3)) #RGB values # Use this block to generate colored points with a colorbar. cm = plt.cm.get_cmap('RdYlBu_r') z = np.random.random((len(r_test), 1)) # RGB values SC = ax1.scatter(out_test[:,0], #ax1 is a global out_test[:,1], s=sizes, c=z, cmap=cm, zorder=9) #on top of gridlines # Colorbar cbar = plt.colorbar(SC, shrink=1., pad=0.05) cbar.ax.tick_params(labelsize=8) cbar.set_label('colorbar', fontsize=8) plt.show() . """ An experimental support for curvilinear grid. """ import numpy as np import mpl_toolkits.axisartist.angle_helper as angle_helper import matplotlib.cm as cmap from matplotlib.projections import PolarAxes from matplotlib.transforms import Affine2D from mpl_toolkits.axisartist import SubplotHost from mpl_toolkits.axisartist import GridHelperCurveLinear def curvelinear_test2(fig): """ polar projection, but in a rectangular box. """ global ax1 # see demo_curvelinear_grid.py for details tr = Affine2D().scale(np.pi/180., 1.) + PolarAxes.PolarTransform() extreme_finder = angle_helper.ExtremeFinderCycle(10, 60, lon_cycle = 360, lat_cycle = None, lon_minmax = None, lat_minmax = (0, np.inf), ) grid_locator1 = angle_helper.LocatorHMS(12) #changes theta gridline count tick_formatter1 = angle_helper.FormatterHMS() grid_locator2 = angle_helper.LocatorDMS(6) tick_formatter2 = angle_helper.FormatterDMS() grid_helper = GridHelperCurveLinear(tr, extreme_finder=extreme_finder, grid_locator1=grid_locator1, tick_formatter1=tick_formatter1, grid_locator2=grid_locator2, tick_formatter2=tick_formatter2 ) ax1 = SubplotHost(fig, 1, 1, 1, grid_helper=grid_helper) # make ticklabels of right and top axis visible. ax1.axis["right"].major_ticklabels.set_visible(True) ax1.axis["top"].major_ticklabels.set_visible(True) ax1.axis["bottom"].major_ticklabels.set_visible(True) #Turn off? # let right and bottom axis show ticklabels for 1st coordinate (angle) ax1.axis["right"].get_helper().nth_coord_ticks=0 ax1.axis["bottom"].get_helper().nth_coord_ticks=0 fig.add_subplot(ax1) grid_helper = ax1.get_grid_helper() ax1.set_aspect(1.) ax1.set_xlim(-4,15) # moves the origin left-right in ax1 ax1.set_ylim(-3, 20) # moves the origin up-down ax1.set_ylabel('90$^\circ$ + Declination') ax1.set_xlabel('Ascension') ax1.grid(True) #ax1.grid(linestyle='--', which='x') # either keyword applies to both #ax1.grid(linestyle=':', which='y') # sets of gridlines return tr import matplotlib.pyplot as plt fig = plt.figure(1, figsize=(5, 5)) fig.clf() tr = curvelinear_test2(fig) # tr.transform_point((x, 0)) is always (0,0) # => (theta, r) in but (r, theta) out... r_test = [0, 1.2, 2.8, 3.8, 5, 8, 10, 13.3, 17] # distance from origin deg_test = [0, -7, 12, 28, 45, 70, 79, 90, 100] # degrees ascension out_test = tr.transform(zip(deg_test, r_test)) sizes = [40, 30, 10, 30, 80, 33, 12, 48, 45] #hues = [.9, .3, .2, .8, .6, .1, .4, .5,.7] # Oddly, floats-to-colormap worked for a while. hues = np.random.random((9,3)) #RGB values # Use this block to generate colored points with a colorbar. cm = plt.cm.get_cmap('RdYlBu_r') z = np.random.random((len(r_test), 1)) # RGB values SC = ax1.scatter(out_test[:,0], #ax1 is a global out_test[:,1], s=sizes, c=z, cmap=cm, zorder=9) #on top of gridlines # Colorbar cbar = plt.colorbar(SC, shrink=1., pad=0.05) cbar.ax.tick_params(labelsize=8) cbar.set_label('colorbar', fontsize=8) plt.show() 

РЕДАКТИРОВАТЬ

Бит настроек, добавление данных OP, удаление избыточности дает следующий график. По-прежнему нужно curvelinear_test2() данные на -90 вместо 0 – на данный момент это взломано, но я уверен, что curvelinear_test2() можно изменить для учетной записи …

PIcture соответствует желаемому формату OP

EDIT 2

Следуя комментарию к промежуточной версии в этом ответе, окончательная версия, как показано ниже, дает график в самом конце сообщения – с -90 на оси dec и демонстрацией подзаголовка

 """ An experimental support for curvilinear grid. """ import numpy as np import mpl_toolkits.axisartist.angle_helper as angle_helper import matplotlib.cm as cmap from matplotlib.projections import PolarAxes from matplotlib.transforms import Affine2D from mpl_toolkits.axisartist import SubplotHost from mpl_toolkits.axisartist import GridHelperCurveLinear def curvelinear_test2(fig, rect=111): """ polar projection, but in a rectangular box. """ # see demo_curvelinear_grid.py for details tr = Affine2D().translate(0,90) + Affine2D().scale(np.pi/180., 1.) + PolarAxes.PolarTransform() extreme_finder = angle_helper.ExtremeFinderCycle(10, 60, lon_cycle = 360, lat_cycle = None, lon_minmax = None, lat_minmax = (-90, np.inf), ) grid_locator1 = angle_helper.LocatorHMS(12) #changes theta gridline count tick_formatter1 = angle_helper.FormatterHMS() grid_helper = GridHelperCurveLinear(tr, extreme_finder=extreme_finder, grid_locator1=grid_locator1, tick_formatter1=tick_formatter1 ) ax1 = SubplotHost(fig, rect, grid_helper=grid_helper) # make ticklabels of right and top axis visible. ax1.axis["right"].major_ticklabels.set_visible(True) ax1.axis["top"].major_ticklabels.set_visible(True) ax1.axis["bottom"].major_ticklabels.set_visible(True) #Turn off? # let right and bottom axis show ticklabels for 1st coordinate (angle) ax1.axis["right"].get_helper().nth_coord_ticks=0 ax1.axis["bottom"].get_helper().nth_coord_ticks=0 fig.add_subplot(ax1) grid_helper = ax1.get_grid_helper() # You may or may not need these - they set the view window explicitly rather than using the # default as determined by matplotlib with extreme finder. ax1.set_aspect(1.) ax1.set_xlim(-4,25) # moves the origin left-right in ax1 ax1.set_ylim(-3, 30) # moves the origin up-down ax1.set_ylabel('Declination') ax1.set_xlabel('Ascension') ax1.grid(True) #ax1.grid(linestyle='--', which='x') # either keyword applies to both #ax1.grid(linestyle=':', which='y') # sets of gridlines return ax1,tr def skip_comments(f): ''' Read lines that DO NOT start with a # symbol. ''' for line in f: if not line.strip().startswith('#'): yield line def get_data_bb(): '''RA, DEC data file. ''' # Path to data file. out_file = 'bb_cat.dat' # Read data file with open(out_file) as f: ra, dec = [], [] for line in skip_comments(f): ra.append(float(line.split()[0])) dec.append(float(line.split()[1])) return ra, dec import matplotlib.pyplot as plt fig = plt.figure(1, figsize=(5, 5)) fig.clf() ax1, tr = curvelinear_test2(fig,121) # tr.transform_point((x, 0)) is always (0,0) # => (theta, r) in but (r, theta) out... # Read RA, DEC data from file. ra, dec = get_data_bb() out_test = tr.transform(zip(ra, dec)) # Use this block to generate colored points with a colorbar. cm = plt.cm.get_cmap('RdYlBu_r') z = np.random.random((len(ra), 1)) # RGB values SC = ax1.scatter(out_test[:,0], #ax1 is a global out_test[:,1], marker = 'o', c=z, cmap=cm, lw = 0., zorder=9) #on top of gridlines # Colorbar cbar = plt.colorbar(SC, shrink=1., pad=0.1) cbar.ax.tick_params(labelsize=8) cbar.set_label('colorbar', fontsize=8) ax2, tr = curvelinear_test2(fig,122) # tr.transform_point((x, 0)) is always (0,0) # => (theta, r) in but (r, theta) out... # Read RA, DEC data from file. ra, dec = get_data_bb() out_test = tr.transform(zip(ra, dec)) # Use this block to generate colored points with a colorbar. cm = plt.cm.get_cmap('RdYlBu_r') z = np.random.random((len(ra), 1)) # RGB values SC = ax2.scatter(out_test[:,0], #ax1 is a global out_test[:,1], marker = 'o', c=z, cmap=cm, lw = 0., zorder=9) #on top of gridlines # Colorbar cbar = plt.colorbar(SC, shrink=1., pad=0.1) cbar.ax.tick_params(labelsize=8) cbar.set_label('colorbar', fontsize=8) plt.show() . """ An experimental support for curvilinear grid. """ import numpy as np import mpl_toolkits.axisartist.angle_helper as angle_helper import matplotlib.cm as cmap from matplotlib.projections import PolarAxes from matplotlib.transforms import Affine2D from mpl_toolkits.axisartist import SubplotHost from mpl_toolkits.axisartist import GridHelperCurveLinear def curvelinear_test2(fig, rect=111): """ polar projection, but in a rectangular box. """ # see demo_curvelinear_grid.py for details tr = Affine2D().translate(0,90) + Affine2D().scale(np.pi/180., 1.) + PolarAxes.PolarTransform() extreme_finder = angle_helper.ExtremeFinderCycle(10, 60, lon_cycle = 360, lat_cycle = None, lon_minmax = None, lat_minmax = (-90, np.inf), ) grid_locator1 = angle_helper.LocatorHMS(12) #changes theta gridline count tick_formatter1 = angle_helper.FormatterHMS() grid_helper = GridHelperCurveLinear(tr, extreme_finder=extreme_finder, grid_locator1=grid_locator1, tick_formatter1=tick_formatter1 ) ax1 = SubplotHost(fig, rect, grid_helper=grid_helper) # make ticklabels of right and top axis visible. ax1.axis["right"].major_ticklabels.set_visible(True) ax1.axis["top"].major_ticklabels.set_visible(True) ax1.axis["bottom"].major_ticklabels.set_visible(True) #Turn off? # let right and bottom axis show ticklabels for 1st coordinate (angle) ax1.axis["right"].get_helper().nth_coord_ticks=0 ax1.axis["bottom"].get_helper().nth_coord_ticks=0 fig.add_subplot(ax1) grid_helper = ax1.get_grid_helper() # You may or may not need these - they set the view window explicitly rather than using the # default as determined by matplotlib with extreme finder. ax1.set_aspect(1.) ax1.set_xlim(-4,25) # moves the origin left-right in ax1 ax1.set_ylim(-3, 30) # moves the origin up-down ax1.set_ylabel('Declination') ax1.set_xlabel('Ascension') ax1.grid(True) #ax1.grid(linestyle='--', which='x') # either keyword applies to both #ax1.grid(linestyle=':', which='y') # sets of gridlines return ax1,tr def skip_comments(f): ''' Read lines that DO NOT start with a # symbol. ''' for line in f: if not line.strip().startswith('#'): yield line def get_data_bb(): '''RA, DEC data file. ''' # Path to data file. out_file = 'bb_cat.dat' # Read data file with open(out_file) as f: ra, dec = [], [] for line in skip_comments(f): ra.append(float(line.split()[0])) dec.append(float(line.split()[1])) return ra, dec import matplotlib.pyplot as plt fig = plt.figure(1, figsize=(5, 5)) fig.clf() ax1, tr = curvelinear_test2(fig,121) # tr.transform_point((x, 0)) is always (0,0) # => (theta, r) in but (r, theta) out... # Read RA, DEC data from file. ra, dec = get_data_bb() out_test = tr.transform(zip(ra, dec)) # Use this block to generate colored points with a colorbar. cm = plt.cm.get_cmap('RdYlBu_r') z = np.random.random((len(ra), 1)) # RGB values SC = ax1.scatter(out_test[:,0], #ax1 is a global out_test[:,1], marker = 'o', c=z, cmap=cm, lw = 0., zorder=9) #on top of gridlines # Colorbar cbar = plt.colorbar(SC, shrink=1., pad=0.1) cbar.ax.tick_params(labelsize=8) cbar.set_label('colorbar', fontsize=8) ax2, tr = curvelinear_test2(fig,122) # tr.transform_point((x, 0)) is always (0,0) # => (theta, r) in but (r, theta) out... # Read RA, DEC data from file. ra, dec = get_data_bb() out_test = tr.transform(zip(ra, dec)) # Use this block to generate colored points with a colorbar. cm = plt.cm.get_cmap('RdYlBu_r') z = np.random.random((len(ra), 1)) # RGB values SC = ax2.scatter(out_test[:,0], #ax1 is a global out_test[:,1], marker = 'o', c=z, cmap=cm, lw = 0., zorder=9) #on top of gridlines # Colorbar cbar = plt.colorbar(SC, shrink=1., pad=0.1) cbar.ax.tick_params(labelsize=8) cbar.set_label('colorbar', fontsize=8) plt.show() 

Конечный участок:

Изображение, показывающее правильный подзаговор

Повторение примера AxisArtist на самом деле довольно многообещающее (это объединяет два примера AxisArtist – я не удивлюсь, если AxisArtist был написан с учетом графиков RA):

введите описание изображения здесь

Еще предстоит сделать:

  1. Склонение должно начинаться от -90 в начале до 0
  2. Уметь использовать и добавлять цветную панель
  3. регулировать пределы, если они строятся вне их

эстетическим:

  1. Шрифт Serif в осях осей
  2. Пунктирные линии для восхождения

что-нибудь еще?

 """ An experimental support for curvilinear grid. """ import numpy as np import mpl_toolkits.axisartist.angle_helper as angle_helper import matplotlib.cm as cmap from matplotlib.projections import PolarAxes from matplotlib.transforms import Affine2D from mpl_toolkits.axisartist import SubplotHost from mpl_toolkits.axisartist import GridHelperCurveLinear def curvelinear_test2(fig): """ polar projection, but in a rectangular box. """ global ax1 # see demo_curvelinear_grid.py for details tr = Affine2D().scale(np.pi/180., 1.) + PolarAxes.PolarTransform() extreme_finder = angle_helper.ExtremeFinderCycle(10, 60, lon_cycle = 360, lat_cycle = None, lon_minmax = None, lat_minmax = (0, np.inf), ) grid_locator1 = angle_helper.LocatorHMS(12) #changes theta gridline count tick_formatter1 = angle_helper.FormatterHMS() grid_locator2 = angle_helper.LocatorDMS(6) tick_formatter2 = angle_helper.FormatterDMS() grid_helper = GridHelperCurveLinear(tr, extreme_finder=extreme_finder, grid_locator1=grid_locator1, tick_formatter1=tick_formatter1, grid_locator2=grid_locator2, tick_formatter2=tick_formatter2 ) ax1 = SubplotHost(fig, 1, 1, 1, grid_helper=grid_helper) # make ticklabels of right and top axis visible. ax1.axis["right"].major_ticklabels.set_visible(True) ax1.axis["top"].major_ticklabels.set_visible(True) ax1.axis["bottom"].major_ticklabels.set_visible(True) #Turn off? # let right and bottom axis show ticklabels for 1st coordinate (angle) ax1.axis["right"].get_helper().nth_coord_ticks=0 ax1.axis["bottom"].get_helper().nth_coord_ticks=0 fig.add_subplot(ax1) grid_helper = ax1.get_grid_helper() ax1.set_aspect(1.) ax1.set_xlim(-4,15) # moves the origin left-right in ax1 ax1.set_ylim(-3, 20) # moves the origin up-down ax1.set_ylabel('90$^\circ$ + Declination') ax1.set_xlabel('Ascension') ax1.grid(True) #ax1.grid(linestyle='--', which='x') # either keyword applies to both #ax1.grid(linestyle=':', which='y') # sets of gridlines return tr import matplotlib.pyplot as plt fig = plt.figure(1, figsize=(5, 5)) fig.clf() tr = curvelinear_test2(fig) # tr.transform_point((x, 0)) is always (0,0) # => (theta, r) in but (r, theta) out... r_test = [0, 1.2, 2.8, 3.8, 5, 8, 10, 13.3, 17] # distance from origin deg_test = [0, -7, 12, 28, 45, 70, 79, 90, 100] # degrees ascension out_test = tr.transform(zip(deg_test, r_test)) sizes = [40, 30, 10, 30, 80, 33, 12, 48, 45] #hues = [.9, .3, .2, .8, .6, .1, .4, .5,.7] # Oddly, floats-to-colormap worked for a while. hues = np.random.random((9,3)) #RGB values ax1.scatter(out_test[:,0], #ax1 is a global out_test[:,1], s=sizes, c=hues, #cmap=cmap.RdYlBu_r, zorder=9) #on top of gridlines plt.show() . """ An experimental support for curvilinear grid. """ import numpy as np import mpl_toolkits.axisartist.angle_helper as angle_helper import matplotlib.cm as cmap from matplotlib.projections import PolarAxes from matplotlib.transforms import Affine2D from mpl_toolkits.axisartist import SubplotHost from mpl_toolkits.axisartist import GridHelperCurveLinear def curvelinear_test2(fig): """ polar projection, but in a rectangular box. """ global ax1 # see demo_curvelinear_grid.py for details tr = Affine2D().scale(np.pi/180., 1.) + PolarAxes.PolarTransform() extreme_finder = angle_helper.ExtremeFinderCycle(10, 60, lon_cycle = 360, lat_cycle = None, lon_minmax = None, lat_minmax = (0, np.inf), ) grid_locator1 = angle_helper.LocatorHMS(12) #changes theta gridline count tick_formatter1 = angle_helper.FormatterHMS() grid_locator2 = angle_helper.LocatorDMS(6) tick_formatter2 = angle_helper.FormatterDMS() grid_helper = GridHelperCurveLinear(tr, extreme_finder=extreme_finder, grid_locator1=grid_locator1, tick_formatter1=tick_formatter1, grid_locator2=grid_locator2, tick_formatter2=tick_formatter2 ) ax1 = SubplotHost(fig, 1, 1, 1, grid_helper=grid_helper) # make ticklabels of right and top axis visible. ax1.axis["right"].major_ticklabels.set_visible(True) ax1.axis["top"].major_ticklabels.set_visible(True) ax1.axis["bottom"].major_ticklabels.set_visible(True) #Turn off? # let right and bottom axis show ticklabels for 1st coordinate (angle) ax1.axis["right"].get_helper().nth_coord_ticks=0 ax1.axis["bottom"].get_helper().nth_coord_ticks=0 fig.add_subplot(ax1) grid_helper = ax1.get_grid_helper() ax1.set_aspect(1.) ax1.set_xlim(-4,15) # moves the origin left-right in ax1 ax1.set_ylim(-3, 20) # moves the origin up-down ax1.set_ylabel('90$^\circ$ + Declination') ax1.set_xlabel('Ascension') ax1.grid(True) #ax1.grid(linestyle='--', which='x') # either keyword applies to both #ax1.grid(linestyle=':', which='y') # sets of gridlines return tr import matplotlib.pyplot as plt fig = plt.figure(1, figsize=(5, 5)) fig.clf() tr = curvelinear_test2(fig) # tr.transform_point((x, 0)) is always (0,0) # => (theta, r) in but (r, theta) out... r_test = [0, 1.2, 2.8, 3.8, 5, 8, 10, 13.3, 17] # distance from origin deg_test = [0, -7, 12, 28, 45, 70, 79, 90, 100] # degrees ascension out_test = tr.transform(zip(deg_test, r_test)) sizes = [40, 30, 10, 30, 80, 33, 12, 48, 45] #hues = [.9, .3, .2, .8, .6, .1, .4, .5,.7] # Oddly, floats-to-colormap worked for a while. hues = np.random.random((9,3)) #RGB values ax1.scatter(out_test[:,0], #ax1 is a global out_test[:,1], s=sizes, c=hues, #cmap=cmap.RdYlBu_r, zorder=9) #on top of gridlines plt.show() 
  • Неверное значение в matplotlib yticks
  • Colorbar для команды matplotlib plot_surface
  • Несколько y-шкал, но только один для панорамирования и масштабирования
  • Как сбросить «историю» NavigatonToolbar при повторной печати данных на одной оси?
  • Генерирование гистограмм в стеке для одних и тех же строк в двух разных кадрах данных с использованием matplotlib в python
  • Раздражающее пробел в гистограмме (matplotlib, Python)
  • Сохранение анимации рассеянного экрана с помощью matplotlib создает пустой видеофайл
  • Построение графика по времени (Python)
  • Matplotlib.pyplot: сохранить графики в pdf
  • Pyplot массива с оператором <или>
  • kmeans plot plot: график различных цветов для каждого кластера
  • Python - лучший язык программирования в мире.