当前位置: 首页 > 知识库问答 >
问题:

Matplotlib图例不显示。在for循环中定义的ax.arrow()的标签。Python 2.7

乐正嘉瑞
2023-03-14

我无法制作Matplotlib v.2.0的图例。图2显示在Python2.7中。下面我有一个简单的例子,它在for循环的轴上绘制箭头。

由于在每次迭代中指定标签关键字定义并不能使图例出现,因此我尝试使用条件仅在第一次迭代中设置标签。

在ax.legend()中尝试bbox_to_anchor和loc参数没有效果,所以我忽略了任何图例参数。

有人知道如何让一个图例出现,在标签旁边分别显示红色和黑色箭头标记的“箭头1”和“箭头2”标签吗?

最小示例:

import matplotlib.pyplot as plt

fig, ax = plt.subplots( )
ax.set_xlim( 0, 11 )
ax.set_ylim( 0, 2 )

kwargs1 ={'color':'r'}
kwargs2 ={'color':'black'}

for i in range(1, 11):

    ax.arrow( i-0.2, 0, 0, i/10., width=0.1, 
              label='Arrow1' if i == 1 else None, **kwargs1 )

    ax.arrow( i+0.2, 0, 0, i/10., width=0.1, 
              label='Arrow2' if i == 1 else None, **kwargs2 )

ax.legend( )

请参阅指向无图例的输出绘图图片的链接:

箭头图

编辑:

似乎每次迭代都设置标签定义是可以的。这里有一个解决方案,在图例中显示带有正确颜色和标签的行标记:

import matplotlib.pyplot as plt

fig, ax = plt.subplots( )
ax.set_xlim( 0, 11 )
ax.set_ylim( 0, 2 )

kwargs1 ={'color':'r' }
kwargs2 ={'color':'black'}

for i in range(1, 11):

    Arrow1 = ax.arrow( i-0.2, 0, 0, i/10., width=0.1, 
              label='Arrow1', **kwargs1 )

    Arrow2 = ax.arrow( i+0.2, 0, 0, i/10., width=0.1, 
              label='Arrow2', **kwargs2 )

ax.legend( handles=[Arrow1, Arrow2] )

带有图例的绘图输出图片:

带图例的箭头图

另一个编辑:

出于我不认为我会深究的原因,我实际脚本的复杂性(不是最小的例子)需要一个无形的“代理艺术家”来为图例添加标签。这是在这些文档中建议给没有支持的艺术家的

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle

fig, ax = plt.subplots( )
ax.set_xlim( 0, 11 )
ax.set_ylim( 0, 2 )

kwargs1 ={'color':'red' }
kwargs2 ={'color':'black'}

for i in range(1, 11):

    ax.arrow( i-0.2, 0, 0, i/10., width=0.1, **kwargs1 )
    Arrow1 = Rectangle((0, 0), 1, 1, label='Arrow1', fc='red')

    ax.arrow( i+0.2, 0, 0, i/10., width=0.1, **kwargs2 )
    Arrow2 = Rectangle((0, 0), 1, 1, label='Arrow2', fc='black')

ax.legend( handles=[Arrow1, Arrow2], loc='upper left' )

共有1个答案

施阳夏
2023-03-14

我认为您需要指定legend()命令的“labels”和“handles”参数才能显示它

https://matplotlib.org/users/legend_guide.html

 类似资料:
  • 问题内容: 感谢Jake Vanderplas,我知道如何开始使用来编写动画情节。这是一个示例代码: 假设现在我想绘制大量的功能(在这里说四个),这些功能是在循环的帮助下定义的。我做了一些voodoo编程,试图了解如何模仿下面的逗号,这就是我所得到的(不必说它不起作用:)。 我的问题是: 我该如何运作?红利(可能是关联的):和之间有什么区别? 谢谢 问题答案: 在下面的解决方案中,我展示了一个更大

  • 我试图在matplotlib中绘制多条线。 我已经习惯了标签功能,但它没有显示它。 这是我的密码。 这是我的照片:

  • 问题内容: 在MySQL中,我有一个带有For循环的存储过程: 它总是打印。MySQL for循环的正确语法是什么? 问题答案:

  • 问题内容: 我知道如何开始用. 以下是示例代码: 假设现在我想绘制成吨的函数(这里是四个),用 一个循环的帮助。我做了一些巫毒编程,试图了解如何 模仿下面的逗号,这里是我得到的(不用说 不起作用:)。 *我的问题是:我怎样才能让它工作?奖金(可能有联系):什么 是’line,=plt.绘图([],[])行=plt.绘图([], [])`? 谢谢 问题答案: 在下面的解决方案中,我展示了一个更大的示

  • 问题内容: 我遇到了与此处报告的问题类似的问题。我不明白为什么刻度标签文本为空字符串: 输出: 我得到的结果相同,但是绘制的图在保存或显示时在x轴上显示了八个带标记的刻度。但是,如果我 在 显示图 后 要求标签,则该列表已正确填充。当然,现在要做任何更改都为时已晚。 输出: 为什么会发生这种情况(Mac OS X Yosemite,Matplotlib 1.5.1),以及 在 显示或保存绘图 之前

  • 本文向大家介绍Thinkphp5.0框架视图view的循环标签用法示例,包括了Thinkphp5.0框架视图view的循环标签用法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Thinkphp5.0框架视图view的循环标签用法。分享给大家供大家参考,具体如下: volist标签: foreach标签: 方式一: 方式二: for标签: 输出1到10 更多关于thinkPHP相关内容