<p>非常感谢大家的帮助,用你们的回答我得到了下面的代码。(我意识到它可能会改进,但很高兴它起作用了,我现在可以查看数据:)</p>
<pre><code>valuesShouldPlot = ['0.25','0.5','1.0','2.0','5.0','10.0','20.0','30.0','60.0','120.0','300.0','600.0','1200.0','1800.0','2400.0','3000.0','3600.0','7200.0','10800.0','14400.0','18000.0','21600.0','25200.0','28800.0']
for xDate, group in myDataframe.groupby("Date"): ## for each date
graphFilename = (basename+'_' + str(xDate) + '.png') ## make up a suitable filename for the graph
plt.figure(graphFilename)
group.boxplot(by=["SamplePeriod_seconds"], sym='g+', return_type='both') ## create box plot, (boxplots are placed in default positions)
## get information on where the boxplots were placed by looking at the values on the x-axis
axes = plt.gca()
checkXticks= axes.get_xticks()
numOfValuesPlotted =len(checkXticks) ## check how many boxplots were actually plotted by counting the labels printed on the x-axis
lengthValuesShouldPlot = len(valuesShouldPlot) ## (check how many boxplots should have been created if no data was missing)
if (numOfValuesPlotted < valuesShouldPlot): ## if number of values actually plotted is less than the maximum possible it means some values are missing
## if that occurs then want to move the plots across accordingly to leave gaps where the missing values should go
labels = [item.get_text() for item in axes.get_xticklabels()]
i=0 ## counter to increment through the entire list of x values that should exist if no data was missing.
j=0 ## counter to increment through the list of x labels that were originally plotted (some labels may be missing, want to check what's missing)
positionOfBoxesList =[] ## create a list which will eventually contain the positions on the x-axis where boxplots should be drawn
while ( j < numOfValuesPlotted): ## look at each value in turn in the list of x-axis labels (on the graph plotted earlier)
if (labels[j] == valuesShouldPlot[i]): ## if the value on the x axis matches the value in the list of 'valuesShouldPlot'
positionOfBoxesList.append(i) ## then record that position as a suitable position to put a boxplot
j = j+1
i = i+1
else : ## if they don't match (there must be a value missing) skip the value and look at the next one
print("\n******** missing value ************")
print("Date:"),
print(xDate),
print(", Position:"),
print(i),
print(":"),
print(valuesShouldPlot[i])
i=i+1
plt.close() ## close the original plot (the one that didn't leave gaps for missing data)
group.boxplot(by=["SamplePeriod_seconds"], sym='g+', return_type='both', positions=positionOfBoxesList) ## replot with boxes in correct positions
## format graph to make it look better
plt.ylabel('Average distance (m)', fontsize =8)
plt.xlabel('GPS sample interval (s)', fontsize=8)
plt.tick_params(axis='x', which='major', labelsize=8)
plt.tick_params(axis='y', which='major', labelsize=8)
plt.xticks(rotation=90)
plt.title(str(xDate) + ' - ' + 'Average distance travelled by cattle over 24 hour period', fontsize=9) ## put the title above the first subplot (ie. at the top of the page)
plt.suptitle('')
axes = plt.gca()
axes.set_ylim([0,30000])
## save and close
plt.savefig(graphFilename)
plt.close()
</code></pre>