画一个量随着时间变化的曲线是经常会遇到的需求,比如画软件用户数的变化曲线。画随时间变化的曲线主要用到的函数是matplotlib.pyplot.plot_date(date,num)。由于其第一个变量是datetime类型的,所以对于string类型的数据输入,首先需要进行格式化操作。

一、使用strptime进行string的格式化

1.1一个基本例子

time=datetime.datetime.strptime('2014-12-28 13:49:30','%Y-%m-%d %H:%M:%S')

 print time

2014-12-28 13:49:30

1.2常见的具体格式化对应关系

常见的对应关系如下表所示(2014-12-28 13:49:30),更多可以参见python对时间日期做格式化 - 走到天亮 - 博客园

Year

Month

Day

Hour

Minute

Second

%y

%Y

%m

%b

%d

%H

%I

%M

%S

14

2014

12

Dec

28

13

01

49

30

二、一个具体的画图例子

统计windows下软件首次安装的数目并画出散点图(按日统计)和柱状图(按年统计)

import _winreg
import datetime
import matplotlib.dates
import matplotlib.pyplot
import numpy as np
print "import winreg done!" key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,r"Software\Microsoft\Windows\CurrentVersion\Uninstall")
#key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,r"Software\Microsoft\Windows\CurrentVersion\Explorer")
print key
all_software=[]
k=0
try:
i=0
while 1:
subkey_string=_winreg.EnumKey(key,i)
#print subkey_string
try:
j=0
temp={}
get_installDate=0
#some subkey may not have installdate subkey and value
while 1:
#subkey=_winreg.OpenKey(key,"InstallDate")
subkey=_winreg.OpenKey(key,subkey_string)
name, value, type_value = _winreg.EnumValue(subkey,j)
#print repr(name),repr(value)
#print "name is "+name
if name=="DisplayName":
#print "Name equals DisplayName"
temp["DisplayName"]=value
if name=="InstallDate":
#print "Name equals installdate"
temp["InstallDate"]=value
get_installDate=1
j+=1
except WindowsError:
#print 'interruptted j='+str(j)
if get_installDate:
all_software.append(temp)
#print repr(name)
#print value
i +=1
except WindowsError:
print
for item in range(len(all_software)):
all_software[item]["InstallDate"]=datetime.datetime.strptime(all_software[item]["InstallDate"].encode('ascii','ignore'),'%Y%m%d')
count={}
bar_by_year={}
bar_by_year['']=0
bar_by_year['']=0
bar_by_year['']=0
for item in all_software:
if count.has_key(item["InstallDate"]):
count[item["InstallDate"]]+=1
else:
count[item["InstallDate"]]=1
bar_by_year[str(item['InstallDate'].year)]+=1
xvalues=[]
yvalues=[]
for key,value in count.iteritems():
xvalues.append(key)
yvalues.append(value)
xvalues=matplotlib.dates.date2num(xvalues)
matplotlib.pyplot.figure(1)
matplotlib.pyplot.plot_date(xvalues,yvalues)
matplotlib.pyplot.figure(2)
xvalues_2=np.arange(3)
yvalues_2=bar_by_year.values()
fig2=matplotlib.pyplot.bar(xvalues_2,yvalues_2,0.5)
matplotlib.pyplot.xticks(xvalues_2+0.25, ['','',''], rotation='vertical')
matplotlib.pyplot.show() #value, type = _winreg.QueryValueEx(key, "EnableAutoTray")

三、参考材料

[1]Python 操作注册表 - 无恙 - 博客园

[2]c++ - How can I enumerate/list all installed applications in Windows XP? - Stack Overflow

[3]winreg – Windows registry access — Python v3.0.1 documentation

[4]graph - plotting time in python with matplotlib - Stack Overflow

[5]沙湖王 | matplotlib绘图2

[6]Python图表绘制:matplotlib绘图库入门 - 蝶梦庄周 - 博客园

[7]ticks_and_spines example code: ticklabels_demo_rotation.py — Matplotlib 1.4.2 documentation

[8]api example code: barchart_demo.py — Matplotlib 1.4.2 documentation

