2013-04-08 45 views
7

Tôi đã đánh dấu các nhãn có độ dài thay đổi và tôi muốn căn chỉnh chúng sang trái (tức là có khoảng cách giữa các dấu ngắn hơn và trục y). Có cách nào hợp lý để thực hiện việc này không? Sử dụng căn chỉnh ngang 'trái' căn chỉnh chúng sang trái, nhưng tất cả đều bắt đầu ở trục, vì vậy chúng kết thúc bên trong ô. Vì vậy, một câu hỏi thay thế có thể là - tôi có thể thay đổi điểm xuất phát của họ không?Matplotlib: Căn chỉnh các chữ cái y ở bên trái

Mã cho cuộc biểu tình:

import numpy as np 
import matplotlib.pyplot as plt 

ticks = ["Lorem ipsum dolor sit amet, consectetur adipisicin", "g elit, sed do",  "eiusmod tempor incididunt ut labo", "re et dolore magna ali", "qua. Ut en", "im ad minim veniam, quis nostr", "ud exercitation ullamco labo", "ris nisi ut aliquip ex ea c", "ommodo co", "nsequat. Duis aute irure dolor in rep"] 
data = [5,1,2,4,1,4,5,2,1,5] 
ind = np.arange(len(data)) 
fig = plt.figure() 
ax = plt.subplot(111) 
ax.barh(ind, data, 0.999) 
ax.set_yticks(ind + 0.5) 
r = ax.set_yticklabels(ticks)#, ha = 'left') 
fig.set_size_inches(12, 8) 
fig.savefig(r'C:\try.png', bbox_extra_artists=r, bbox_inches='tight') 
+0

+1 cho mã ví dụ có thể sử dụng! – tacaswell

Trả lời

8

Bạn sẽ chỉ cần thêm một pad. Xem matplotlib ticks position relative to axis

yax = ax.get_yaxis() 
yax.set_tick_params(pad=pad) 

(doc)

Để làm tìm bạn về những gì các pad nên là:

import numpy as np 
import matplotlib.pyplot as plt 

ticks = ["Lorem ipsum dolor sit amet, consectetur adipisicin", "g elit, sed do",      "eiusmod tempor incididunt ut labo", "re et dolore magna ali", "qua. Ut en", "im ad minim veniam, quis nostr", "ud exercitation ullamco labo", "ris nisi ut aliquip ex ea c", "ommodo co", "nsequat. Duis aute irure dolor in rep"] 
data = [5,1,2,4,1,4,5,2,1,5] 
ind = np.arange(len(data)) 
fig = plt.figure(tight_layout=True) # need tight_layout to make everything fit 
ax = plt.subplot(111) 
ax.barh(ind, data, 0.999) 
ax.set_yticks(ind + 0.5) 
r = ax.set_yticklabels(ticks, ha = 'left') 
fig.set_size_inches(12, 8, forward=True) 
# re-size first, the shift needs to be in display units 
plt.draw() # this is needed because get_window_extent needs a renderer to work 
yax = ax.get_yaxis() 
# find the maximum width of the label on the major ticks 
pad = max(T.label.get_window_extent().width for T in yax.majorTicks) 

yax.set_tick_params(pad=pad) 
plt.draw() 

demo of code

+0

Cảm ơn con trỏ. Nhưng nó không phải là "chỉ" :) Để làm việc này tôi cần phải tìm ra cách để có được kích thước ở các điểm của dấu tích lớn nhất ... bất kỳ gợi ý nào về vấn đề đó? – Korem

+0

@TalKremerman Tôi sẽ tranh luận (từ quan điểm của mpl) nó là 'chỉ'. Bạn hỏi làm thế nào để thay đổi điểm khởi đầu của họ, không phải là một cách để sắp xếp ra những gì mà điểm bắt đầu có thể được;) – tacaswell

+0

Ví dụ tuyệt vời. Nó sẽ rất hữu ích cho tôi cho các mục đích khác nữa. Cảm ơn – Korem

Các vấn đề liên quan