2017-12-02 4 views
0

Dies ist mein Code zum Zeichnen eines Graphen mit Residuen; Allerdings habe ich meine Tick-Nummern auf der X-Achse verloren und weiß nicht, wie ich sie zurückbekomme ... Jede Hilfe wäre sehr willkommen. Und wenn die Formatierung dieses Threads falsch ist, ist es meine erste.Ich habe die Zahlen auf den X-Ticks meiner Grafik verloren, wie bekomme ich sie zurück?

Code:

pyplot.figure() 

fig1 = plt.figure(1) 

frame1=fig1.add_axes((.1,.3,.8,.6)) 

pyplot.errorbar(xval, yval, yerr=yerr, xerr=xerr, marker='o',markersize = 2, linestyle='None', color = 'black') 

# Axis labels 
pyplot.xlabel(' Height (m)') 

pyplot.ylabel('Mass per second (kg.s-1)') 

# Generate best fit line using model function and best fit parameters, and add to plot 
fit_line=model_funct(xval, [a_soln, b_soln]) 

# Theoretical line 
x = np.array(arange(0.07,0.15, 0.001)) 

y = (-2.61049E-05) + (0.005815772)*x 

plt.plot(x, y, linestyle = '--', color ='r',linewidth = 0.7, label = 'Theoretical') 

# Experimental line 
s = (-4.43329E-05) + (0.006008837)*x 

pyplot.plot(x, s,linewidth = 0.7, color = 'black', label = 'Experimental Chi Squared Fit') 

# Set suitable axis limits: you will probably need to change these... 
pyplot.xlim(0.08, 0.14) 

pyplot.ylim(0.0004, 0.0008) 

pyplot.legend(loc = 'upper left',prop={'size':10}) 

frame2=fig1.add_axes((.1,.1,.8,.2)) 

difference = y - s 

pyplot.plot(x, difference, color = 'black') 

frame2.set_ylabel('Residual') 

plt.xlabel('Height (m)') 

plt.yticks(numpy.arange(-0.000010, 0.000010, 0.00001)) 

plt.xticks(numpy.arange(0.08, 0.14, 0.01)) 

pyplot.ylim(-0.000010, 0.000010) 

pyplot.xlim(0.08,0.14) 

pyplot.grid() 


pyplot.show() 
+0

Es wäre hilfreich, wenn Sie ein kleines Beispiel dafür, Arbeitscode (https://stackoverflow.com/help/mcve) Der von Ihnen bereitgestellte Code wird mit Formatierungen gemischt, enthält keine 'import' Anweisungen und verweist auf undefinierte Variablen wie' xval'. – Gus

Antwort

0

Statt Zeichnungsrahmen betrachten Nebenhandlungen stattdessen verwenden. Wie ich aus dem Code ersehen kann, versuchen Sie Subplots mit unterschiedlichen Höhenverhältnissen zu haben. Es gibt bessere Möglichkeiten, dies zu tun, zum Beispiel mit gridspec:

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.gridspec as gridspec 


fig = plt.figure() 
gs = gridspec.GridSpec(2, 1, height_ratios=[4, 1]) 
ax1 = plt.subplot(gs[0, 0]) 
plt.errorbar(xval, yval, yerr=yerr, xerr=xerr, marker='o', markersize = 2, linestyle='None', color='black') 
#Axis labels 
ax1.set_xlabel(' Height (m)') 
ax1.set_ylabel(r'Mass per second (kg$\cdot$s$^{-1}$)') 
#Generate best fit line using model function and best fit parameters, and add to plot 
fit_line=model_funct(xval, [a_soln, b_soln]) 
#Theoretical line 
x = np.arange(0.07, 0.15, 0.001) 
y = (-2.61049E-05) + (0.005815772)*x 
ax1.plot(x, y, linestyle = '--', color ='r',linewidth = 0.7, label = 'Theoretical') 

#Experimental line 
s = (-4.43329E-05) + (0.006008837)*x 
ax1.plot(x, s,linewidth = 0.7, color = 'black', label = 'Experimental Chi Squared Fit') 

#Set suitable axis limits: you will probably need to change these... 
ax1.set_xlim(0.08, 0.14) #redundant by adding "sharex=ax1" 4 lines blelow 
ax1.set_ylim(0.0004, 0.0008) 
ax1.legend(loc = 'upper left',prop={'size':10}) 

ax2 = plt.subplot(gs[1, 0], sharex=ax1) 

difference = y - s 

plt.plot(x, difference, color = 'black') 

ax2.set_ylabel('Residual') 

ax2.set_xlabel('Height (m)') 

ax2.set_yticks(np.arange(-0.000010, 0.000010, 0.00001)) 
ax2.set_xticks(np.arange(0.08, 0.14, 0.01)) 

ax2.set_ylim(-0.000010, 0.000010) 
ax2.set_xlim(0.08,0.14) 

ax2.grid() 
plt.tight_layout() 
plt.show() 

Ich habe auch eine gewisse Einheitlichkeit in der Art und Weise hinzugefügt Sie verwenden pyplot und plt und entfernt einige Redundanzen. Bitte gehen Sie den Code nebeneinander durch, um Änderungen zu sehen.

Um Ihre Frage zu beantworten, verstecken sich Ihre X-Achsen-Tick-Nummern hinter dem unteren Rahmen. Da Sie für den oberen Rahmen 0.8 und für den unteren Rahmen 0.2 Höhenverhältnisse eingestellt haben, ist kein Platz für Xticks mehr.

Hier ist zumindest etwas zu tun.

enter image description here

0

Die untere "Achsen" (die "subplot" in der Figur) bedeckt über die x-Etikett der Achsen auf.

Sie sie wieder auf den Grund sehen können, indem Achsen kleines

Verwenden Linie frame2=fig1.add_axes((.1,.1,.8,.1)). (Beachten Sie, dass die .2 jetzt .1 ist

Ihr Code nicht ausgeführt eigenständig, aber das ist wahrscheinlich in etwa, was Sie nach. enter image description here

Verwandte Themen