Получение правильной метки осей в imshow в python

Я использую следующий код для создания некоторых контурных графиков,

from pylab import meshgrid,cm,imshow,contour,clabel,colorbar,axis,title,show
import numpy as np
from numpy import exp,arange
import matplotlib.pyplot as plt

def z_func(x,y):
    func = 3.0*(1.0 - x)**2*np.exp(-x**2 - (y+1.0)**2) - 10.0*(x/5.0 - x**3 - y**5)*np.exp(-x**2 - y**2) - 0.33*np.exp(-(x + 1.0)**2 - y**2)
    return func


x = arange(-4.0,4.0,0.1)
y = arange(-4.0,4.0,0.1)
X,Y = meshgrid(x, y) # grid of point
Z = z_func(X, Y)

fig = plt.figure(figsize=(10,6))
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('peaks function')
show()

Я украл его где-то на StackExchange. Мне трудно просто заставить оси x и y отображать правильные домены, [-4,4]. Уже опубликовано несколько решений, которые мне не подходят, например Изменить значения на оси графика matplotlib imshow() и исправление осей с помощью imshow, но не сохраняйте изображение таким, какое оно есть, и не переименовывайте оси. Помощь!!!


person superhero    schedule 13.06.2016    source источник
comment
Этот код не работает. Вы просто хотите установить ограничения по осям для imshow?   -  person Serenity    schedule 13.06.2016
comment
Код работает для меня. Я забыл свой импорт ... позвольте мне вставить сейчас. Я хочу, чтобы оси отражали фактические границы моих входных переменных, [-4,4]   -  person superhero    schedule 13.06.2016


Ответы (1)


Попробуйте этот код, вы должны установить ограничения в обеих функциях contour и imshow, как это сделал я:

import matplotlib.pylab as plt
import numpy as np

x = np.arange(-4.0,4.0,0.1)
y = np.arange(-4.0,4.0,0.1)
X,Y = np.meshgrid(x, y) # grid of point
Z = X**2. * np.sin(Y)

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

введите здесь описание изображения

В вашем коде есть проблема: Z должен быть двумерным массивом, но z_fun_optimization(x) получает только один аргумент.

person Serenity    schedule 13.06.2016
comment
Ошибка вырезания и вставки. Моя вина :-0. Обновленный код есть. Это сделало это, хотя! Я забыл также указать аргумент extent в аргументе контура. Спасибо! - person superhero; 13.06.2016