python日期格式化与绘图的更多相关文章

  1. Python日期格式化知识

    Python中日期格式化是非常常见的操作,Python 中能用很多方式处理日期和时间,转换日期格式是一个常见的功能.Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时 ...

  2. python日期格式化符号

    python中时间日期格式化符号: %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数( ...

  3. python 日期格式化常用标记

    符号   说明             例子    %a  英文星期的简写 Mon  %A  英文星期的完整编写 Monday  %b  英文月份的简写 Jun  %B  英文月份的完整编写 June ...

  4. Python 日期格式化 及 schwartzian排序

    __author__ = 'root' import datetime import time import copy # 12/Dec/2012:23:59:50 # 12/Sep/2012:23: ...

  5. python中时间日期格式化符号

    python中时间日期格式化符号: import time print(time.strftime('%Y%H%M%S', time.localtime())) 运行结果: 2016092308 %y ...

  6. python time模块介绍(日期格式化 时间戳)

    import time # 1.time.time() 用于获取当前时间的时间戳, ticks = time.time() print(ticks) # 1545617668.8195682 浮点数 ...

  7. Python 日期和时间_python 当前日期时间_python日期格式化

    Python 日期和时间_python 当前日期时间_python日期格式化 Python程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能. Python 提供了一个 time 和 cal ...

  8. 1、Python 日期时间格式化输出

    今天帮朋友写自动化脚本,又需要用格式化日期,又忘记怎么写了,还是写到自己博客里面,方便日后需要的时候看一眼吧.So,临时加一篇 Python 的文章. 1.Python的time模块 import t ...

  9. python 日期生成和时间格式化

    记录下日期时间的转换和生成:1.这个是使用datetime 函数生成往后几天的时间,比如当前日期是2019-07-01 那么控制days=1然后再和当前的时间相加,就能得到明天的日期def time_ ...

随机推荐

  1. clang编译mysql(Ubuntu10 64位)

    编译安装mysql(Ubuntu10 64位) http://www.cnblogs.com/2018/p/3482259.html 这个介绍了gcc形式编译安装mysql 那我们使用clang进行编 ...

  2. 在android用Get方式发送http请求

    烦人的日子终于过去啦,终于又可以写博客啦,对自己的android学习做个总结,方便以后查看...... 一.在android用Get方式发送http请求,使用的是java标准类,也比较简单. 主要分以 ...

  3. 操作系统开发系列—12.g.在内核中设置键盘中断

    8259A虽然已经设置完成,但是我们还没有真正开始使用它呢. 所有的中断都会触发一个函数spurious_irq(),这个函数的定义如下: PUBLIC void spurious_irq(int i ...

  4. Android jni开发中的常见错误

    错误1:java.lang.UnsatisfiedLinkError: Native method not found: 本地方法没有找到 1.本地函数名写错 2.忘记加载.so文件 没有调用Syst ...

  5. GET和POST请求

    GET与POST请求 简介 GET请求解释及语法格式 POST请求简介及语法 GET请求代码 POST请求代码 GET请求解释及语法格式: 网络请求默认是get 网络请求有很多种:GET查 POST改 ...

  6. OC中的protocol

    一. 简单使用 1. 基本用途 可以用来声明一大堆方法(不能声明成员变量) 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明 只要父类遵守了某个协议,就相当于子类也遵守了 2. 格式 协 ...

  7. OC NSSet

    OC NSSet 数组的特点: 有序的 Set的特点: 无序的,存储元素无重复(例:set中有两个元素'a' 输出时只输出一个a) NSSet初始化 NSSet * set = [[NSSet all ...

  8. 一个统计报表sql问题

    今天朋友问我了一个统计报表的sql问题.我弄了好久.终于算是写出来了.这里记录下. 问题:  id--------------name--------------addtime1            ...

  9. AEAI DP开发平台精要

    1 背景概述 相信很多了解数通畅联软件的人对AEAI DP应用开发平台并不陌生,笔者在入职第一天就开始接触AEAI DP,使用AEAI DP开发过AEAI WM.AEAI CRM以及中国XXXX管理系 ...

  10. WPF学习之路(五) 实例:写字板(续)

    WordPad 2.0 上一期实现了一虽然建议但是功能比较全面的Wordpad程序,但是程序代码略显繁琐,这一期更新改进版. MainWindows.xaml 添加 <Window.Comman ...