2017-02-16 4 views
0

Ich versuche derzeit, zu Python zu wechseln. Im Moment versuche ich ein Diagramm zu reproduzieren, das ich mit gnuplot (das Diagramm von gnuplot ist angehängt) in python gezeichnet habe. Image plotted with gnuplot Wenn ich jedoch versuche, etwas ähnliches mit Python zu tun, ist meine Handlung komplett schwarz. Ich habe ähnliche Probleme untersucht und pcolormesh und imshow versucht. Beides zum selben Ergebnis. Es gibt jedoch keine Fehlermeldung. Hier ist mein minimales Codebeispiel:Wie wird eine Funktion als Heatmap in Python dargestellt?

`

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() 

Wahrscheinlich, ich bin einige Anfänger Fehler machen. Aber ich bin sehr dankbar, wenn mir jemand darauf hinweisen könnte. Danke im Voraus.

+2

Schauen Sie sich die Werte von 'm' und' p' an. Ich denke, sie sind nicht, was du denkst. – Goyo

+0

Stimmen Sie mit @Goyo überein. m und p scheint leer zu sein. np.arrange (Start, Ende, Schritt) –

Antwort

0

Check out numpy.arrange

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

Schritt: Zahl, optional

Abstand zwischen Werten. Für jeden Ausgang ist dies der Abstand zwischen zwei benachbarten Werten, out [i + 1] - out [i]. Die Standardschrittweite ist 1. Wenn Schritt angegeben ist, muss auch start angegeben werden.

Also np.arange(0.0,10.0,100.0) entspricht [0].

Und ich denke, das ist vielleicht Sie wollen:

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() 

Und Sie erhalten:

Hoffnung, das hilft.

+0

Sie können auch plt.pcolormesh (X, Y, Z, Schattierung = 'Gouraud') verwenden, um zu interpolieren und Ihren Plot glatt zu machen, wie in Abbildung aus der Frage. –

+0

Vielen Dank! Das war wirklich ein Anfängerfehler von mir. Ich nahm an, dass es genauso funktionierte wie in Matlab. Also danke, dass du es aufgezeigt hast, – Jofro

Verwandte Themen