【问题标题】:Matplotlib tabular legendMatplotlib 表格图例
【发布时间】:2021-10-18 21:32:25
【问题描述】:

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

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' 将是具有红色和绿色颜色的标记,而 ':','--','-' 将是具有正确样式的黑色标记。这是可行的吗?我环顾四周,并没有找到一种以这种方式在图例上放置两组独立标记的好方法。

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

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

    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))
    

    如果您真的想要更复杂的图例,另请参阅 Table legend in matplotlib

    【讨论】:

    • 这是我在开始尝试这样做之前所拥有的。它还不错,但它并不像我想要的那样紧凑,因为额外的标记占用了很多额外的水平空间。
    • 由于标题较少,使用的垂直空间也较少。重复标记似乎更容易理解。 Matplotlib 的图例 API 不允许某些列有标记,而另一些则没有;另一种方法是将多个图例编织在一起,如linked post
    猜你喜欢
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2014-03-27
    • 2013-06-29
    • 2019-05-03
    • 1970-01-01
    相关资源
    最近更新 更多