matplotlib:子图背景(轴面+标签)颜色[或图/轴坐标系]

2024-02-28

我有一个包含 3x2 子图的图形,我想在中间一对子图上设置背景颜色,以便更清楚哪些轴标签属于哪个子图。

Setting facecolor构建子图时,仅更改轴定义的区域的颜色;刻度线和轴标签仍然绘制在figure.patch。假设没有简单的方法来做到这一点,我可以在相关实例后面添加一个矩形补丁figure.axes.

经过一番尝试后,看来figure.axes[x].get_position()返回轴坐标(标准化坐标 [0.0-1.0]),但是Rectangle()似乎想要显示坐标(像素)。这段代码或多或少有效(ED:交互式,但是当输出到 png 时(使用 Agg 渲染器),矩形的定位完全关闭):

import matplotlib.pyplot as plt
import matplotlib

f = plt.figure()
plt.subplot( 121 )
plt.title( 'model' )
plt.plot( range(5), range(5) )
plt.xlabel( 'x axis' )
plt.ylabel( 'left graph' )
plt.subplot( 122 )
plt.title( 'residuals' )
plt.plot( range(5), range(5) )
plt.xlabel( 'x axis' )
plt.ylabel( 'right graph' )
plt.tight_layout(pad=4)

bb = f.axes[0].get_position().transformed( f.transFigure ).get_points()
bb_pad = (bb[1] - bb[0])*[.20, .10]
bb_offs = bb_pad * [-.25, -.20]
r = matplotlib.patches.Rectangle( bb[0]-bb_pad+bb_offs, *(bb[1] - bb[0] + 2*bb_pad),
                                  zorder=-10, facecolor='0.85', edgecolor='none' )
f.patches.extend( [r] )

但看起来很老套,感觉我错过了一些重要的事情。任何人都可以解释一下,是否有更简单/更好的方法来做到这一点,如果有,它是什么?

由于我确实需要写入文件,因此我目前没有解决方案。


只需使用transform夸格到Rectangle,并且您可以使用任何您想要的坐标系。

举个简单的例子:

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

fig, axes = plt.subplots(3, 2)

rect = Rectangle((0.08, 0.35), 0.85, 0.28, facecolor='yellow', edgecolor='none',
                 transform=fig.transFigure, zorder=-1)
fig.patches.append(rect)
plt.show()

但是,如果您想要更稳健地执行操作并计算轴的范围,您可以执行以下操作:

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

def full_extent(ax, pad=0.0):
    """Get the full extent of an axes, including axes labels, tick labels, and
    titles."""
    # For text objects, we need to draw the figure first, otherwise the extents
    # are undefined.
    ax.figure.canvas.draw()
    items = ax.get_xticklabels() + ax.get_yticklabels() 
#    items += [ax, ax.title, ax.xaxis.label, ax.yaxis.label]
    items += [ax, ax.title]
    bbox = Bbox.union([item.get_window_extent() for item in items])
    return bbox.expanded(1.0 + pad, 1.0 + pad)


fig, axes = plt.subplots(3,2)

extent = Bbox.union([full_extent(ax) for ax in axes[1,:]])

# It's best to transform this back into figure coordinates. Otherwise, it won't
# behave correctly when the size of the plot is changed.
extent = extent.transformed(fig.transFigure.inverted())

# We can now make the rectangle in figure coords using the "transform" kwarg.
rect = Rectangle([extent.xmin, extent.ymin], extent.width, extent.height,
                 facecolor='yellow', edgecolor='none', zorder=-1, 
                 transform=fig.transFigure)
fig.patches.append(rect)

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

matplotlib:子图背景(轴面+标签)颜色[或图/轴坐标系] 的相关文章

随机推荐

  • Paypal REST API:无法将登录页面设置为计费

    我正在使用 Paypal REST API 和 PHP SDK 为慈善机构构建捐赠功能 我一直在尝试将登陆页面类型设置为 结算 但似乎没有任何变化 这是我用于定义网络体验配置文件的代码 根据http paypal github io Pay
  • 如果代码覆盖率报告百分比较小,构建应该失败

    我编写了一个 build xml 用于通过 phing 生成报告 我在 build xml 中添加了以下命令来生成代码覆盖率报告
  • 简单:如何用 php 替换“all Between”? [复制]

    这个问题在这里已经有答案了 string
  • SF:从 UTM 到纬度/经度

    我有一组 UTM 度量点 我想使用 sf 环境将其转换为纬度和经度小数点 我的数据集如下所示 df lt data frame longitude c 4585434 4588904 4586694 latitude c 430060 8
  • 如何从 github 拉取我的项目?

    我在github上有一个项目 我之前一直在做 但是 我清理了我的计算机 我想知道我应该在我的用户名下调用哪个 git 命令来再次签出我的项目 以便我可以将最新更改推送到我的帐户下的 github Git clone 是您正在寻找的命令 gi
  • Swift:仅返回类型不同的方法重载

    我不断看到 Swift 类中定义了两种仅返回类型不同的方法 我不习惯使用允许这样做的语言 Java C 等 因此我寻找描述其在 Swift 中如何工作的文档 我在任何地方都没有发现任何东西 我本以为 Swift 书中会有完整的章节来介绍它
  • WPF - 当 ItemsSource 更改时重置 ListBox 滚动位置

    我当前有一个 ListBox 其 ItemsSource 集合绑定到我的视图模型上的 IEnumerable 类型的属性 当该 preoprty 的引用更改时 列表框会按预期更新 但是我有一个问题 如果我有大量项目集合并滚动到列表框的底部
  • 禁用 Laravel 中的速率限制器?

    有没有办法禁用 Laravel 中每个 单个路由的速率限制 我正在尝试测试接收大量请求的端点 但 Laravel 会随机开始响应 status 429 responseText Too Many Attempts 数百个请求使得测试变得非常
  • KeyVault 为何比标准存储更安全?

    我试图了解 Azure Key Vault 或同样的 AWS KMS 提供的安全优势 我了解密钥管理的好处 即能够轻松轮换 更改 审核密钥访问 但让我有点困惑的是它如何更安全 据我了解 如果我开发一个 Web 应用程序并想要保护我的连接字符
  • 使用 cakephp 3 上传文件并将其存储在 blob 中

    我知道在数据库中存储文件有点脏 但我需要上传文件并将其存储到数据库 BLOB 中 并且我没有找到任何有关它的文档 也没有找到任何线索 所以有关的任何帮助我们将不胜感激 提前致谢 大卫 您不需要做任何特别的事情 只需将要存储在适当的实体属性
  • 在 $_POST 值中不使用引号、单引号和双引号[重复]

    这个问题在这里已经有答案了 可能的重复 我应该对单引号使用 php 引号转义还是在数组中使用双引号 https stackoverflow com questions 2317959 should i use php quote escap
  • 要上传到 Google 云端硬盘的 URL

    有没有可以用来直接上传到 Google 云端硬盘的 URL 例如 我的服务器上有一个文件http example com file doc我想将其上传到 Google Drive 如下所示 http google com upload ht
  • 检查是否有元素包含特定的 css 样式

    我想知道元素包含任何 css 样式的检查过程 我有以下 html 代码 ul li text 1 li li text 2 li li text 3 li ul 我想找出样式左侧为 0px 的 li 然后想对该 li 应用更多样式 Than
  • Subsonic - 如何使用 SQL 架构/所有者名称作为命名空间的一部分?

    我刚刚开始使用 Subsonic 2 2 到目前为止印象深刻 认为它会节省我一些认真的编码时间 在我开始全职使用它之前 尽管有些事情困扰着我 我想解决一下 在我当前的数据库 SQL2008 数据库 中 我已按架构 所有者名称将表 视图 sp
  • 是否可以通过插件在 Firefox 上设置配置设置

    我正在寻找一种从网络打印而不提示打印对话框的方法 我刚刚提出了问题 https stackoverflow com questions 5809102 how to print from web without prompting a pr
  • 如何进行函数复合?

    在相当不耐烦地等待 Java 8 发布并阅读精彩文章之后Brian Goetz 的 Lambda 状态 文章 http cr openjdk java net briangoetz lambda lambda state final htm
  • 操作必须使用可更新查询/SQL - VBA

    我正在尝试创建一个非常动态的宏 它将根据用户的选择更新数据库中的不同表 当然 每个表都有不同的标题和信息 我在更新时遇到问题 当用户将新记录添加到旧表时 这是代码的一部分 问题是当它到达 update 时 我收到 操作必须使用可更新查询 错
  • Hibernate:为什么 FetchType.LAZY 注释的集合属性急切加载?

    我尝试实现简单的one to many协会 使用调试模式检查项目对象后 我发现List
  • scrapy中如何根据url过滤重复请求

    我正在使用 scrapy 和 CrawlSpider 为网站编写一个爬虫 Scrapy 提供了一个内置的重复请求过滤器 可以根据 url 过滤重复请求 另外 我可以使用过滤请求rules爬行蜘蛛成员 我想做的是过滤请求 例如 http ww
  • matplotlib:子图背景(轴面+标签)颜色[或图/轴坐标系]

    我有一个包含 3x2 子图的图形 我想在中间一对子图上设置背景颜色 以便更清楚哪些轴标签属于哪个子图 Setting facecolor构建子图时 仅更改轴定义的区域的颜色 刻度线和轴标签仍然绘制在figure patch 假设没有简单的方