在matplotlib中缩小图?

时间:2019-05-19 23:37:40

标签: python-3.x matplotlib 3d

我是python和matplotlib的新手。 我在下面从此站点查看给定的示例: https://glowingpython.blogspot.com/2012/01/how-to-plot-two-variable-functions-with.html 因为我希望根据模型的学习率和时期数来找到最佳准确性。 但是当我使用它时,它缩小为一个小尺寸的图表。 如何使其保持尺寸? 该示例和我的更改如下。

示例:

from numpy import exp, arange
from pylab import meshgrid, cm, imshow, contour, clabel, colorbar, axis, title, show


# the function that I'm going to plot
def z_func(x, y):
    return (1 - (x ** 2 + y ** 3)) * exp(-(x ** 2 + y ** 2) / 2)


x = arange(-3.0, 3.0, 0.1)
y = arange(-3.0, 3.0, 0.1)
X, Y = meshgrid(x, y)  # grid of point
Z = z_func(X, Y)  # evaluation of the function on the grid

im = imshow(Z, cmap=cm.RdBu)  # drawing the function
# adding the Contour lines with labels
cset = contour(Z, arange(-1, 1.5, 0.2), linewidths=2, cmap=cm.Set2)
clabel(cset, inline=True, fmt='%1.1f', fontsize=10)
colorbar(im)  # adding the colobar on the right
# latex fashion title
title('$z=(1-x^2+y^3) e^{-(x^2+y^2)/2}$')
show()

我的更改:

from numpy import exp, arange
from pylab import meshgrid, cm, imshow, contour, clabel, colorbar, axis, title, show
import random

# the function that I'm going to plot
def z_func(x, y):
    return (x * y * random.random())


x = arange(0.001, 1.001, 0.001)
y = arange(1.0, 101.0, 1.0)
X, Y = meshgrid(x, y)  # grid of point
Z = z_func(X, Y)  # evaluation of the function on the grid

im = imshow(Z, cmap=cm.RdBu)  # drawing the function
# adding the Contour lines with labels
cset = contour(Z, arange(-1, 1.5, 0.2), linewidths=2, cmap=cm.Set2)
clabel(cset, inline=True, fmt='%1.1f', fontsize=10)
colorbar(im)  # adding the colobar on the right
# latex fashion title
title('title')
show()

1 个答案:

答案 0 :(得分:0)

与官方示例不同,由于x和y轴的范围不同,它会缩小。要获得正方形imshow,您需要调整纵横比。可以按照here

的步骤进行操作
import numpy as np
import matplotlib.pyplot as plt
import random

def z_func(x, y):
    return (x * y * random.random())

x = np.arange(0.001, 1.001, 0.001)
y = np.arange(1.0, 101.0, 1.0)
X, Y = np.meshgrid(x, y)  # grid of point
Z = z_func(X, Y)  # evaluation of the function on the grid

# Compute aspect ratio
dx = (x.max()-x.min()) / X.shape[0]
dy = (y.max()-y.min()) / X.shape[1]
dx_dy = dy/dx

im = plt.imshow(Z, cmap=cm.RdBu, aspect=dx_dy)  # drawing the function
cset = plt.contour(Z, np.arange(-1, 1.5, 0.2), linewidths=2, cmap=cm.Set2)
plt.clabel(cset, inline=True, fmt='%1.1f', fontsize=10)
plt.colorbar(im)  # adding the colobar on the right
plt.title('title')
plt.show()

enter image description here