首页 > 解决方案 > Matplotlib 表格图例

问题描述

我有许多要绘制的数据集,并且正在寻找一种表示图例的表格方式。我正在生成的情节具有以下形式:

mul_list = [1,2,3]
add_list = [[1,2,3],[4,5,6]]

linestyles = [':','--','-']
linecolors = ['r','g']

time = np.linspace(0,5)

for i,mul in enumerate(mul_list):
    for j,add in enumerate(add_list):
        plt.plot(time,mul*time+add[i],linestyle = linestyles[i],color = linecolors[j])

在此处输入图像描述

我正在尝试生成以下形式的图例:

------------------------------
|               'r'     'g'  |
| ':'  m = 1   a = 1   a = 4 |
|'--'  m = 2   a = 2   a = 5 |
| '-'  m = 3   a = 3   a = 6 |
------------------------------

其中 'r','g' 将是具有红色和绿色颜色的标记,而 ':','--','-' 将是具有正确样式的黑色标记。这是可行的吗?我环顾四周,我还没有找到一个很好的方法来以这种方式在图例上放置两组单独的标记。

标签: pythonmatplotlib

解决方案


如果您允许细微的变化,您可以为每个组合创建标签并使用多个列:

from matplotlib import pyplot as plt

mul_list = [1, 2, 3]
add_list = [[1, 2, 3], [4, 5, 6]]

linestyles = [':', '--', '-']
linecolors = ['r', 'g']

time = np.linspace(0, 5)

for i, mul in enumerate(mul_list):
    for j, add in enumerate(add_list):
        plt.plot(time, mul * time + add[i], linestyle=linestyles[i], color=linecolors[j], label=f'm={mul} a={add[i]}')
plt.legend(ncol=len(mul_list))
plt.show()

带列的图例

以不同的顺序绘图(或手动重新排列句柄和标签)可以给出两列:

for j, add in enumerate(add_list):
    for i, mul in enumerate(mul_list):
        plt.plot(time, mul * time + add[i], linestyle=linestyles[i], color=linecolors[j], label=f'm={mul} a={add[i]}')
plt.legend(ncol=len(add_list))

图例 2 列

如果您真的想要更复杂的图例,另请参阅matplotlib 中的表图例。


推荐阅读