簡體   English   中英

如何在 matplotlib 上的散點圖中添加圖例(點根據 0 和 1 的數組進行顏色編碼)?

[英]How do I add a legend to a scatter plot on matplotlib (the points are colour coded according to an array of 0s and 1s)?

我正在使用 Python 3 Jupyter Notebook。 我有一個 3 列表(價格、大小和視圖)。 我創建了一個“價格”與“大小”的散點圖,但我根據僅包含 0 和 1 的“視圖”列對點進行了顏色編碼。 現在我想添加一個圖例,顯示紅點代表“無視圖”,藍點代表“視圖”。 這是我嘗試過的:

plt.scatter(data1["size"], data1["price"], c = data1["view"], cmap = "bwr_r")
plt.xlabel("Size", fontsize = 25, c = "green")
plt.ylabel("Price", fontsize = 25, c = "green")
plt.legend(["No view", "View"], bbox_to_anchor= (1.05, 0.5), loc= "lower left")
plt.show()

運行上面的代碼后,一切正常,除了圖例只顯示紅點的“無視圖”,藍點的“視圖”不出現。

要執行您需要的操作,您需要將視圖 - 0 或 1 分配給一種顏色,以便映射正確的顏色。 這可以使用地圖來完成。 圖例的句柄需要添加自定義文本,以便分配藍色和紅色並使用正確的標簽顯示。 我使用隨機數作為數據來繪制所需的圖表,並保留盡可能多的代碼。

代碼

import pandas as pd
import numpy as np
import random
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D

size = []
price = []
view = []

for i in range(0,100):
    size.append(round(random.random(),3))
    price.append(round(random.random(),3))
    view.append(int(random.random()*10 % 2))
df = pd.DataFrame({'size':size, 'price':price, 'view':view})
colors = {0:'red', 1:'blue'}
plt.scatter(x=df['size'], y=df['price'], c=df['view'].map(colors))
plt.xlabel("Size", fontsize = 25, c = "green")
plt.ylabel("Price", fontsize = 25, c = "green")
markersize=8) for k, v in colors.items()]
custom = [Line2D([], [], marker='.', color='red', linestyle='None'),
          Line2D([], [], marker='.', color='blue', linestyle='None')]

plt.legend(handles = custom, labels=['No View', 'View'], bbox_to_anchor= (1.05, 0.5), loc= "lower left")
plt.show()

輸出圖

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM