Matplotlib 子图太窄且布局紧凑

2024-03-09

我目前正在尝试使用 GridSpec 在 Matplotlib (Python 3.6、Matplotlib 2.0.0)中绘制许多子图。这是最小的工作示例:

import matplotlib.pyplot as plt
from matplotlib.gridspec import *

# Color vector for scatter plot points
preds = np.random.randint(2, size=100000)

# Setup the scatter plots
fig = plt.figure(figsize=(8,8))
grid = GridSpec(9, 9)

# Create the scatter plots
for ii in np.arange(0, 9):
    for jj in np.arange(0, 9):
        if (ii > jj):
            ax = fig.add_subplot(grid[ii, jj])
            x = np.random.rand(100000)*2000
            y = np.random.rand(100000)*2000
            ax.scatter(x, y, c=preds)

这是没有任何修改的结果:

当然,子图之间的间距并不令人满意,所以我做了我通常做的事情并使用tight_layout()。但如下图所示,tight_layout()不可接受地挤压图的宽度:

而不是使用tight_layout(),我想我应该使用手动调整子图subplots_adjust()。下图是带有subplots_adjust(hspace=1.0, wspace=1.0).

结果几乎是正确的,如果稍微调整一下子图之间的空间就会很完美。然而,子图看起来太小,无法充分传达信息。

有没有更好的方法来获得子图之间的适当间距,同时仍然保持纵横比和足够大的子图尺寸?我能想到的唯一可能的解决方案是使用subplots_adjust()具有较大的figsize,但这会导致图形边缘和子图之间存在非常大的空间。

任何解决方案表示赞赏。


