是否可以整理在matplotlib中使用x轴上的秒数的图形

时间:2013-04-01 16:40:15

标签: python graph matplotlib

我有一个数据集,其日期时间有时包含秒数差异。

我有垂直显示的日期时间(在x轴上),希望文本不会相互重叠,但从它的外观来看,它们实际上是相互叠加的。我认为这是因为我的数据在几秒钟内有所不同,日期可以在不同的日期范围内进行,因此x轴非常紧凑。另一个问题是图表上的数据点也是重叠的,因为它们之间的距离太紧了。

这是一个示例集(已使用date2num()转换)。它在几秒钟内有所不同,但跨越了几天:

dates = [734949.584699074, 734959.4604050926, 734959.4888773148, 734949.5844791667, 734959.037025463, 734959.0425810185, 734959.0522916666, 734959.4607060185, 734959.4891435185, 734949.5819444444, 734959.0348726852, 734959.0390393519, 734959.0432175926, 734959.0515393518, 734959.4864814815, 734949.5842476852, 734959.0367476852, 734959.038125, 734959.0423032407, 734959.052025463, 734959.4603819444, 734959.4895023148, 734949.5819791667, 734959.0348958333, 734959.0390740741, 734959.0432407408, 734959.0515856481, 734959.4579976852, 734959.487175926]

values =  [39, 68, 27, 57, 22, 33, 70, 19, 60, 53, 52, 33, 87, 63, 78, 34, 26, 42, 24, 97, 20, 1, 32, 60, 61, 48, 30, 48, 17]

dformat = mpl.dates.DateFormatter('%m-%d-%Y %H:%M:%S')
figure = plt.figure()
graph = figure.add_subplot(111)
graph.xaxis.set_major_formatter(dformat)
plt.xticks(rotation='vertical')
figure.subplots_adjust(bottom=.35)
graph.plot_date(dates,values)
graph.set_xticks(dates)
plt.show()

我有两个问题:

  • 有没有办法在x轴上创建一个间距,这样我才能清楚地看到文字和数据点?这将导致一个非常长的水平图,但我会将其保存到图像文件。

  • 与第一个问题有关:为了减少图形的水平长度,有没有办法压缩x轴上的刻度线,以便缩短没有数据的区域?

    例如,如果我们有三个带有值的日期:

     March 22 2013 23:11:04        55
    
     March 22 2013 23:11:10        70
    
     April 1 2013 10:43:56         5
    

    是否可以在3月22日23:11:10和2013年4月1日1:43:56之间缩小空格?

1 个答案:

答案 0 :(得分:0)

你基本上要求一些不可能的东西,你不能同时看到的几天之间的差异,同时保持x轴线性。如果您想尝试此操作,可以执行(doc)

之类的操作
fig.set_size_inches(1000, 2, forward=True)

这将使你的身高1000英寸,高2英寸,但这样做相当笨拙。

我认为你应该做的是将Dermen的链接(Python/Matplotlib - Is there a way to make a discontinuous axis?)应用到您的数据中断的任何地方。最终会有多个部分,每个部分都有几秒钟宽,这样可以提供足够的刻度标签空间。