<p>{cd1>在默认情况下,{cd1>只绘制连续轴上的位置。遗漏的数据被忽略了,仅仅是因为箱线图不知道它们丢失了。但是,可以使用<code>positions</code>参数手动设置框的位置。
下面的示例执行此操作,因此即使缺少值,也会生成相等范围的绘图。在</p>
<pre><code>import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
basename = __file__+"_plot"
Nd = 4 # four different dates
Ns = 5 # five second intervals
N = 80 # each 80 values
date = []
seconds = []
avgdist = []
# fill lists
for i in range(Nd):
# for each date, select a random SamplePeriod to be not part of the dataframe
w = np.random.randint(0,5)
for j in range(Ns):
if j!=w:
av = np.random.poisson(1.36+j/10., N)*4000+1000
avgdist.append(av)
seconds.append([j]*N)
date.append([i]*N)
date = np.array(date).flatten()
seconds = np.array(seconds).flatten()
avgdist = np.array(avgdist).flatten()
#put data into DataFrame
myDataframe = pd.DataFrame({"Date" : date, "SamplePeriod_seconds" : seconds, "avgdist" : avgdist})
# obtain a list of all possible Sampleperiods
globalunique = np.sort(myDataframe["SamplePeriod_seconds"].unique())
for i, group in myDataframe.groupby("Date"):
graphFilename = (basename+'_' + str(i) + '.png')
fig = plt.figure(graphFilename, figsize=(6,3))
axes = fig.add_subplot(111)
plt.grid(True)
# omit the `dates` column
dfgroup = group[["SamplePeriod_seconds", "avgdist"]]
# obtain a list of Sampleperiods for this date
unique = np.sort(dfgroup["SamplePeriod_seconds"].unique())
# plot the boxes to the axes, one for each sample periods in dfgroup
# set the boxes' positions to the values in unique
dfgroup.boxplot(by=["SamplePeriod_seconds"], sym='g+', positions=unique, ax=axes)
# set xticks to the unique positions, where boxes are
axes.set_xticks(unique)
# make sure all plots share the same extent.
axes.set_xlim([-0.5,globalunique[-1]+0.5])
axes.set_ylim([0,30000])
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.suptitle(str(i) + ' - ' + 'Average distance travelled by cattle over 24 hour period', fontsize=9)
plt.title("")
plt.savefig(graphFilename)
plt.close()
</code></pre>
<p><a href="https://i.stack.imgur.com/8IW7k.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/8IW7k.png" alt="enter image description here"/></a><br/>
<a href="https://i.stack.imgur.com/CU1Wq.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/CU1Wq.png" alt="enter image description here"/></a></p>
<p>如果<code>SamplePeriod_seconds</code>列中的值不是等间距的,这仍然有效,但是如果它们相差很大,这将不会产生好的结果,因为这些条会重叠:</p>
<p><a href="https://i.stack.imgur.com/DitIY.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/DitIY.png" alt="enter image description here"/></a></p>
<p>然而,这并不是绘图本身的问题。为了得到进一步的帮助,我们需要知道你期望图的结尾是什么样子。在</p>