【问题标题】:Is it possible to unclutter a graph that uses seconds on x-axis in matplotlib是否可以整理 matplotlib 中 x 轴上使用秒数的图形
【发布时间】:2013-04-01 16:40:14
【问题描述】:

我有一个数据集,其日期时间有时包含以秒为单位的差异。

我将日期时间(在 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 之间的空格可以压缩吗?

【问题讨论】:

  • 这是第二个问题的答案:stackoverflow.com/questions/5656798/…
  • 你试过什么?如果我们有一些现有的代码可供使用,您会得到更好的答案。
  • 我已更新我的问题以包含示例代码。
  • 你为什么不把它做成三个独立的图表呢?
  • 我不确定如何将其拆分为“三个单独的图表”。你能详细谈谈?目前,我正在尝试将所有点显示在一个图表上,有点像时间轴上的系统概览。

标签: python graph matplotlib


【解决方案1】:

你基本上是在要求一些不可能的事情,你不能同时看到一个天的范围在保持 x 轴线性的同时有几秒钟的明显差异。如果你想试试这个,你可以这样做(doc)

fig.set_size_inches(1000, 2, forward=True)

这将使您的身材有 1000 英寸宽和 2 英寸高,但这样做相当笨拙。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-28
    • 2021-06-18
    • 2017-08-23
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    相关资源
    最近更新 更多