matplotlib 情节之外的两个图例

2024-02-14

我面临着在情节之外显示两个图例的问题。 显示多个图例inside绘图很简单 - matplotlib 文档中通过示例对其进行了描述。 即使在情节之外显示一个图例也相当容易,正如我在 stackoverflow 上发现的那样(例如here https://stackoverflow.com/questions/10101700/moving-matplotlib-legend-outside-of-the-axis-makes-it-cutoff-by-the-figure-box)。 但我找不到工作示例来显示情节之外的两个图例。 在这种情况下,适用于一个图例的方法不起作用。

这是一个例子。 首先是基本代码:

import matplotlib.pyplot as plt
import matplotlib.patches as patches
from matplotlib.lines import Line2D
from matplotlib.font_manager import FontProperties

fig1 = plt.figure(figsize=(17,5))
fontP = FontProperties()
fontP.set_size('small')
ax1 = fig1.add_subplot(111, aspect='equal')
ax1.grid()


# stuff for legend
rec1 = patches.Rectangle(
    (0.9, 0.25),   # (x,y)
    0.1,          # width
    0.1,          # height
    label='rectangle',
    **{
        'color': 'blue'
    }

)
ax1.add_patch(rec1)

leg = plt.legend(handles=[rec1], bbox_to_anchor=(0.7, -0.1))
fig1.savefig('sample1.png', dpi=90, bbox_inches='tight')

但现在我想在情节的右侧绘制另一个图例。 这是代码:

...
ax1.add_patch(rec1)

l1 = plt.legend(prop=fontP, handles=[rec1], loc='center left',
                box to_anchor=(1.0, 0.5))
plt.gca().add_artist(l1)

...

结果:

如您所见,第二个图例被截断。 我的结论是 matplotlib 忽略添加的对象的大小和位置

plt.gca().add_artist(obj)

我怎样才能解决这个问题?

到目前为止,我找到了一个解决方案,但它非常令人讨厌:

创建三个图例,其中两个作为附加图例(由 add_artist 添加),一个作为普通图例。 至于 matplotlib 尊重正常图例的位置和大小,将其移动到右下角并hide它与代码:

leg.get_frame().set_alpha(0)

以下是结果(未设置 alpha 作为示例):

它的行为正是我想要的,但正如你所知,它很讨厌。 这是最终的代码:

import matplotlib.pyplot as plt
import matplotlib.patches as patches
from matplotlib.lines import Line2D
from matplotlib.font_manager import FontProperties

fig1 = plt.figure(figsize=(17,5))
fontP = FontProperties()
fontP.set_size('small')
ax1 = fig1.add_subplot(111, aspect='equal')
ax1.grid()

# stuff for additional legends
rec1 = patches.Rectangle(
    (0.9, 0.25),   # (x,y)
    0.1,          # width
    0.1,          # height
    label='rectangle',
    **{
        'color': 'blue'
    }
)
ax1.add_patch(rec1)

# example additional legends
l1 = plt.legend(prop=fontP, handles=[rec1], loc='center left',
bbox_to_anchor=(1.0, 0.5))
l2 = plt.legend(prop=fontP, handles=[rec1], loc=3, bbox_to_anchor=(0.4,
-0.2))

# add legends
plt.gca().add_artist(l1)
plt.gca().add_artist(l2)

# add third legend
leg = plt.legend(handles=[], bbox_to_anchor=(1.3, -0.3))
leg.get_frame().set_alpha(0) # hide legend

fig1.savefig('sample3.png', dpi=90, bbox_inches='tight')

我可以建议以下解决方案:

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

fig = plt.figure()
fig.set_size_inches((10,10))

gs1 = gridspec.GridSpec(1, 1)
ax1 = fig.add_subplot(gs1[0])

x = np.arange(0.0, 3.0, 0.02)
y1 = np.sin(2*np.pi*x)
y2 = np.exp(-x)
l1, l2 = ax1.plot(x, y1, 'rs-', x, y2, 'go')

y3 = np.sin(4*np.pi*x)
y4 = np.exp(-2*x)
l3, l4 = ax1.plot(x, y3, 'yd-', x, y4, 'k^')

fig.legend((l1, l2), ('Line 1', 'Line 2'), "right")
fig.legend((l3, l4), ('Line 3', 'Line 4'), "lower center")

gs1.tight_layout(fig, rect=[0, 0.1, 0.8, 0.5])

我使用了 matplotlib 网站上的示例,并遵循有关紧密布局的文档http://matplotlib.org/users/tight_layout_guide.html http://matplotlib.org/users/tight_layout_guide.html.

The result is

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matplotlib 情节之外的两个图例 的相关文章

  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • PyUSB 1.0:NotImplementedError:此平台不支持或未实现操作

    我刚刚开始使用 pyusb 基本上我正在玩示例代码here https github com walac pyusb blob master docs tutorial rst 我使用的是 Windows 7 64 位 并从以下地址下载 z
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我

随机推荐

  • 颜色必须是 aRGB 十六进制值?

    所以我之前为污染数据集运行了一些代码 并且代码运行得很好 现在 我收到此错误 颜色必须是 aRGB 十六进制值 我唯一的代码行如下 pollution jawn pd read excel ObservationData irkfioc c
  • C++ 中的友元函数可以有一个类型具有私有析构函数的默认参数吗?

    在下一个示例中 类U带有私有析构函数有一个友元函数foo 这个友元函数有类型参数U带默认值U class U U friend void foo U void foo U Clang 和 MSVC 接受此代码 但 GCC 拒绝它并出现错误
  • “提交”和“修订”有什么区别

    提交和修订有什么区别 我们使用 SVN 并从 Atlassian Fisheye 获取指标 Fisheye 中有一份报告显示了 顶级提交者 按修订 和 顶级提交者 按提交 这里没有人能告诉我有什么区别 非常感谢 安迪 一次提交可以包含许多文
  • 微调超参数不会提高分类器的分数

    我遇到一个问题 即使用 GridSearchCV 微调超参数并不能真正改善我的分类器 我认为改进应该比这更大 我使用当前代码获得的分类器的最大改进约为 0 03 我有一个包含八列和不平衡二进制结果的数据集 对于评分 我使用 f1 并使用 K
  • 为什么我的 Snort 日志为空?

    我运行的是 macOS Sierra 10 12 3 sw vers ProductName Mac OS X ProductVersion 10 12 3 BuildVersion 16D32 我已经使用安装了snorthomebrew
  • 什么是“ld-2.11.1.so”以及如何查看源代码?

    我正在尝试对计算机上 RDTSC 指令的使用进行分类 我的第一个想法是运行我的 lib文件夹通过objdump并搜索 RDTSC for f in ls lib do echo f objdump d f grep n rdtsc done
  • 在oracle中使用触发器更改日期时出现问题

    我想创建一个触发器 可以修改或插入我的表 合同 中的日期 如果拥有当前合同的客户签署新合同 结束日期 前一个活动将是新活动开始日期的前一天 So my trigger is CREATE OR REPLACE TRIGGER TRIGGER
  • 如何检查 iOS 或 macOS 上的活动互联网连接?

    我想使用以下命令检查我在 iOS 上是否有互联网连接可可触感 https en wikipedia org wiki Cocoa Touch库或在 macOS 上使用Cocoa https en wikipedia org wiki Coc
  • 如何生成两个数字之间的随机值[重复]

    这个问题在这里已经有答案了 可能的重复 Java 生成一定范围内的随机数 https stackoverflow com questions 363681 java generating random number in a range 如
  • 有没有一种方法可以在没有基于登录的身份验证的情况下保护 API 的安全?

    我目前正在为一个网站开发一个 API 但该网站不需要登录即可使用 因此该 API 必须在没有个人用户身份验证的情况下工作 目标是防止 API 被第三方使用 有没有办法保护API仅由我的网站使用 而不使用登录身份验证来防止第三方调用后端服务
  • 如何在 Android 上以编程方式安装 CA 证书而无需用户交互

    我正在尝试安装证书而不提示用户 我知道这不是一个好的做法 但这就是总理想要的 Using KeyChain createInstallIntent http developer android com reference android s
  • 发现多个文件具有与操作系统无关的路径“org/apache/http/client/version.properties”

    在将 Android studio 从 2 3 更新到 3 0 之前 一切正常 我在Android Studio中运行应用程序时遇到此错误 编译通过 我不明白为什么会出现这个错误 我在互联网上什么也没找到 这是我的 gradle 文件 pa
  • Spark DataFrame 中的 queryExecution 有什么用?

    我必须了解数据帧对象上名为 queryExecution 的变量 并在 console 中找到以下输出 但不确定它有什么帮助 请在控制台中找到输出 scala gt df queryExecution res5 org apache spa
  • 正则表达式在vim中插入空格

    我是一个正则表达式超级菜鸟 刚刚阅读了我的第一篇关于它们的文章 同时致力于更好地使用 vim 我想使用正则表达式来搜索冒号的所有实例 后面没有空格并且insert一个空间between这些冒号及其后面的任何字符 如果我从以下开始 foo b
  • 如何在vue loader组件中导入JS脚本?

    我有一个 vue 组件 vue 组件 vue loader
  • 将带有辅助 y 轴的 pandas 条形图图例放在条形前面

    我有一个带有辅助 y 轴的 pandas DataFrame 我需要一个条形图 条形图前面有图例 目前 图例前面有一组酒吧 如果可以的话 我还想把图例放在左下角 任何想法表示赞赏 我尝试设置 legend false 并添加自定义图例 但它
  • AVD 模拟器被杀 - Mac

    我花了一整天的时间尝试了在 stackoverflow 上的多个问题和数十个谷歌结果中找到的所有方法 简短摘要 重新启动电脑 删除并重新创建 AVD 将 AVD 图形更改为软件 在 AVD 管理器中和直接在文件中 在 SDK 管理器中重新安
  • 具有动态数据类型的 C 模块化数据结构

    对于我即将进行的大学 C 项目 我被要求拥有 C 允许的模块化代码 基本上 我将拥有一些数据结构的 c 文件和相应的 h 文件 例如链表 二叉树 哈希表等 以链表为例 我有这样的 typedef struct sLinkedList int
  • 如何获取点击的listviewitem的上一项

    我有两项活动 在 Activity1 中 我有从数据库填充的列表视图 单击项目后 它应该转到 Activity2 Activity2 包含两个按钮 下一个和上一个 并显示产品详细信息 我试图获取单击的列表视图项目的上一个项目并在按钮中设置文
  • matplotlib 情节之外的两个图例

    我面临着在情节之外显示两个图例的问题 显示多个图例inside绘图很简单 matplotlib 文档中通过示例对其进行了描述 即使在情节之外显示一个图例也相当容易 正如我在 stackoverflow 上发现的那样 例如here https