Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带日期的MatPlotLib X轴_Python_Matplotlib_Plot - Fatal编程技术网

Python 带日期的MatPlotLib X轴

Python 带日期的MatPlotLib X轴,python,matplotlib,plot,Python,Matplotlib,Plot,我在GUI中有一个图形,通过单击按钮打开。它从一个不断更新的csv文件打开,因此在开始计数时,我想限制x轴的条目数 四条线的绘图工作,但是,我一直无法细化x轴,我想做的是 旋转字体 删除日期的尾随零 可能将日期格式更改为D-M-Y H:M 以下脚本是我到目前为止所拥有的: def open_graph(): import numpy as np import matplotlib.pyplot as plt import datetime as dt from

我在GUI中有一个图形,通过单击按钮打开。它从一个不断更新的csv文件打开,因此在开始计数时,我想限制x轴的条目数

四条线的绘图工作,但是,我一直无法细化x轴,我想做的是

  • 旋转字体
  • 删除日期的尾随零
  • 可能将日期格式更改为D-M-Y 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()
    

    由于我仍在学习,我将非常感谢任何能够实现这一目标的帮助。

    以下是一个更好的答案:

    只需在plt.show()命令之前添加以下内容:

    运行autofmt_xdate会使日期倾斜。 设置ax.fmt_扩展数据设置将鼠标悬停在某个点上时的日期格式。 运行ax.xaxis.set_major_格式化程序可在x轴上设置日期格式

    有趣的是,在我自己的matplotlib代码中,我自己对x轴上的日期进行了格式化,因为我不知道这些自动格式化功能。我将不得不修改代码以使用matplotlib中已有的内容


    鲍比

    @bobbydurrettdba,谢谢你的建议,但我似乎无法让它发挥作用。我从csv读取的脚本似乎不喜欢这一行。如果你不介意的话,你可以看看我的CScript,告诉我它需要放在哪里,或者我是否需要补充什么。我也不太确定如何以我想要的格式将xnames配置为日期。对不起,我不是很清楚。看起来DTG是代码中日期和时间的列表。在我的代码中,日期和时间列表位于名为xnames的变量中。我认为如果你想改变你的日期,只要从DTG中创建一个新的列表,修改每个元素,使其成为你想要的长度和格式。xticks将rotation=angle作为参数,这就是我如何沿x轴旋转日期的方式。xticks的第一个参数是标签的x值列表,第二个参数是标签列表。我编辑了我的答案。Matplotlib有一些很好的内置日期格式,这是我之前不知道的。
    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)