Python简单做二维统计图

先上一张效果图:

以上图是一段时间内黄金价格的波动图。

代码如下:

import datetime as DT
from matplotlib import pyplot as plt
from matplotlib.dates import date2num

data = []
with open("data.txt") as my_file:
    for line in my_file:
        date, price = line.partition("@")[::2]
        data.append((DT.datetime.strptime(date, "%Y-%m-%d %H:%M:%S"), price))

d = [date for (date, value) in data[::8]]
x = [date2num(date) for (date, value) in data]
y = [value for (date, value) in data]

fig = plt.figure()

graph = fig.add_subplot(111)

# Plot the data as a red line with round markers
# graph.plot(x, y, ‘r-o‘)
graph.plot(x, y)

# Set the xtick locations to correspond to just the dates you entered.
graph.set_xticks(x)

# Set the xtick labels to correspond to just the dates you entered.
graph.set_xticklabels(
    [date.strftime("%Y-%m-%d %H:%M:%S") for date in d], rotation=30
)
# plt.grid(True)
plt.xticks(x[::8])
# print [x[f_value] for f_value in range(0, len(x), 8)]
plt.show()

data.txt数据格式如下:

2017-07-29 00:00:[email protected]
2017-07-29 03:00:[email protected]
2017-07-29 06:00:[email protected]
2017-07-29 09:00:[email protected]
2017-07-29 12:00:[email protected]
2017-07-29 15:00:[email protected]
2017-07-29 18:00:[email protected]
2017-07-29 21:00:[email protected]

相关知识点介绍:

matplotlib中整个图像是一个Figure对象,在Figure对象中可以包含一个,或者多个Axes对象。每个Axes对象都是一个拥有自己坐标系统的绘图区域,多个Axes对象可以绘成一个比较复杂的图,比如共用x-axis的图。其逻辑关系如下:

一个具体的图如下:

Title为标题。Axis为坐标轴,Label为坐标轴标注。Tick为刻度线,Tick Label为刻度注释,需要注意的是x-axis的ticks(刻度)和x-axis的ticklabels是分开的,ticks就代表x轴的数据,ticklabels表示数据对应的字符串。并不是每个刻度都有字符串对应,ticklabels的密度是可以控制的。往往很密集的刻度会对应合理的字符串便以阅读。

  第一个图的x-axis轴对应的是日期,但是x轴必须有数据,因此matplotlib.dates提供了将日期转化为数据的方法date2num, 这个例子中数据是每3小时有一条,但是显示的时候只到天,具体是如下两行代码:

#每8个取一个日期,其实就是一天
d = [date for (date, value) in data[::8]]
#每个日期对应一个值,这样才能定位日期的位置,因此值也是每8个取一个
plt.xticks(x[::8])

获取x轴和y轴的刻度值

x = [date2num(date) for (date, value) in data]
y = [value for (date, value) in data]

创建图像并设置图像位置

fig = plt.figure()
graph = fig.add_subplot(111)

111的意思是把figure也就是图像分成1行1列,放在第一个格子,也就是独占整个图像

#把数据画到图上,r是red的意思,线是红色的,o表示对各个值画一个点。
# graph.plot(x, y, ‘r-o‘)
#默认蓝线不画点
graph.plot(x, y)
# Set the xtick labels to correspond to just the dates you entered.
#设置x轴label,其实就是上面算好的d日期字符串数组,rotation是label的角度
graph.set_xticklabels(
    [date.strftime("%Y-%m-%d %H:%M:%S") for date in d], rotation=20
)
#图表显示网格
plt.grid(True)
#设置图标的标题
plt.title("Gold price trends")
plt.xticks(x[::8])
#设置y轴label
plt.ylabel(‘Gold price/RMB cents‘)
#设置x轴label
plt.xlabel(‘Date time‘)
#显示图像
plt.show()

这么下来一个简单的图表就画好了,很快很实用吧。

参考链接:

https://segmentfault.com/a/1190000006158803

https://matplotlib.org/users/pyplot_tutorial.html

http://bbs.csdn.net/topics/390705164?page=1

时间: 2024-12-20 14:10:35

Python简单做二维统计图的相关文章

把简单的二维数组变成一维数组

