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即是去除第一个外括号后第一层(我把 ...
随机推荐
- SQLCE数据工具(Flyhoward Ltd SDF Viewer)
SDF Viewer sdf数据库创建编辑查看 官方下载地址 http://www.flyhoward.com/Download_SDF_Viewer.aspx 用户名:www.cr173.com注 ...
- latex中文模板
\documentclass[UTF8,a4paper,10pt, twocolumn]{ctexart} \usepackage[left=2.50cm, right=2.50cm, top=2.5 ...
- 数据分析与挖掘 - R语言:K-means聚类算法
一个简单的例子!环境:CentOS6.5Hadoop集群.Hive.R.RHive,具体安装及调试方法见博客内文档. 1.分析题目--有一个用户点击数据样本(husercollect)--按用户访问的 ...
- 一个新人对于DW标签的理解
标签呢分为 一.一般标签 一般标签内又分为 ① 格式控制标签 格式控制标签的书写格式是: <font .....></font> 以font为开头以/font为结尾 font ...
- dedecms开启报错
php.ini里面设置display_errors = On 开启错误提示,error_reporting = E_ALL & ~E_NOTICE 设置错误等级.也可以在php文件中ini_s ...
- mvc actionresult返回各种文件
public ActionResult ReviewFile(string folderName, string fileBasename, string extendName) { //以后根据后缀 ...
- Atcoder Tenka1 Programmer Contest 2019 D Three Colors
题意: 有\(n\)个石头,每个石头有权值,可以给它们染'R', 'G', 'B'三种颜色,如下定义一种染色方案为合法方案: 所有石头都染上了一种颜色 令\(R, G, B\)为染了'R', 染了'G ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON BitXor
zw版[转发·台湾nvp系列Delphi例程]HALCON BitXor procedure TForm1.Button1Click(Sender: TObject);var image0, imag ...
- 使用IDEA 搭建SpringMVC +Easyui 实现最简单的数据展示功能
效果图如下: 步骤如下: 1.导入jquery-easyui-1.5.5.6 2.导入相关的SpringMVC 的jar 包 3.编写datagrid.jsp 页面 <%-- Created b ...
- mustache语法
mustache 模板,用于构造html页面内容.在实际工作中,当同一个模板中想要调用不同的函数来渲染画面,在已经自定义好了的前提下,可以在渲染页面时对传入的参数进行手动判断. 以下是学习笔记内容: ...