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:02@27567
2017-07-29 03:00:02@27575
2017-07-29 06:00:01@27575
2017-07-29 09:00:01@27575
2017-07-29 12:00:02@27575
2017-07-29 15:00:01@27575
2017-07-29 18:00:01@27575
2017-07-29 21:00:01@27575
相关知识点介绍:
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
Python简单做二维统计图的更多相关文章
- 使用C语言实现二维,三维绘图算法(3)-简单的二维分形
使用C语言实现二维,三维绘图算法(3)-简单的二维分形 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...
- VC6下OpenGL 开发环境的构建外加一个简单的二维网络棋盘绘制示例
一.安装GLUT 工具包 GLUT 不是OpenGL 所必须的,但它会给我们的学习带来一定的方便,推荐安装. Windows 环境下的GLUT 本地下载地址:glut-install.zip(大小约为 ...
- 一些Python中的二维数组的操作方法
一些Python中的二维数组的操作方法 这篇文章主要介绍了一些Python中的二维数组的操作方法,是Python学习当中的基础知识,需要的朋友可以参考下 需要在程序中使用二维数组,网上找到一种这样的用 ...
- 用Python制作动态二维码
参考来源链接:https://mp.weixin.qq.com/s/p-ptQZD6_bjUhmU822OPww 今天在最大的同性交友社区GitHub上发现了一个比较有意思的项目,无论你是什么操作系统 ...
- 猫狗大战("简单的二维背包")
题面:https://www.luogu.com.cn/problem/P1489 看上去是一道简单的二维费用背包,但是要特别小心循环顺序. Ⅰ先循环物品,再循环限制条件. Ⅱ每一个限制条件都必须从后 ...
- Python制作动态二维码只需要一行代码!炒鸡简单!
分享一个比较有意思的项目,只需要一行Python代码就可以快捷方便生成普通二维码.艺术二维码(黑白/彩色)和动态GIF二维码. 用法比较简单,直接通过pip安装即可. pip3 install myq ...
- c#简单实现二维数组和二维数组列表List<>的转置
刚看到网上一篇文章里用sql实现了行列转置.sql server 2005/2008只用一个pivot函数就可以实现sql server 2000很多行的复杂实现.提到转置,立刻想起还在求学阶段曾经做 ...
- 一次使用Python连接数据库生成二维码并安装为windows服务的工作任务
最近有一个需求,在现有生产系统上的人员库中增加一个此人员关键信息的二维码,支持文字版和跳转版两种方式,与报表工具关联,可打印.以windows服务方式,定时检查,只要发现某人员没有此二维码信息,就生成 ...
- python如何删除二维或者三维数组/列表中某维的空元素
如题,个人在使用python进行数据预处理过程中出现的问题,抽象成删除三维列表中某维为空的问题. 一.首先来看一下三维数组/列表的结构 仔细看下图就会很清楚了: 轴0即是去除第一个外括号后第一层(我把 ...
随机推荐
- matlab常用方法
1:matlab进行符号的虚数运算 直接使用符号 a+b*j运算,结果是一个角度值,不是复数. 可以使用 a+b*(1j) 进行运算. 如下 position(index,)=radius; ...
- 80. Remove Duplicates from Sorted Array II(双指针)
Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twic ...
- yii2常用的migrate命令
开发中经常会用到的方法小结: 1../yii migrate xxx_xx 在表中插入某字段 : public function up() {$this->addColumn('{{applic ...
- 改变 select下拉框 样式
select{ outline: none; text-indent: 10px; height: 45px; line-height: 45px; width: 100%; border:1px s ...
- Python tricks(7) -- new-style class的__slots__属性
__slots__是在python 2.2开始引入的一个新特性, 我们来看一下官方给出的解释. This class variable can be assigned a string, iterab ...
- python socket编程函数介绍
网上看到一个socket中常用函数的介绍,记录一下 https://blog.csdn.net/rebelqsp/article/details/22109925
- 一个快速检测系统CPU负载的小程序
原理说明 在对服务器进行维护时,有时也遇到由于系统 CPU(利用率)负载过高导致业务中断的情况.服务器上可能运行多个进程,查看单个进程的 CPU 都是正常的,但是整个系统的 CPU 负载可能是异常的. ...
- 【读书笔记】SpringBoot读书笔记
整体目录结构: 一.入门 二.开发第一个应用程序 三.自定义配置 四.测试 五.Groovy与Spring Boot Cli 六.在Spring Boot中使用Grails 七.深入Actuator ...
- 干货:Java并发编程必懂知识点解析
本文大纲 并发编程三要素 原子性 原子,即一个不可再被分割的颗粒.在Java中原子性指的是一个或多个操作要么全部执行成功要么全部执行失败. 有序性 程序执行的顺序按照代码的先后顺序执行.(处理器可能会 ...
- bzoj1641 / P2888 [USACO07NOV]牛栏Cow Hurdles
P2888 [USACO07NOV]牛栏Cow Hurdles Floyd $n<=300$?果断Floyd 给出核心式,自行体会 $d[i][j]=min(d[i][j],max(d[i][k ...