2010-03-31 6 views
14

Таким образом, кажется, никто не может сделать следующее (это вызывает ошибку, так как axes не метод set_linewidth):Установка `axes.linewidth` без изменения` rcParams` глобального Dict

axes_style = {'linewidth':5} 
axes_rect = [0.1, 0.1, 0.9, 0.9] 

axes(axes_rect, **axes_style) 

и должен использовать следующий старый трюк вместо:

rcParams['axes.linewidth'] = 5 # set the value globally 

... # some code 

rcdefaults() # restore [global] defaults 

есть простой/чистый способ (может быть один можно установить x - и y - оси параметров по отдельности, и т.д.)?

P.S. Если нет, то почему?

ответ

8

Да, есть простой и чистый способ сделать это.

Calling «axhline» и «axvline» от экземпляра оси, как представляется, метод одобрен в MPL документации.

В любом случае, это просто и дает тонкий контроль над внешним видом осей.

Так, например, этот код создаст график и окрасит ось оси x в зеленый цвет и увеличит ширину линии по оси x от значения по умолчанию «1» до значения «4»; ось y окрашена в красный цвет, а ширина линии оси y увеличена с «1» до «8».

from matplotlib import pyplot as PLT 
fig = PLT.figure() 
ax1 = fig.add_subplot(111) 

ax1.axhline(linewidth=4, color="g")  # inc. width of x-axis and color it green 
ax1.axvline(linewidth=4, color="r")  # inc. width of y-axis and color it red 

PLT.show() 

Функция axhline/axvline принимает дополнительные аргументы, которые должны позволить вам делать какие-либо почти все, что вы хотите, эстетически, в частности, любой из ~ matplotlib.lines.Line2D свойств являются действительными kwargs (например, «альфа» , 'linestyle', capstyle, joinstyle).

+0

Спасибо большое, я дам ему поближе через пару часов. – mlvljr

+0

Еще раз спасибо. – mlvljr

+1

Пожалуйста! Всегда приятно встречаться со своими коллегами из России. – doug

39

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

import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = fig.add_subplot(111) 

# you can change each line separately, like: 
#ax.spines['right'].set_linewidth(0.5) 
# to change all, just write: 

for axis in ['top','bottom','left','right']: 
    ax.spines[axis].set_linewidth(0.5) 

plt.show() 
# see more about spines at: 
#http://matplotlib.org/api/spines_api.html 
#http://matplotlib.org/examples/pylab_examples/multiple_yaxis_with_spines.html 
+1

Правильный ответ! –