先上一张效果图:

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

代码如下:

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简单做二维统计图的更多相关文章

  1. 使用C语言实现二维,三维绘图算法(3)-简单的二维分形

    使用C语言实现二维,三维绘图算法(3)-简单的二维分形 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...

  2. VC6下OpenGL 开发环境的构建外加一个简单的二维网络棋盘绘制示例

    一.安装GLUT 工具包 GLUT 不是OpenGL 所必须的,但它会给我们的学习带来一定的方便,推荐安装. Windows 环境下的GLUT 本地下载地址:glut-install.zip(大小约为 ...

  3. 一些Python中的二维数组的操作方法

    一些Python中的二维数组的操作方法 这篇文章主要介绍了一些Python中的二维数组的操作方法,是Python学习当中的基础知识,需要的朋友可以参考下 需要在程序中使用二维数组,网上找到一种这样的用 ...

  4. 用Python制作动态二维码

    参考来源链接:https://mp.weixin.qq.com/s/p-ptQZD6_bjUhmU822OPww 今天在最大的同性交友社区GitHub上发现了一个比较有意思的项目,无论你是什么操作系统 ...

  5. 猫狗大战("简单的二维背包")

    题面:https://www.luogu.com.cn/problem/P1489 看上去是一道简单的二维费用背包,但是要特别小心循环顺序. Ⅰ先循环物品,再循环限制条件. Ⅱ每一个限制条件都必须从后 ...

  6. Python制作动态二维码只需要一行代码!炒鸡简单!

    分享一个比较有意思的项目,只需要一行Python代码就可以快捷方便生成普通二维码.艺术二维码(黑白/彩色)和动态GIF二维码. 用法比较简单,直接通过pip安装即可. pip3 install myq ...

  7. c#简单实现二维数组和二维数组列表List<>的转置

    刚看到网上一篇文章里用sql实现了行列转置.sql server 2005/2008只用一个pivot函数就可以实现sql server 2000很多行的复杂实现.提到转置,立刻想起还在求学阶段曾经做 ...

  8. 一次使用Python连接数据库生成二维码并安装为windows服务的工作任务

    最近有一个需求,在现有生产系统上的人员库中增加一个此人员关键信息的二维码,支持文字版和跳转版两种方式,与报表工具关联,可打印.以windows服务方式,定时检查,只要发现某人员没有此二维码信息,就生成 ...

  9. python如何删除二维或者三维数组/列表中某维的空元素

    如题,个人在使用python进行数据预处理过程中出现的问题,抽象成删除三维列表中某维为空的问题. 一.首先来看一下三维数组/列表的结构 仔细看下图就会很清楚了: 轴0即是去除第一个外括号后第一层(我把 ...

随机推荐

  1. [py][mx]operation模型设计

    用户表 UserMesasage 用户消息 UserFavorite 用户收藏 UserAsk 用户咨询 UserCourse 用户学习的课程 CourseComments 用户评论 收藏有3种类型 ...

  2. [py]约瑟夫问题-循环队列

    约瑟夫问题(历史战争问题) 直观理解 老外视频讲解 模拟器演示 约瑟夫问题 数学姥公众号 讲的最清楚 背景及,推倒过程讲解得很清晰,旨在提高人们对数据的兴趣 简单说下: 几个人围成一圈(循环队列), ...

  3. [LeetCode] 133. Clone Graph_ Medium tag: BFS, DFS

    Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. OJ's ...

  4. ubuntu vim python配置

    参考https://www.cnblogs.com/cjy15639731813/p/5886158.html 但是后面打开文件的时候会报错,参考https://blog.csdn.net/jeff_ ...

  5. unity3D中 material中tiling和offset属性解释

    贴图有可能是多行多列的一些图案组成的.当我们需要一帧,一帧的播放时候.也就是帧序列动画, 我们就需要用到tiling和offset两个属性, 默认图片的左下角为坐标圆点即:(0,0) tiling是图 ...

  6. OAuth 白话简明教程 1.简述

    转自:http://www.cftea.com/c/2016/11/6702.asp OAuth 白话简明教程 1.简述 OAuth 白话简明教程 2.授权码模式(Authorization Code ...

  7. yum安装时提示app is currently holding the yum lock; waiting for it to exit

    yum安装时出现下面情况 可能是yum升级一些文件时,出现这种情况 解决方法: #rm -f /var/run/yum.pid 强制关掉yun进程

  8. Linux服务器---DansGuardian

    DansGuardian DansGuardian可以限制客户端的访问,通过这个软件,我们可以限制哪些网站不可以访问.哪些内容不能下载. 1.下载DansGuardian,提供一个网址http://w ...

  9. Linux服务器---设置服务启动

    设置服务开关 用户可以设置某项服务开机启动或者关闭,有图形界面和命令两种方式 1.图形界面 1)在终端输入命令setup,在弹出的界面选择“系统服务” 2)也可以直接在终端输入命令“ntsysv”,得 ...

  10. JProfiler8 远程监控tomcat配置过程

    1. 阅读人群 1.熟悉liunx服务器,起码知道liunx常见的命令 2.熟悉tomcat容器,起码知道怎么tomcat的启动以及停止 3.熟悉java编程语言,JProfiler8是专门监控jav ...