Python 在不打印对象的情况下向matplotlib图例添加条目

Python 在不打印对象的情况下向matplotlib图例添加条目,python,matplotlib,legend,Python,Matplotlib,Legend,是否可以在未打印相应对象的情况下向matplotlib中的图例添加条目 例如,我在一个图形上绘制了两组三条线。它们成对出现,所以我想用相应的颜色绘制它们,其中一个是虚线,另一个是实线 import matplotlib.pyplot as plt import numpy as np for i in range(1,4): line = plt.plot(i*np.arange(1,10), label=i)[0] plt.plot(-i*np.arange(1,10)

是否可以在未打印相应对象的情况下向matplotlib中的图例添加条目

例如,我在一个图形上绘制了两组三条线。它们成对出现,所以我想用相应的颜色绘制它们,其中一个是虚线,另一个是实线

import matplotlib.pyplot as plt
import numpy as np    
for i in range(1,4):
    line = plt.plot(i*np.arange(1,10), label=i)[0]
    plt.plot(-i*np.arange(1,10), ls='--', color=line.get_color(), label=-i)
plt.legend()

但是,与图例中的所有六个项目不同,(纯蓝色1、纯橙色2、纯绿色3、纯蓝色1、纯橙色2、纯绿色3),我希望有三个项目(纯蓝色1、纯橙色2、纯绿色3),然后有两个额外的项目来消除虚线与实线之间的歧义(纯黑色“正片”,黑色虚线“负片”)


既然我没有绘制黑色实线/虚线,如何添加这两个条目?

我在官方网站上看到了@JohanC评论中的自定义参考。这符合你问题的意图吗

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

fig, ax = plt.subplots()

legend_elements = [Line2D([0], [0], color='steelblue', ls='--',lw=2, label='blue'),
                   Line2D([0], [0], color='orange', ls='--',lw=2, label='orange'),
                   Line2D([0], [0], color='yellowgreen', ls='--',lw=2, label='green'),
                   Line2D([0], [0], color='k', ls='-',lw=2, label='positives'),
                   Line2D([0], [0], color='k', ls='--', lw=2, label='negatives')]

ax.legend(handles=legend_elements, loc='upper left')

for i in range(1,4):
    line = plt.plot(i*np.arange(1,10))[0]
    ax.plot(-i*np.arange(1,10), ls='--', color=line.get_color())
    
plt.show()

我在官方网站上看到了@JohanC评论中的定制参考。这符合你问题的意图吗

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

fig, ax = plt.subplots()

legend_elements = [Line2D([0], [0], color='steelblue', ls='--',lw=2, label='blue'),
                   Line2D([0], [0], color='orange', ls='--',lw=2, label='orange'),
                   Line2D([0], [0], color='yellowgreen', ls='--',lw=2, label='green'),
                   Line2D([0], [0], color='k', ls='-',lw=2, label='positives'),
                   Line2D([0], [0], color='k', ls='--', lw=2, label='negatives')]

ax.legend(handles=legend_elements, loc='upper left')

for i in range(1,4):
    line = plt.plot(i*np.arange(1,10))[0]
    ax.plot(-i*np.arange(1,10), ls='--', color=line.get_color())
    
plt.show()

这个问题正是我们的主题