2017-02-16 7 views
0

Я сейчас пытаюсь переключиться на python. На данный момент я пытаюсь воспроизвести график, построенный с помощью gnuplot (сюжет из gnuplot прилагается) в python. Image plotted with gnuplot Однако, когда я пытаюсь сделать что-то подобное с python, мой сюжет полностью черный. Я посмотрел на подобные проблемы и попробовал pcolormesh и imshow. И к тому же результату. Однако сообщение об ошибке отсутствует. Вот мой минимальный пример кода:Как построить функцию как тепловую карту в python?

`

import numpy as np 

import matplotlib.pyplot as plt 


def f(m,p): 
    return ((m-1)**2*(1-p)*p)/(1+(m-1)*p)**2 

m = np.arange(0.0,10.0,100.0) 

p = np.arange(0.0,0.1,1.0) 

X,Y = np.meshgrid(m, p) 

Z =f(X,Y) 

plt.pcolormesh(X,Y,Z) 

plt.show() 

Возможно, я делаю некоторые начинающих ошибку. Но я очень благодарен, если кто-нибудь может указать мне на это. Заранее спасибо.

+2

Посмотрите на значения 'm' и' p'. Я думаю, они не то, что вы думаете. – Goyo

+0

Согласен с @Goyo. m и p кажется пустым. np.arrange (начало, конец, шаг) –

ответ

0

Заканчивать numpy.arrange

numpy.arange([start, ]stop, [step, ]dtype=None) 

шаг: номер, дополнительный

Расстояние между значениями. Для любого выхода это расстояние между двумя смежными значениями, out [i + 1] - out [i]. Размер шага по умолчанию равен 1. Если задан шаг, также необходимо указать запуск.

So np.arange(0.0,10.0,100.0) равно [0].

И я думаю, может быть, это вы хотите:

import numpy as np 
import matplotlib.pyplot as plt 

def f(m,p): 
    return ((m-1)**2*(1-p)*p)/(1+(m-1)*p)**2 
m = np.arange(0.0,100.0,10.0) 
p = np.arange(0.0,1.0,0.1) 

X,Y = np.meshgrid(m, p) 
Z =f(X,Y) 
plt.pcolormesh(X,Y,Z) 
plt.show() 

И вы получите:

Надеется, что это помогает.

+0

Кроме того, вы можете использовать plt.pcolormesh (X, Y, Z, shading = 'gouraud') для интерполяции и сделать ваш график гладким, как на рисунке, из вопроса. –

+0

Спасибо большое! С моей стороны это была ошибка новичка. Я предположил, что это сработало так же, как и в Matlab. Поэтому спасибо, что указали это, – Jofro