【数据展示】matplotlib子图设置子标题(subtitle for subplot)

13 篇文章 0 订阅

简述

这个操作很常用。用于做对比区分

代码范式:

ax.set_title(str)

但是结合相对应的子图的设计却有多种的操作方式。比如 实例2,实例3

其中实例2的例子当中,不能将nrows改成10(虽然不知道为什么)。

  • 实例1和实例2比较适用于特殊的情况(如果行或者列超过10第一方法就不太好了,但是第二种方法就可行)
  • 实例3会更加灵活。(推荐使用

实例1

这里写图片描述

import matplotlib.pyplot as plt
import numpy as np
plt.figure(figsize=(6, 6.5))
for i in range(4):
    ax = plt.subplot(221+i)
    alpha = 0.98 / 4 * i + 0.01
    ax.set_title('%.3f' % alpha)
    t1 = np.arange(0.0, 1.0, 0.01)
    for n in [1, 2, 3, 4]:
        plt.plot(t1, t1 ** n, label="n=%d" % n)
    leg = plt.legend(loc='best', ncol=4, mode="expand", shadow=True)
    leg.get_frame().set_alpha(alpha)

plt.savefig('1.png')
plt.show()

实例2

CIFAR10为例:

导入包

import torch
import torchvision
import os
from torch.utils.data import Dataset, DataLoader
import torchvision.utils as vutils
import numpy as np 
import matplotlib.pyplot as plt
import pickle

下载并加载数据

DOWNLOAD_CIFAR10 = False
cifar10_root = './cifar10/'
if not (os.path.exists(cifar10_root)) or not os.listdir(cifar10_root):
    # not mnist dir or mnist is empyt dir
    DOWNLOAD_CIFAR10 = True
train_data = torchvision.datasets.CIFAR10(
    root=cifar10_root,
    train=True,  # this is training data
    transform=torchvision.transforms.ToTensor(),  # Converts a PIL.Image or numpy.ndarray to
    # torch.FloatTensor of shape (C x H x W) and normalize in the range [0.0, 1.0]
    download=DOWNLOAD_CIFAR10,
)
train_loader = DataLoader(dataset=train_data, batch_size=100, shuffle=True)
with open('./cifar10/cifar-10-batches-py/batches.meta', 'rb') as f:
    data = pickle.load(f)

调用数据

在这里插入图片描述

for step, (x, y) in enumerate(train_loader):
    print(x.shape, y.shape)
    print(y)
    fig = plt.figure(figsize=(10, 10))
    fig, axs = plt.subplots(nrows=1, ncols=10, figsize=(10, 1.5))
    for i in range(10):
        ax = axs[i]
        ax.axis("off")
        ax.set_title(data['label_names'][y[i]])
        ax.imshow(np.transpose(x[i].numpy(), (1, 2, 0)))
    plt.savefig('cifar-10.png')
    plt.show()
    break

实例3

前面的步骤和实例2一模一样,就不重复了。

调用数据
在这里插入图片描述

注意plt.axis()不可以拿出到循环外面来。

for step, (x, y) in enumerate(train_loader):
    print(x.shape, y.shape)
    print(y)
    fig = plt.figure(figsize=(20, 20))
    for i in range(100):
        ax = plt.subplot(10, 10, i+1)
        plt.axis("off")
        ax.set_title(data['label_names'][y[i]])
        plt.imshow(np.transpose(x[i].numpy(), (1, 2, 0)))
    plt.savefig('cifar-100.png')
    plt.show()
    break

效果类似于:

for step, (x, y) in enumerate(train_loader):
    print(x.shape, y.shape)
    print(y)
    fig = plt.figure(figsize=(20, 20))
    for i in range(100):
        ax = plt.subplot(10, 10, i+1)
        ax.axis("off")
        ax.set_title(data['label_names'][y[i]])
        plt.imshow(np.transpose(x[i].numpy(), (1, 2, 0)))
    plt.savefig('cifar-100.png')
    plt.show()
    break

在这里插入图片描述

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肥宅_Sean

公众号“肥宅Sean”欢迎关注

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值