2013-04-24 2 views
1

У меня есть следующий код, который генерирует график поверхностной плотности. x и y - координаты положения, а ось z - плотность. Все значения предварительно вычисляются и сохраняются в массиве numpy.Отформатируйте галочки по оси x

#set up the grid 
xi, yi = np.linspace(x.min(), x.max(), 200), np.linspace(y.min(), y.max(), 200) 
xi, yi = np.meshgrid(xi, yi) 
#interpolate 
rbf = scipy.interpolate.Rbf(x, y, z, function='linear') 
zi = rbf(xi, yi) 

plt.imshow(zi, vmin=z.min(), vmax=z.max(), origin='lower', extent=[x.min(), x.max(), y.min(), y.max()]) 
plt.scatter(x, y, c=z,marker='o') 
plt.colorbar() 
plt.scatter(xo,yo, c='b', marker='*') 

plt.xlabel("RA(degrees)") 
plt.ylabel("DEC(degrees)") 
plt.title('Surface Density Plot 2.0 < z < 2.2') 
plt.savefig('2.0-2.2.png', dpi= 300) 

plt.show() 

У меня проблемы является XAxis клещи не в пользовательском дружит, они значение между 150-152, но я не могу показаться, чтобы изменить положение клещей с использованием xticks функции(). У кого-нибудь есть предложение, как я могу перейти к форматированию оси x?

edit- Это значения для xyz, используемые для участка. x, y, z - три массива numpy - https://www.dropbox.com/s/l03pkzplqmfm1su/xyz.csv первая строка - это значения x, вторая - y и третья - z.

+0

Использование xticks - правильный метод ручной установки тиков x-оси. Обычно что-то вроде формы «plt.xticks (plt.arange (150,152,0.5))». Аргумент 'xticks' является ключевым здесь, можете ли вы дать код, который вы пытались использовать? – Greg

+0

@ user2145647 спасибо, но проблема у меня есть даже изменение тиков с помощью функции plt.xticks (xticks) с xticks = [150.05,150.10,150.15,150.20,150.25], ось x по-прежнему заканчивается тем, e2 multiples – firefly

+0

@ user2145647 У этой ссылки есть выходное изображение dropbox.com/s/bxji5sa84i1bsyz/2.0-2.2.png – firefly

ответ

1

При использовании интерфейса pyplot, вы можете установить xticks через (если вы импортировали matplotlib.pyplot в PLT)

plt.xticks(*args, **kwargs) 

Вы можете дать клещи-места например. как список или массив numpy и метки-метки в виде набора (или списка, ...).

Однако, пожалуйста, укажите минимальный пример кода, который мы можем запустить, поэтому мы можем проверить, работает ли он, и посмотреть, почему нет, если это так. Кроме того, вы, похоже, импортировали matplotlib как plt, но некоторые из ваших команд (например, xlabel) не имеют части plt.. Это просто опечатка или ошибка копирования/вставки?

Если вам нужна более тонкая настройка для ваших тиков и тикового формата, вам следует рассмотреть возможность использования интерфейса OO matplotlib. Да, это более многословно, и вам нужно набрать еще несколько писем, но, на мой взгляд, код становится намного понятнее, и у вас есть больше возможностей адаптировать график к вашим ожиданиям.

Редактировать: Как я понимаю из ваших комментариев, вас не устраивает формат ярлыков xtick. Поэтому вместо «0.0» «+ 1.5e2» вы, вероятно, захотите иметь «150.0» или около того. Функция смотреть в (используя интерфейс pyplot) является:

plt.ticklabel_format(**kwargs) 

В kwargs показаны здесь here. Вы должны попробовать, если style='plain' соответствует вашим требованиям.

Снова хочу подчеркнуть, что интерфейс OO предоставляет вам гораздо большую гибкость, чтобы изменить формат ярлыков меток. Соответствующие функции будут следующими:

matplotlib.axes.yaxis.set_major_formatter() 
matplotlib.axes.xaxis.set_major_formatter() 

Вы можете выбрать один из нескольких форматов или даже написать свою собственную функцию форматирования. Если вы хотите это сделать, я могу дать вам дальнейшие советы.

+0

Спасибо за предложение. Я сделал это, и, как я упоминал в user2145647, количество тиков и их позиции меняются соответственно, но они все еще находятся в тех же единицах 1.5e2, а не 150.1 и т. Д. – firefly

+0

У этой ссылки есть выходное изображение. Я получаю https: // www .dropbox.com/s/bxji5sa84i1bsyz/2.0-2.2.png – firefly

+0

@firefly: Я отредактировал свой ответ выше, надеюсь, теперь я понял, что вы имели в виду. – Marius

0

Firefly, основанный на dropbox image, который вы указали в комментариях. Я считаю, что следующее описывает вашу проблему. Величина х данных намного больше, чем изменения, так питон имеет список значений, как

[150.05,150.10,150.15,150.20,150.25] 

, который является слишком большим для Xaxis на этом рисунке, так питон делает какой-то умный бизнес, который вам не нравится (и я согласен).

Одним из исправлений может быть просто установить стрелки вертикальные e.г

py.xticks(rotation='vertical') 

В противном случае вы можете вручную делать то, что питон пытался, вычитают 150 градусов от оси х и изменить xlabel таким образом, что у вас есть

plt.xlabel("RA+150(degrees)") 

Если данные не градусы, я бы вместо предложите перемасштабировать вместо этого (например, разделите на 1e2), но со степенями это выглядит очень странно.

+0

вертикальная функция не то, что я ищу, она дает больше пространства для ясности, но я предпочел бы иметь меньше клещей с линейной шкалой в ней. – firefly

Смежные вопросы