2017-05-20 3 views
0

Ich habe eine Reihe von PDF, die ich für einen bestimmten Abschnitt der PDF-Domäne plotten muss. Allerdings, wenn ich meine Linien auf einem 3D-Plot plotten ich Schwänze für jede PDF erhalten,Trim Daten außerhalb 3D Plot in Matplotlib

enter image description here

Gibt es eine saubere Art und Weise nicht die Schwänze plotten, die außerhalb meiner Handlung Grenzen passieren? Ich weiß, dass ich die Daten in NaNs ändern kann, um den gleichen Effekt zu erzielen, aber ich möchte dies in Matplotlib tun. Hier ist meine aktuelle Problemumgehung Code,

`# trim the data 
y = np.ones(PDF_x.shape)*PDF_x 
y[y>95]= np.nan 
y[y<75]= np.nan 


# plot the data 
fig = plt.figure() 
ax = fig.gca(projection='3d') 
for i in range(PDF_capacity.shape[1]): 
    ax.plot(life[i]*np.ones((PDF_x.shape)),y,PDF_capacity[:,i], label='parametric curve') 

# set the axis limits 
ax.set_ylim(75,95) 

# add axis labels 
ax.set_xlabel('charge cycles to failure point of 75% capacity') 
ax.set_ylabel('capacity at 100 charge cycles') 
ax.set_zlabel('probability')` 

Nach dem Trimmen kann ich die folgende Handlung machen,

enter image description here

+0

Gibt es irgendwelche Ploteigenschaften, die die aufgetragenen Daten begrenzen? Wie Xlim oder Ylim? – wwii

+2

Ich sehe keinen Grund, die Maskierung nicht mit 'nan's zu verwenden, die Sie bereits haben (' y [y> 95] = np.nan'). "Ich will" ist kein sehr gutes Argument, um jemanden dazu zu bringen, sich stark für etwas einzusetzen, das bereits eine rückstandsfreie Einstrichlösung hat. – ImportanceOfBeingErnest

+0

Ich verwende 'ax.set_ylim (75,95)', um den Plot auf die angegebenen Grenzen zu beschränken, jedoch werden dadurch die Daten nicht zwischen diesen Grenzwerten abgeschnitten. –

Antwort

1

Maskierung der Daten mit nan in der Art und Weise sind Sie es tun, ist eine gute und praktische Lösung.

Da 3D-Plots von matplotlib Projektionen in 2D-Raum sind, wäre es schwierig, automatisches Clipping zu implementieren. Obwohl ich es für möglich halte, bin ich nicht davon überzeugt, dass es sich lohnt. Erstens, weil Sie verschiedene Arten von Plots unterschiedlich behandeln müssten, zweitens, weil es zumindest in einigen Fällen wahrscheinlich wäre, dass das Maskieren der Daten immer noch die beste Wahl ist. Jetzt ist es wahrscheinlich zu viel zu tun, eine komplexe Unterklassenbildung für die Plotobjekte zu machen, nur um dasselbe zu tun, was manuell in einer oder zwei Zeilen erledigt werden kann.

Meine klare Empfehlung wäre daher, die Lösung zu verwenden, die Sie bereits haben. Zumal es bisher keine Nachteile zu haben scheint.