2017-02-09 96 views
0

我在GUI中有一個圖形,該圖形通過點擊按鈕打開。它從一個不斷更新的csv文件打開,因此在開始時進行計數,我想限制x軸的條目數。MatPlotLib帶有日期的X軸

但是,這條陰謀對四條線有效,我一直無法改進x軸,我想要做的是;

  1. 旋轉字體
  2. 刪除尾隨零的日期
  3. 可能更改日期格式,以DMY H:M

下面的腳本是我到目前爲止有:

def open_graph(): 
    import numpy as np 
    import matplotlib.pyplot as plt 
    import datetime as dt 
    from dateutil import parser 
    from csv import reader 
    with open('Voltage_Readings.csv','r') as f: 
     data = list(reader(f)) 

    file=open('Voltage_Readings.csv') 
    numlines=(len(file.readlines())-1) 
    start=numlines-100 
    end=numlines 

    fig=plt.figure() 
    ax=plt.subplot(111) 

    DTG = [parser.parse(i[1]) for i in data[start:end]] 
    Battery_Level = [i[2] for i in data[start:end]] 
    Gene_Supply = [i[3] for i in data[start:end]] 
    Solar_Supply = [i[4] for i in data[start:end]] 
    Wind_Supply = [i[5] for i in data[start:end]] 

    plt.plot(DTG, Battery_Level,'-r', label='Battery') 
    plt.plot(DTG, Gene_Supply,'-y', label='Gene') 
    plt.plot(DTG, Solar_Supply,'-b', label='Solar') 
    plt.plot(DTG, Wind_Supply,'-g', label='Wind') 

    box = ax.get_position() 
    ax.set_position([box.x0, box.y0, box.width *0.85, box.height]) 
    ax.legend(bbox_to_anchor=(1, 1),loc=2) 

    plt.title('VOLTAGE MEASUREMENTS FROM POWER SOURCES') 
    plt.xlabel('Time') 
    plt.ylabel('Voltage') 

    plt.show() 

我希望任何幫助都能夠實現這一點,因爲我仍然在學習。

回答

0

這是一個更好的答案:

您plt.show前只需添加這()命令:

fig.autofmt_xdate() 
import matplotlib.dates as mdates 
ax.fmt_xdata = mdates.DateFormatter('%d-%m-%Y %H:%M') 
datetimefmt = mdates.DateFormatter("%d-%m-%Y %H:%M") 
ax.xaxis.set_major_formatter(datetimefmt) 

運行autofmt_xdate使傾斜的日期。 設置ax.fmt_xdata將鼠標懸停在某個點上時設置日期格式。 正在運行ax.xaxis.set_major_formatter在x軸上設置日期格式。

有趣的是,在我自己的matplotlib代碼中,我已經在x軸上完成了自己的日期格式,因爲我沒有意識到這些自動格式化功能。我將不得不修改我的代碼以使用matplotlib中已有的代碼。

鮑比

+0

@bobbydurrettdba,感謝您的意見,但我似乎無法得到它的工作。我從csv讀取的腳本看起來並不喜歡那條線。如果你不介意可以看看我的csript,讓我知道它需要去哪裏,或者如果我需要添加其他東西。我也不太確定如何將xnames配置爲我想要的格式的日期。 – user7524882

+0

對不起,我不是很清楚。它看起來像DTG是代碼中的日期和時間列表。在我的代碼中,我的日期和時間列表位於名爲xnames的變量中。我想如果你想改變你的日期,只需從DTG中創建一個新的列表,將每個元素修改爲你想要的長度和你想要的格式。 xticks以rotateation = angle作爲參數,這就是我沿着我的x軸旋轉日期的方式。 xticks的第一個參數是標籤的x值列表,第二個參數是標籤列表。 –

+0

我編輯了我的答案。 Matplotlib有一些很好的內置日期格式,在此之前我不知道。 –