Hướng dẫn how do you show labels on a scatter plot in python? - làm cách nào để hiển thị các nhãn trên một biểu đồ phân tán trong python?

Hướng dẫn từng bước về cách thêm nhãn văn bản để phân tán trong Python khi sử dụng thư viện Seaborn hoặc Matplotlib

Python là tuyệt vời cho trực quan hóa dữ liệu! Matplotlib rất nhanh và mạnh mẽ nhưng thiếu sự hấp dẫn thẩm mỹ. Thư viện Seaborn được xây dựng trên Matplotlib đã cải thiện đáng kể tính thẩm mỹ và cung cấp các lô rất tinh vi. Tuy nhiên, khi nói đến các sơ đồ phân tán, các thư viện Python này không có bất kỳ tùy chọn thẳng về phía trước để hiển thị nhãn của các điểm dữ liệu. Tính năng này có sẵn trong các công cụ trực quan hóa dữ liệu khác như Tableau và Power BI, chỉ với một vài cú nhấp chuột hoặc lơ lửng con trỏ qua các điểm dữ liệu.

Trong bài viết này, tôi sẽ giải thích cách thêm nhãn văn bản vào các biểu đồ phân tán của bạn được thực hiện trong Seaborn hoặc bất kỳ thư viện nào khác được xây dựng trên khung matplotlib.

Dữ liệu

Bộ dữ liệu là bảng Anh Premier League. Chúng tôi quan tâm đến ba cột: i. Đội: Đội tên. G: Mục tiêu Scorediii. GA: Mục tiêu bị thủng lưới
i. Team : Team Name
ii. G : Goals Scored
iii. GA : Goals Conceded

Lô phân tán: Mục tiêu ghi điểm so với các mục tiêu được thừa nhận

Một âm mưu phân tán đơn giản có thể được vẽ với các mục tiêu được ghi trong trục X và các mục tiêu được thừa nhận trong trục y như sau.

plt.figure(figsize=(8,5))
sns.scatterplot(data=df,x=’G’,y=’GA’)
plt.title(“Goals Scored vs Conceded- Top 6 Teams”) #title
plt.xlabel(“Goals Scored”) #x label
plt.ylabel(“Goals Conceded”) #y label
plt.show()
Basic Lô đất

Nhãn các mặt hàng cụ thể

Hầu hết các sơ đồ phân tán thường có thể chứa một lượng lớn điểm dữ liệu, chúng tôi có thể quan tâm đến cách một số mục cụ thể có giá trị so với phần còn lại. Ghi nhãn tất cả các điểm dữ liệu có thể khiến cốt truyện của bạn quá cồng kềnh và khó hiểu. Ví dụ, nếu chúng ta đang kiểm tra một thống kê kinh tế xã hội của Hoa Kỳ, thì không có ý nghĩa gì khi hiển thị nhãn của tất cả các quốc gia trong âm mưu phân tán. Sẽ rất hữu ích nếu dữ liệu của các đối thủ cạnh tranh được chọn và các đối thủ cạnh tranh khác được dán nhãn để chúng ta có thể hiểu cách các quốc gia này hoạt động đối với nhau và phần còn lại của thế giới. Đến với bộ dữ liệu của chúng tôi, tôi là người hâm mộ Totenham Hotspur (TOT) và chỉ quan tâm đến hiệu suất của TOT so với các nhóm khác. Tôi có thể thêm nhãn bằng plt.text ()
For example, if we are examining a socio-economic statistic of USA, it makes no sense to display the labels of all countries in scatter plot. It would be useful if USA’s and other selected competitors data is labelled so that we can understand how these countries are performing with respect to each other and rest of the world.
Coming to our dataset, I am a Totenham Hotspur(TOT) fan and am interested only in the performance of TOT against the other teams.
I can add the label using plt.text()

Syntax: 
plt.text(x=x coordinate, y=y coordinate, s=string to be displayed)

Anh X và Y là những mục tiêu được ghi và các mục tiêu được thừa nhận bởi TOT tương ứng. Chuỗi được hiển thị là của TOT TOT .X, Y và S là đối số vị trí và không cần phải được đề cập rõ ràng nếu đơn đặt hàng của chúng được tuân thủ.
x, y and s are positional arguments and need not be explicitly mentioned if their order is followed.

plt.text(df.G[df.Team=='TOT'],df.GA[df.Team=='TOT'],"TOT", color='red')

Các đối số bổ sung như màu sắc, kích thước, alpha (chuyển tiếp), vv có thể được sử dụng để thay đổi thành định dạng văn bản. Nó cũng có thể được nhóm lại trong fontdict để làm cho mã của bạn dễ đọc và hiểu.

plt.text(df.G[df.Team==’LIV’],df.GA[df.Team==’LIV’],”LIV”, 
fontdict=dict(color=’black’, alpha=0.5, size=16))
Lô đất với nhãn cụ thể (hình ảnh của tác giả)

Thêm hộp nền

Tham số Bbox có thể được sử dụng để làm nổi bật văn bản.

sns.scatterplot(data=df,x=’G’,y=’GA’)
plt.text(x=df.G[df.Team==’TOT’]+0.3,
y=df.GA[df.Team==’TOT’]+0.3,
s=”TOT”,
fontdict=dict(color=’red’,size=10),
bbox=dict(facecolor=’yellow’,alpha=0.5))

Lưu ý rằng một vết lõm 0,3 được thêm vào tọa độ X và Y sao cho văn bản và hộp nền không trùng với DataPoint. Đó là tùy chọn nhưng có thể cải thiện tính thẩm mỹ của biểu đồ.
It is optional but can improve the aesthetics of the chart.

Biểu đồ phân tán với hộp văn bản (hình ảnh của tác giả)

