2010-03-31 21 views
14

Vì vậy, có vẻ như người ta không thể làm như sau (nó đặt ra một lỗi, vì axes không có một phương pháp set_linewidth):Thiết 'axes.linewidth` mà không thay đổi' rcParams` dict toàn cầu

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

axes(axes_rect, **axes_style) 

và phải sử dụng các thủ thuật cũ sau thay vì:

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

... # some code 

rcdefaults() # restore [global] defaults 

có một/cách sạch dễ dàng (có thể người ta có thể thiết lập x - và y - trục thông số cá nhân, vv)?

P.S. Nếu không, tại sao?

Trả lời

8

Có, có một cách dễ dàng và gọn gàng để thực hiện việc này.

gọi 'axhline' và 'axvline' từ một thể hiện trục dường như là kỹ thuật xác nhận trong Tài liệu MPL.

Trong mọi trường hợp, nó rất đơn giản và cho phép bạn kiểm soát chi tiết hơn sự xuất hiện của các trục. Ví dụ:

Ví dụ, mã này sẽ tạo một ô và tô màu xanh trục x và tăng chiều rộng đường của trục x từ giá trị mặc định là "1" thành giá trị "4"; trục y có màu đỏ và độ rộng đường của trục y được tăng từ "1" đến "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() 

Chức năng axhline/axvline chấp nhận lập luận bổ sung mà phải để cho phép bạn làm bất cứ khá nhiều bất cứ điều gì bạn muốn thẩm mỹ, đặc biệt là bất kỳ ~ tính matplotlib.lines.Line2D là kwargs hợp lệ (ví dụ, 'alpha' , 'linestyle', capstyle, joinstyle).

+0

Cảm ơn rất nhiều, tôi sẽ cung cấp cho nó một cái nhìn gần gũi hơn trong vài tiếng đồng hồ. – mlvljr

+0

Cảm ơn một lần nữa, được chấp nhận. – mlvljr

+1

Пожалуйста! Luôn luôn tốt đẹp để gặp gỡ các lập trình viên của Nga. – doug

39

Câu trả lời ở trên không có tác dụng, vì nó được giải thích trong phần bình luận. Tôi đề nghị sử dụng gai.

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

Đó là câu trả lời đúng! –

6
plt.setp(ax.spines.values(), linewidth=5) 
Các vấn đề liên quan