В matplotlib, как вы рисуете отметки осей в стиле R, которые указывают наружу от осей? - PullRequest
20 голосов
/ 07 июня 2011

Поскольку они нарисованы внутри области графика, отметки оси скрыты данными на многих графиках matplotlib. Лучшим подходом является рисование тиков, простирающихся от осей наружу , как это используется по умолчанию в ggplot, системе построения графика R.

Теоретически это можно сделать путем перерисовки линий тиков с помощью линий TICKDOWN и TICKLEFT для тиков по осям X и Y соответственно:

import matplotlib.pyplot as plt
import matplotlib.ticker as mplticker
import matplotlib.lines as mpllines

# Create everything, plot some data stored in `x` and `y`
fig = plt.figure()
ax = fig.gca()
plt.plot(x, y)

# Set position and labels of major and minor ticks on the y-axis
# Ignore the details: the point is that there are both major and minor ticks
ax.yaxis.set_major_locator(mplticker.MultipleLocator(1.0))
ax.yaxis.set_minor_locator(mplticker.MultipleLocator(0.5))

ax.xaxis.set_major_locator(mplticker.MultipleLocator(1.0))
ax.xaxis.set_minor_locator(mplticker.MultipleLocator(0.5))

# Try to set the tick markers to extend outward from the axes, R-style
for line in ax.get_xticklines():
    line.set_marker(mpllines.TICKDOWN)

for line in ax.get_yticklines():
    line.set_marker(mpllines.TICKLEFT)

# In real life, we would now move the tick labels farther from the axes so our
# outward-facing ticks don't cover them up

plt.show()

Но на практике это только половина решения, потому что методы get_xticklines и get_yticklines возвращают только основные тиковые линии. Незначительные тики остаются направленными внутрь.

Какой обходной путь для мелких тиков?

Ответы [ 2 ]

29 голосов
/ 26 марта 2012

В вашем конфигурационном файле matplotlib, matplotlibrc, вы можете установить:

xtick.direction      : out     # direction: in or out
ytick.direction      : out     # direction: in or out

, и это будет рисовать как основные, так и второстепенные галочки наружу по умолчанию, например R. Для одногопрограмма, просто сделайте:

>> from matplotlib import rcParams
>> rcParams['xtick.direction'] = 'out'
>> rcParams['ytick.direction'] = 'out'
4 голосов
/ 07 июня 2011

Вы можете получить несовершеннолетних по крайней мере двумя способами:

>>> ax.xaxis.get_ticklines() # the majors
<a list of 20 Line2D ticklines objects>
>>> ax.xaxis.get_ticklines(minor=True) # the minors
<a list of 38 Line2D ticklines objects>
>>> ax.xaxis.get_minorticklines()
<a list of 38 Line2D ticklines objects>

Обратите внимание, что 38 объясняется тем, что второстепенные линии тиков также были нарисованы в "основных" местах вызовом MultipleLocator.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...