在工作中我们经常需要把二维数组变成一维数组.那么就需要循环拿出来,其实有时候我们可以使用一些小技巧,借助php的内置函数来实现,但是我说的只是简单的二维数数组$arr= array('name'=>array('a'=>'abc','b'=>'bcd','c'=>'cde'));如果我们使用array_pop(),就可以拿到一维数组了,array_pop()本来是删除并返回数组的最后一个元素. 所以我们就可以将上诉的$arr变成array('a'=>'abc','b'=>

采用jsp页面与java代码分离的方式写一个简单的二维表

前提:在我们做程序时追求的是高内聚,低耦合,但是如果我们把jsp页面的的代码和java的代码都放在了jsp的代码编写中,使java和jsp高耦合这样的话不仅使jsp代码页面显得很复杂,而且也特别让不利于以后的维护,所以我们有了一个不成文的规范就是分层架构,把javad代码与jsp的代码分离开来,使jsp代码页中更加干净整洁. 下面我将于用jsp和java代码分离的方法做出这样的一个二维表(做一个jsp页面动态显示信息表) 第一步:首先我们需要一个实体类用于存放一个人的一整条信息(根据表格信息有编

在python中定义二维数组

发表于 http://liamchzh.0fees.net/?p=234&i=1 一次偶然的机会,发现python中list非常有意思. 先看一段代码 [py]array = [0, 0, 0]matrix = [array*3]print matrix## [[0,0,0,0,0,0,0,0,0]][/py] 这段代码其实没有新建一个二维数组 再看一段代码 [py]array = [0, 0, 0]matrix = [array] * 3print matrix## [[0, 0, 0], [

swift编程语言简单开发二维码扫描

最近在学习swift编程语言(http://www.maiziedu.com/course/ios/16-161/), 在看视频学习swift编程语言时,发现有个二维码扫面案例的教程,非常的不错,其中还有一些动画的实现 ,今天就先记录一下二维码扫描的简单实现  不太好记手写一遍 学习的基础在于模仿嘛 创建一个实现二维码扫描的步骤 1.首先是懒加载创建 会话 输入设备  输出设备 // 先倒入框架 AVFoundation 2.    import AVFoundation 3.    //通过懒

Java简单生成二维码

二维码简介 二维条码/二维码(2-dimensional bar code,QRCode)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的:在代码编制上巧妙地利用构成计算机内部逻辑基础的"0"."1"比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集:每个字符占有一定的宽度:具有一定的校验功能等.同时

c#简单实现二维码

在当下,二维码的使用越来越加普遍,下面就用winform来实现二维码的生成: 首先需要下载一个ThoughtWorks.QRCode.dll,然后在项目添加引用ThoughtWorks.QRCode.dll using ThoughtWorks.QRCode.Codec; 新建一个winfrom程序,使用pictureBox来展示将要生成的二维码 生成二维码方法 public Bitmap CodeImage(string str) { //实例化一个生成二维码的对象 QRCodeEncoder

OpenCV和Zbar两个Python模块实现二维码和条形码识别

在我们的日常生活中,处处可见条形码和二维码. 在以前,我们去逛书店时,或者你现在随手拿起你身边的一本书,你肯定能看到书本的封页后面印有一排黑色线条组成的标签,也就是条形码:你去你们学校的自助机上借书还书时识别的也是条形码:哦,对了,你还记得每次大型考试答题卡上都会贴上监考老师分发给你的那个标签吗?还是条形码:甚至现在你随随便便逛个超市或便利店,收银员或者自助机也都是通过扫商品条形码给你计价的.条形码在我们的日常生活中真的是随处可见. 到了后来,2016年之后,二维码也渐渐开始普及起来,现在二维码

使用QRCode简单生成二维码

// //  ViewController.m //  二维码 // //  Created by 123 on 16/9/4. //  Copyright © 2016年 彭洪. All rights reserved. // #import "ViewController.h" #import "QRCodeGenerator.h"//引入库 @interface ViewController () @end @implementation ViewContro

如何在PPT中完成简单的二维码背景抠图操作

加入我们有这样一张PPT: 可以看到背景是灰色的,但是二维码有一个白色的背景,我们可以直接在PPT里将白色的背景给去掉.具体操作方法是: 1 双击二维码图片,选择隐藏菜单栏中的格式选项 2 选择颜色-设置透明色 3 点击二维码中的白色背景部分,就大功告成了.效果: Enjoy It! 原文地址:https://www.cnblogs.com/Irvingcode/p/12275305.html