Đặt văn bản ở góc trên cùng bên trái của biểu đồ matplotlib


112

Làm cách nào tôi có thể đặt văn bản ở góc trên cùng bên trái (hoặc trên cùng bên phải) của một hình matplotlib, ví dụ như vị trí của chú giải trên cùng bên trái hoặc ở trên cùng của âm mưu nhưng ở góc trên cùng bên trái? Ví dụ: nếu đó là plt.scatter (), thì thứ gì đó sẽ nằm trong hình vuông của tán xạ, hãy đặt ở góc trên cùng bên trái.

Ví dụ, tôi muốn làm điều này mà không cần biết tỷ lệ của biểu đồ phân tán đang được vẽ, vì nó sẽ thay đổi từ tập dữ liệu thành tập dữ liệu. Tôi chỉ muốn nó gần như văn bản ở phía trên bên trái, hoặc gần như ở phía trên bên phải. Với định vị kiểu chú giải, nó không được trùng lặp với bất kỳ điểm nào của biểu đồ phân tán.

cảm ơn!


Nếu bạn muốn đặt văn bản của bạn trong một hộp stackoverflow.com/questions/20842613/...
raphael

1
Tôi sẽ nghĩ rằng đây là một bản sao của câu hỏi này . Câu hỏi trùng lặp thậm chí có nhiều câu trả lời tốt hơn, mặc dù loại câu trả lời được cung cấp ở đây (sử dụng textax.transAxes) không nằm trong số đó.
ImportanceOfBeingErnest

Câu trả lời:


162

Bạn có thể sử dụng text.

text(x, y, s, fontsize=12)

text tọa độ có thể được cung cấp so với trục, do đó, vị trí của văn bản của bạn sẽ độc lập với kích thước của biểu đồ:

Biến đổi mặc định chỉ định rằng văn bản nằm trong các cuộn dữ liệu, ngoài ra, bạn có thể chỉ định văn bản trong các cuộn trục (0,0 là phía dưới bên trái và 1,1 là phía trên bên phải). Ví dụ dưới đây đặt văn bản ở giữa các trục ::

text(0.5, 0.5,'matplotlib',
     horizontalalignment='center',
     verticalalignment='center',
     transform = ax.transAxes)

Để ngăn văn bản can thiệp vào bất kỳ điểm nào trên phân tán của bạn là điều khó khăn hơn. Phương pháp dễ dàng hơn là đặt y_axis (ymax in ylim((ymin,ymax))) thành giá trị cao hơn một chút so với tọa độ y tối đa của các điểm của bạn. Bằng cách này, bạn sẽ luôn có không gian trống cho văn bản.

CHỈNH SỬA: ở đây bạn có một ví dụ:

In [17]: from pylab import figure, text, scatter, show
In [18]: f = figure()
In [19]: ax = f.add_subplot(111)
In [20]: scatter([3,5,2,6,8],[5,3,2,1,5])
Out[20]: <matplotlib.collections.CircleCollection object at 0x0000000007439A90>
In [21]: text(0.1, 0.9,'matplotlib', ha='center', va='center', transform=ax.transAxes)
Out[21]: <matplotlib.text.Text object at 0x0000000007415B38>
In [22]:

nhập mô tả hình ảnh ở đây

Các thông số ha và va thiết lập căn chỉnh của văn bản của bạn so với điểm chèn. I E. ha = 'left' là một thiết lập tốt để ngăn văn bản dài đi ra ngoài trục bên trái khi khung được thu nhỏ (thu hẹp lại) theo cách thủ công.


Tôi lấy được tâm nhưng làm thế nào tôi có thể làm cho nó ở trên cùng? Tôi cố gắng "HorizontalAlignment" thiết lập để 'trái' và bộ VerticalAlignment to top nhưng nó không làm việc

1
bạn phải chơi với các giá trị x, y như được chỉ ra ( 0,0 là phía dưới bên trái và 1,1 là phía trên bên phải ). Xem chỉnh sửa
joaquin

2
@ user3645626 Nhập là: from pylab import figure, text, scatter, show Mã trong câu trả lời được thực thi trong bảng điều khiển ipython ở chế độ pylab, nơi nhập rõ ràng không cần thiết. Trên một môi trường sạch sẽ, bạn cần nhập những thứ ở trên và thực hiện show()để xem cốt truyện
joaquin

5

Một giải pháp sẽ là sử dụng plt.legendhàm, ngay cả khi bạn không muốn có chú giải thực sự. Bạn có thể chỉ định vị trí của hộp chú giải bằng cách sử dụng lockeyterm. Có thể tìm thấy thêm thông tin tại trang web này nhưng tôi cũng đã bao gồm một ví dụ cho thấy cách đặt chú giải:

ax.scatter(xa,ya, marker='o', s=20, c="lightgreen", alpha=0.9)
ax.scatter(xb,yb, marker='o', s=20, c="dodgerblue", alpha=0.9)
ax.scatter(xc,yc marker='o', s=20, c="firebrick", alpha=1.0)
ax.scatter(xd,xd,xd, marker='o', s=20, c="goldenrod", alpha=0.9)
line1 = Line2D(range(10), range(10), marker='o', color="goldenrod")
line2 = Line2D(range(10), range(10), marker='o',color="firebrick")
line3 = Line2D(range(10), range(10), marker='o',color="lightgreen")
line4 = Line2D(range(10), range(10), marker='o',color="dodgerblue")
plt.legend((line1,line2,line3, line4),('line1','line2', 'line3', 'line4'),numpoints=1, loc=2) 

Lưu ý rằng vì loc=2chú thích nằm ở góc trên bên trái của cốt truyện. Và nếu văn bản trùng lặp với cốt truyện, bạn có thể làm cho nó nhỏ hơn bằng cách sử dụng legend.fontsize, điều này sẽ làm cho chú giải nhỏ hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.