Ghi nhãn tất cả các điểm

Một số tình huống yêu cầu ghi nhãn tất cả các điểm dữ liệu trong biểu đồ phân tán đặc biệt là khi có ít điểm dữ liệu. Điều này có thể được thực hiện bằng cách sử dụng một vòng đơn giản để lặp qua tập dữ liệu và thêm tọa độ X, tọa độ y và chuỗi từ mỗi hàng .
This can be done by using a simple for loop to loop through the data set and add the x-coordinate, y-coordinate and string from each row.

sns.scatterplot(data=df,x=’G’,y=’GA’)for i in range(df.shape[0]):
plt.text(x=df.G[i]+0.3,y=df.GA[i]+0.3,s=df.Team[i],
fontdict=dict(color=’red’,size=10),
bbox=dict(facecolor=’yellow’,alpha=0.5))
Lô đất với tất cả các nhãn (hình ảnh của tác giả)

Liên lạc cuối cùng

Chúng tôi đã hoàn thành việc xây dựng một biểu đồ phân tán được dán nhãn. Tuy nhiên, chúng ta có thể quan sát rằng một vài hộp văn bản đang nhô ra khỏi khu vực hình. Nó sẽ là thẩm mỹ hơn nếu văn bản có thể được bao bọc trong bản đồ vẽ cốt truyện. Điều này có thể được thực hiện bằng cách thay đổi vị trí, kích thước, v.v. của văn bản. Tôi thường đạt được điều này bằng cách tăng diện tích lô bằng cách sử dụng các hàm xlim () và ylim () Đệm 1 đơn vị xung quanh lô trong khi đặt giới hạn X và Y.
It would be aesthetically more pleasing if the text could be wrapped within the plot’s canvas. This can be done by changing the position, size etc. of the text.
I generally achieve this by increasing the plot area by using xlim() and ylim() functions in matplotlib.
In the below code you can see how I have applied a padding of 1 unit around the plot while setting x and y limits.

plt.figure(figsize=(8,5))
sns.scatterplot(data=df,x=’G’,y=’GA’)
for i in range(df.shape[0]):
plt.text(x=df.G[i]+0.3,y=df.GA[i]+0.3,s=df.Team[i],
fontdict=dict(color=’red’,size=10),
bbox=dict(facecolor=’yellow’,alpha=0.5))
plt.xlim(df.G.min()-1,df.G.max()+1) #set x limit
plt.ylim(df.GA.min()-1,df.GA.max()+1) #set y limit
plt.title(“Goals Scored vs Conceded- Top 6 Teams”) #title
plt.xlabel(“Goals Scored”) #x label
plt.ylabel(“Goals Conceded”) #y label

plt.show()

padded Pt lô phân tán với nhãn (hình ảnh của tác giả)

Nếu bạn biết bất kỳ phương pháp nào tốt hơn để gói các yếu tố trong cốt truyện trong khu vực Canvas, vui lòng cho tôi biết trong các bình luận.

Resources:

Bạn có thể kiểm tra sổ ghi chép cho bài viết này trong GitHub.

Trở thành một thành viên

Tôi hy vọng bạn thích bài báo, tôi rất khuyên bạn nên đăng ký thành viên trung bình để đọc thêm bài viết của tôi hoặc các câu chuyện của hàng ngàn tác giả khác về nhiều chủ đề. Phí thành viên của bạn trực tiếp hỗ trợ tôi và các nhà văn khác mà bạn đọc. Bạn cũng sẽ có quyền truy cập đầy đủ vào mọi câu chuyện trên Medium.signing up for Medium Membership to read more articles by me or stories by thousands of other authors on variety of topics.
Your membership fee directly supports me and other writers you read. You’ll also get full access to every story on Medium.

Dưới đây là một số câu chuyện khác mà bạn có thể quan tâm.

Ảnh của Michael Dziedzic trên unplash

Làm thế nào để bạn thêm nhãn vào một âm mưu phân tán trong Python?

Để gắn nhãn các điểm biểu đồ phân tán trong matplotlib, chúng ta có thể sử dụng hàm matplotlib.pyplot.annotate (), thêm một chuỗi ở vị trí được chỉ định.Tương tự, chúng ta cũng có thể sử dụng matplotlib.use the matplotlib. pyplot. annotate() function, which adds a string at the specified position. Similarly, we can also use matplotlib.

Làm thế nào để bạn thêm một nhãn vào một âm mưu phân tán?

Thực hiện thêm các nhãn dữ liệu vào biểu đồ phân tán, chọn biểu đồ, nhấp vào biểu tượng Plus ở bên phải, sau đó kiểm tra tùy chọn nhãn dữ liệu.Điều này sẽ thêm các nhãn dữ liệu sẽ hiển thị giá trị trục y cho từng điểm dữ liệu trong biểu đồ phân tán.select the chart, click on the plus icon on the right, and then check the data labels option. This will add the data labels that will show the Y-axis value for each data point in the scatter graph.

Làm cách nào để hiển thị nhãn dữ liệu trong matplotlib?

Lập danh sách các năm ..
Lập danh sách các quần thể trong năm đó ..
Nhận số lượng nhãn bằng NP.....
Đặt chiều rộng của các thanh ..
Tạo các biến FIG và AX bằng phương thức Subplots (), trong đó NROW và NCOL mặc định là 1 ..
Đặt nhãn trục y của hình bằng set_ylabel () ..

Làm thế nào để bạn thêm một nhãn vào một điểm trong Python?

Sử dụng matplotlib.pyplot.annotate (S, XY) để thêm một chuỗi nhãn S vào một điểm, trong đó XY là một bộ tọa độ của tọa độ điểm. pyplot. annotate(s, xy) to add a label string s to a point, where xy is a tuple of the point coordinates.