[英]How to get distinct label name for each scatter points in graph using matplotlib in python?
我正在使用 for 循環為點提供標簽和顏色。 但是我沒有得到每個不同顏色符號的唯一標簽,相反,由於 500 行左右的大型 Excel 數據,我在圖表頂部排起了長隊。 這是我的代碼:
for val in ghi:
if val < 2:
col.append('navy')
lab.append(' <2 ')
elif (val >= 2) and (val < 4):
col.append('lightblue')
lab.append(' 2~4 ')
elif (val >= 4) and (val < 6):
col.append('orange')
lab.append(' 4~6 ')
else:
col.append('brown')
lab.append(' >6 ')
plt.scatter(x, y, marker = "D", s = 10, color = col, label = lab)
sns.lineplot(x, y, color ="red")
plt.legend()
您看到多個標簽的原因是label=lab
。 每行有一個條目。 因此,您將需要使用plt.legend()
添加句柄和標簽,這樣您就可以像 if/else 語句中那樣只有四個條目。 此外,為確保顏色和標簽匹配,請按實驗室字段對數據進行排序。
由於沒有提供任何數據,前幾行包括隨機數據的創建。 請注意,我將數據放入數據框中並按ghi
字段對其進行排序。 稍后,圖例具有您可以根據需要自定義的句柄和標簽。 希望這是您想要實現的目標。
否則,我已嘗試保持相同的名稱和盡可能多的代碼,以便您更容易解釋。
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from matplotlib.lines import Line2D
ghi = np.random.randint(11, size=(20))
x = np.random.rand(20)
y = np.random.rand(20)
col = []
for val in ghi:
if val < 2:
col.append('navy')
elif (val >= 2) and (val < 4):
col.append('lightblue')
elif (val >= 4) and (val < 6):
col.append('orange')
else:
col.append('brown')
df = pd.DataFrame({'x':x, 'y':y, 'ghi':ghi, 'col':col})
df.sort_values(by=['ghi'], inplace = True)
plt.scatter(df.x, df.y, marker = "D", s = 50, color = df.col)#, label = np.unique(lab))
sns.lineplot(x, y, color ="red")
myHandles = [Line2D([], [], marker='D', color='navy', linestyle='None'),
Line2D([], [], marker='D', color='lightblue', linestyle='None'),
Line2D([], [], marker='D', color='orange', linestyle='None'),
Line2D([], [], marker='D', color='brown', linestyle='None')]
plt.legend(handles=myHandles, labels = [' <2 ', ' 2~4 ', ' 4~6 ', ' >6 '])
輸出圖
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.