如何在matplotlib图例中添加字符串作为艺术家?

 mini泥猴 发布于 2022-12-09 13:36

我试图在python图中创建一个图例,其中艺术家是一个字符串(单个字母),然后标记.例如,我想要一个下图的图例:

import numpy as np
import matplotlib.pyplot as plt
import string

N = 7
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2 

plt.scatter(x, y, s=area, c=colors, alpha=0.5)
for i,j in enumerate(zip(x,y)):
    plt.annotate(list(string.ascii_uppercase)[i],xy=j)
plt.show()

传说的地方如下:

A - 型号名称A.

B - 型号名称B.

C - 型号名称C.

D - 型号名称D.

etc.etc.

我无法解决的问题是将'A','B',......作为传奇文本的艺术家.我可以看到你将如何使用线或补丁,或类似的东西.但总的来说有一种方法可以使用字符串作为艺术家而不是一条线?

1 个回答
  • 我认为没有文本的图例处理程序(请参阅此处的可用列表).但是您可以实现自己的自定义图例处理程序.在这里,我将在上面的链接中修改示例:

    import matplotlib.pyplot as plt
    import matplotlib.text as mpl_text
    
    class AnyObject(object):
        def __init__(self, text, color):
            self.my_text = text
            self.my_color = color
    
    class AnyObjectHandler(object):
        def legend_artist(self, legend, orig_handle, fontsize, handlebox):
            print orig_handle
            x0, y0 = handlebox.xdescent, handlebox.ydescent
            width, height = handlebox.width, handlebox.height
            patch = mpl_text.Text(x=0, y=0, text=orig_handle.my_text, color=orig_handle.my_color, verticalalignment=u'baseline', 
                                    horizontalalignment=u'left', multialignment=None, 
                                    fontproperties=None, rotation=45, linespacing=None, 
                                    rotation_mode=None)
            handlebox.add_artist(patch)
            return patch
    
    obj_0 = AnyObject("A", "purple")
    obj_1 = AnyObject("B", "green")
    
    plt.legend([obj_0, obj_1], ['Model Name A', 'Model Name B'],
               handler_map={obj_0:AnyObjectHandler(), obj_1:AnyObjectHandler()})
    
    plt.show()
    

    在此输入图像描述

    2022-12-11 02:56 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有