簡體   English   中英

Matplotlib:繪制自定義圖例

[英]Matplotlib: Plot custom legend

我遇到的情況是,我在matplotlib圖上繪制了內容,而散布圖形狀映射到了標簽類型。

例如:

's': "X"
'o': "Y"

但是,我用網絡x作圖。 現在,我想添加一個顯示此映射的圖例,並且可以使用plt方法修改圖。

所以我需要以某種方式plt.legend以下內容:

plt.legend(('s','o'),("X","Y"))

但是從文檔中不清楚如何完成此任務。 有沒有辦法在matplotlib中繪制這樣的自定義圖例?

從您的問題中不清楚映射的含義。 如果您希望將圖例手柄從默認標記修改為自定義變量標記,則可以執行以下操作。 我的解決方案基於答案,但簡化為一個簡單的案例。 不要忘記贊成原始答案。 我已經承認了。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D

fig, ax = plt.subplots()

new_legends = ["X", "Y"]
markers = ['s', 'o']
colors = ['r', 'b']

x = np.arange(5)
plt.plot(x, 1.5*x, marker=markers[0], color=colors[0], label='squares')
plt.plot(x, x, marker=markers[1], color=colors[1], label='circles')

_, labels = ax.get_legend_handles_labels()

def dupe_legend(label, color):
    line = Line2D([0], [0], linestyle='none', mfc='black',
                mec=color, marker=r'$\mathregular{{{}}}$'.format(label))
    return line

duplicates = [dupe_legend(leg, color) for leg, color in zip(new_legends, colors)]
ax.legend(duplicates, labels, numpoints=1, markerscale=2, fontsize=16)
plt.show()

在此處輸入圖片說明

Axis對象上繪制內容時,可以傳遞label關鍵字參數:

fig, ax = plt.subplots(figsize=(8, 8))

n_points = 10
x1 = np.random.rand(n_points)
y1 = np.random.rand(n_points)
x2 = np.random.rand(n_points)
y2 = np.random.rand(n_points)

ax.scatter(x1, y1, marker='x', label='X')
ax.scatter(x2, y2, marker='o', label='y')
ax.legend()

這將產生如下結果:

在此處輸入圖片說明

暫無
暫無

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

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