因为你所有的轴都有相同的x and y范围,我会选择仅在外部显示刻度标签Axes。对于大小相等的子图的网格,可以使用以下命令轻松实现自动化sharex and sharey的关键词plt.subplots()。当然,如果您设置了 9x9 子图的网格,这会为您提供比您想要的更多的图,但是您可以使冗余图不可见(例如使用Axes.set_visible或完全删除它们。在下面的例子中我选择后者。

from matplotlib import pyplot as plt
import numpy as np

fig, axes = plt.subplots(
    nrows=9, ncols=9, sharex=True, sharey=True, figsize = (8,8)
)

# Color vector for scatter plot points
preds = np.random.randint(2, size=1000)

# Create the scatter plots
for ii in np.arange(0, 9):
    for jj in np.arange(0, 9):
        if (ii > jj):
            ax = axes[ii,jj]
            x = np.random.rand(1000)*100
            y = np.random.rand(1000)*2000
            ax.scatter(x, y, c=preds)
        else:
            axes[ii,jj].remove() ##remove Axes from fig
            axes[ii,jj] = None   ##make sure that there are no 'dangling' references.    

plt.show()

结果图如下所示:

当然,这可以通过类似的东西进一步调整subplots_adjust()。希望这可以帮助。

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

Matplotlib 子图太窄且布局紧凑 的相关文章

随机推荐

  • Android NDK:如何在没有java的情况下重写NativeActivity中的onBackPressed?

    我的应用程序完全使用 C C 编写NativeActivity 它没有 Java 代码 基于 native activity NDK 示例 按 后退 按钮将其关闭 破坏活动 但我需要此按钮的其他行为 因为我有自己的 UI 和菜单 它们通过
  • PHP-按索引范围获取数组记录

    你好呀 是否有任何 PHP 本机函数可以根据索引的开始和结束返回数组中的记录范围 i e array 0 gt a 1 gt b 2 gt c 3 gt d 现在我只想返回索引 1 和 3 b c d 之间的记录 任何想法 你不能这样做吗
  • WPF Flowdocument paragraph.BringIntoView() 不适用于新文档

    我想加载大 rtf 文件并滚动到其中的特定段落 所以我做了这样的事情 private FlowDocument GenerateDocument string path var doc new FlowDocument using File
  • 如何在WPF中绘制可点击的矩形

    我是 WPF 应用程序的绝对初学者 需要一些帮助 我想做的就是从 A 点到 B 点画一个矩形 and能够检测何时单击矩形 因此 当单击它时 它会变成黄色 再次单击时 它会变成红色 有多种方法可以做到这一点 向矩形添加单击处理程序 并从后面的
  • 键入任何 不能符合 Hashable

    我正在使用 Swift 5 7 新功能 并尝试实现一些异构集 我已将代码简化为这个简单的游乐场 protocol Stuff Hashable var identifier String get struct StuffA Stuff le
  • Java字符串数组反转

    我试图反转 java 数组中的所有字符串 但似乎用第一个字符串覆盖了所有字符串 private static void palindrome String s int flag 0 String reverse for int i 0 i
  • 学习如何分析项目

    我刚刚偶然开始为我公司的一个客户 中小企业 分析一个项目 我是一名 Net 开发人员 5 年 在分析软件方面经验很少 来自学校的 UML 我们刚刚结束了与用户两周的交谈 并得到了一份不错的需求清单 显然 我们已经过滤掉了最重要的需求 并且必
  • 使用 fetchedResultsController 删除表视图中的行

    在 swype 删除期间 此方法最重要的几行 void tableView UITableView tableView commitEditingStyle UITableViewCellEditingStyle editingStyle
  • 如何在 ActionScript 3 中获取用户的屏幕分辨率?

    ActionScript 3 有没有办法检测用户的屏幕分辨率 这些会将数字返回到输出窗口 trace Capabilities screenResolutionX trace Capabilities screenResolutionY
  • Netty:如何处理从 ChunkedFile 接收到的块

    我是 netty 新手 我正在尝试将分块文件从服务器传输到客户端 发送块工作得很好 问题在于如何处理接收到的块并将它们写入文件 我尝试的两种方法都会给我带来直接缓冲区错误 任何帮助将不胜感激 Thanks Override protecte
  • 使用 LINQ to Entities 将多条记录插入表的正确方法

    正如我们许多人所做的那样 我设置了一个简单的循环来从数据库添加多个记录 一个典型的例子是这样的 方法一 A list of product prices List
  • 从图像中删除周围的空白

    我有一组从客户那里收到的产品图片 每张产品图片都是某物的照片 并且是在白色背景下拍摄的 我想裁剪图像的所有周围部分 但只保留中间的产品 这可能吗 举个例子 http www 5dnet de media catalog product d
  • Eclipse 如何针对第三方框架进行代码补全?

    How does the Eclipse editor work to enable code completion For example within the XML editor for Hibernate property file
  • 非静态内部类对象不再被引用后会被垃圾回收吗?

    我有一个类似于以下的 spring bean public class MyServiceImpl private MyDAO myDAO public class MyInnerClass implements SomeInterface
  • 如何在 JavaFX 应用程序中显示 HTML

    我正在开发一个 FontViewer 应用程序 它根据所选的字体样式更改文本的字体 这是我的应用程序的控制器类 public class FXMLDocumentController implements Initializable FXM
  • 使用动作脚本获取IP地址?

    是否可以通过Flash swf Action Script 3获取客户端IP地址 然后将其传递到php文件以将其存储在数据库中 无需在 Flash 中执行此操作 只需在服务器上的 php ip REMOTE ADDR 中执行此操作即可
  • 为什么调试器内存窗口在 VS 2015 中不可用?

    Visual Studio 调试器具有这些内存窗口 用于检查原始内存 在 Visual Studio 2015 中 这些仍然存在 因为存在关联的命令 好吧 文档也是这么说的 然而他们并没有出现 在菜单中 调试 gt Windows gt 没
  • 为什么 django 会忽略来自线路的 HTTP_X_FORWARDED_PROTO 但在测试中却不会?

    如果 HTTP X FORWARDED PROTO 通过网络传输 为什么 django 会忽略它 我在 settings xml 中添加了以下配置 make sure we know when we are secure when we a
  • Java 中的字符串连接和自动装箱

    当您将 String 与 int 等原语连接起来时 autobox价值第一 ex String string Four 4 它如何将值转换为字符串Java 要查看 Java 编译器生成的内容 使用它总是有用的javap c显示实际生成的字节
  • Matplotlib 子图太窄且布局紧凑

    我目前正在尝试使用 GridSpec 在 Matplotlib Python 3 6 Matplotlib 2 0 0 中绘制许多子图 这是最小的工作示例 import matplotlib pyplot as plt from matpl