2012-02-23 3 views
35

Если я создаю сюжет с Matplotlib, используя следующий код:Совмещение оси у клеща метка и оси х клещ метка в Matplotlib

import numpy as np 
from matplotlib import pyplot as plt 
xx = np.arange(0,5, .5) 
yy = np.random.random(len(xx)) 
plt.plot(xx,yy) 
plt.imshow() 

я получаю результат, который выглядит как прикрепленного изображения. Проблема заключается в том, что самая нижняя ярлык y-tick перекрывает самую левую метку x-tick. Это выглядит непрофессионально. Мне было интересно, существует ли автоматический способ удаления самой нижней метки y-tick, поэтому у меня нет проблемы перекрытия. Чем меньше строк кода, тем лучше. enter image description here

ответ

35

В модуле тикер есть класс называется MaxNLocator, который может занять prune kwarg.
С помощью этого вы можете удалить первый тик:

import matplotlib.pyplot as plt 
from matplotlib.ticker import MaxNLocator 
import numpy as np 
xx = np.arange(0,5, .5) 
yy = np.random.random(len(xx)) 
plt.plot(xx,yy) 
plt.gca().xaxis.set_major_locator(MaxNLocator(prune='lower')) 
plt.show() 

Результат:

enter image description here

2

Ответ получен подробно here. В принципе, можно использовать что-то вроде этого:

plt.xticks([list of tick locations], [list of tick lables]) 
6

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

Обивка может быть изменен с помощью файла matplotlibrc или в участке сценария с помощью команд

import matplotlib as mpl 

mpl.rcParams['xtick.major.pad'] = 8 
mpl.rcParams['ytick.major.pad'] = 8 

В большинстве случаев, заполняющего 6 также достаточно.

16

Вы можете подушечка тики по оси х:

ax.tick_params(axis='x', pad=15) 

Заменить ax с plt.gca(), если вы не сохранили переменную ax для текущего рисунка.

Вы также можете поместить обе оси, удалив параметр axis.

+1

Кажется очень элегантным, но, к сожалению, он не работает на 3D-графиках, таких как 'plot_surface'. – metakermit

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