Python读取多列数据以及用matplotlib制作图表方法实例


Posted in Python onSeptember 23, 2020

多列数据的读入以及处理

这次我们用到的数据是煤炭5500周价格的最高价和最低价。左侧为价格的数据表格,右侧为日期。

Python读取多列数据以及用matplotlib制作图表方法实例

一、导入数据

这里我们就直接跳过讲解,如有不懂的,详见上一篇博客。见代码。

import matplotlib.pyplot as plt
import re
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体
plt.rcParams['axes.unicode_minus'] = False # 设置正负号
# 导入数据,日期
with open('日期.csv', encoding='gbk') as oo:
  day = oo.read()
day_str = day.replace('\n', ',') # 换行替换成逗号
day_list = re.split('[,]', day_str)
list_days = []
for s in range(len(day_list)-1): # 获得时间
  list_days.append(day_list[s])
# 将x转换成时间类型
# 导入数据,金额
with open('煤炭5500周价格波动数据.csv', encoding='gbk') as pp:
  sk = pp.read()
ll = sk.replace('\n', ',') # 换行替换成逗号
list_1 = re.split('[,]', ll) # 分割数据
list_2 = []
for s in range(len(list_1)-1):
  list_2.append(int(float(list_1[s])))

现在我们已经讲数据读取到相关的列表里,输出一下。

输出结果:
['2019/12/27', '2019/12/20', '2019/12/13', '2019/12/6', '2019/11/29', '2019/11/22', '2019/11/15', '2019/11/8', '2019/11/1', '2019/10/25', '2019/10/18', '2019/10/11', '2019/9/27', '2019/9/20', '2019/9/12', '2019/9/12', '2019/9/6', '2019/8/30', '2019/8/23', '2019/8/16', '2019/8/9', '2019/8/2', '2019/7/26', '2019/7/19', '2019/7/12', '2019/7/5', '2019/6/28', '2019/6/21', '2019/6/14', '2019/6/7', '2019/5/31', '2019/5/24', '2019/5/17', '2019/5/10', '2019/4/26', '2019/4/19', '2019/4/12', '2019/4/5', '2019/3/29', '2019/3/22', '2019/3/15', '2019/3/8', '2019/3/1', '2019/2/22', '2019/2/15', '2019/2/1', '2019/1/25', '2019/1/18', '2019/1/18', '2019/1/11', '2019/1/4', '2018/12/28']
[550, 555, 550, 555, 550, 555, 550, 555, 550, 555, 550, 555, 550, 555, 550, 555, 560, 565, 570, 575, 575, 580, 580, 585, 585, 590, 585, 590, 585, 590, 585, 590, 580, 585, 580, 585, 580, 590, 575, 585, 580, 590, 595, 600, 590, 600, 590, 595, 600, 605, 605, 615, 600, 610, 590, 600, 590, 600, 590, 600, 595, 600, 610, 620, 615, 620, 615, 620, 615, 625, 620, 625, 630, 640, 620, 630, 620, 625, 620, 630, 625, 630, 635, 645, 615, 625, 600, 605, 600, 605, 585, 590, 590, 595, 590, 595, 590, 595, 580, 590, 585, 595, 575, 580]

二、处理价格数据

我们可以看到0,2,4,6,8.......等偶数位的数值是周最低价,而单数位的数值是周最高价。我们可以用循环的方式读取到相关的数据。

代码如下。

这样就可以把数据进行分组了。以此类推,可以导入多列数据。

根据观察可以看到,时间列表是以降序的方式排列的,我们需要将数据转置过来,让列表数据改为升序。方法一、调整导入的CSV文件的数据顺序。方法二、我们引入reversed()函数。该函数有两种写法,作用主要是将列表,range(),字典里的数据进行逆向排列。

逆转对象:list_x
写法一、
xxx = reversed(list_x)
写法二、
直接使用
list(reversed(list_x))
aaa = reversed(list_average) 转置一个作为样例
# 以上分割取得list_high,low,average
# 设置x轴,y轴标签,设置表格标题
plt.xlabel('时间')
plt.ylabel('价格')
plt.title('最高价/最低价/均价周期波动图')
plt.legend(loc='upper right')
plt.figure(figsize=(9, 8))输出图片大小900px*800px

图表制作

需要的数据我们已经处理好了,接着就是生成图表。

import matplotlib.pyplot as plt
import re
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体
plt.rcParams['axes.unicode_minus'] = False # 设置正负号
# 导入数据,日期
with open('日期.csv', encoding='gbk') as oo:
  day = oo.read()
day_str = day.replace('\n', ',') # 换行替换成逗号
day_list = re.split('[,]', day_str)
list_days = []
for s in range(len(day_list)-1): # 获得时间
  list_days.append(day_list[s])
print(list_days)
# 将x转换成时间类型
# 导入数据,金额
with open('煤炭5500周价格波动数据.csv', encoding='gbk') as pp:
  sk = pp.read()
ll = sk.replace('\n', ',') # 换行替换成逗号
list_1 = re.split('[,]', ll) # 分割数据
list_2 = []
for s in range(len(list_1)-1):
  list_2.append(int(float(list_1[s])))
print(list_2)
list_high = [] # 最高
list_low = [] # 最低
list_average = [] # 均值
for k in range(len(list_2)):
  if k % 2 == 0:
    list_low.append(list_2[k])
    list_average.append((list_2[k]+list_2[k+1])/2)
  else:
    list_high.append(list_2[k])
aaa = reversed(list_average)
# 以上分割取得list_high,low,average
# 设置x轴,y轴标签,设置表格标题
plt.xlabel('时间')
plt.ylabel('价格')
plt.title('最高价/最低价/均价周期波动图')
# 设置标注
 
plt.figure(figsize=(9, 8))
 
# 制作折现图
plt.plot(range(len(list_low)), list(reversed(list_high)), label='最高价', color='brown',marker='o',markerfacecolor='c',markersize='5')
plt.plot(range(len(list_low)), list(reversed(list_low)), label='最低价', color='skyblue',marker='s',markerfacecolor='r',markersize='5')
plt.plot(range(len(list_low)), list(reversed(list_average)), label='均价', color='lawngreen',marker='h',markerfacecolor='coral',markersize='5')
# 设置标注
plt.legend(loc='upper right') # 右上upper right 右下lower right
plt.show()

这是到目前我们制作出来的折线图

Python读取多列数据以及用matplotlib制作图表方法实例

替换x轴坐标点更改成日期

这里我们使用到plt.xticks()

书写格式:
plt.xticks(被替换的数值(数据长的的列表),替换的数据,数据方向(默认横向))
plt.xticks(range(len(list_low)), list(reversed(list_days)), rotation='vertical')
vertical:数值方向,也可以写角度。

到这了我们就完成了全部的代码。

结束:最终代码

import matplotlib.pyplot as plt
import re
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体
plt.rcParams['axes.unicode_minus'] = False # 设置正负号
# 导入数据,日期
with open('日期.csv', encoding='gbk') as oo:
  day = oo.read()
day_str = day.replace('\n', ',') # 换行替换成逗号
day_list = re.split('[,]', day_str)
list_days = []
for s in range(len(day_list)-1): # 获得时间
  list_days.append(day_list[s])
print(list_days)
# 将x转换成时间类型
# 导入数据,金额
with open('煤炭5500周价格波动数据.csv', encoding='gbk') as pp:
  sk = pp.read()
ll = sk.replace('\n', ',') # 换行替换成逗号
list_1 = re.split('[,]', ll) # 分割数据
list_2 = []
for s in range(len(list_1)-1):
  list_2.append(int(float(list_1[s])))
print(list_2)
list_high = [] # 最高
list_low = [] # 最低
list_average = [] # 均值
for k in range(len(list_2)):
  if k % 2 == 0:
    list_low.append(list_2[k])
    list_average.append((list_2[k]+list_2[k+1])/2)
  else:
    list_high.append(list_2[k])
aaa = reversed(list_average)
# 以上分割取得list_high,low,average
# 设置x轴,y轴标签,设置表格标题
plt.xlabel('时间')
plt.ylabel('价格')
plt.title('最高价/最低价/均价周期波动图')
# 设置标注
 
plt.figure(figsize=(9, 8))
 
plt.xticks(range(len(list_low)), list(reversed(list_days)), rotation='vertical')
# 设置折现图
plt.plot(range(len(list_low)), list(reversed(list_high)), label='最高价', color='brown',marker='o',markerfacecolor='c',markersize='5')
plt.plot(range(len(list_low)), list(reversed(list_low)), label='最低价', color='skyblue',marker='s',markerfacecolor='r',markersize='5')
plt.plot(range(len(list_low)), list(reversed(list_average)), label='均价', color='lawngreen',marker='h',markerfacecolor='coral',markersize='5')
# 设置标注
plt.legend(loc='upper right') 
plt.show()

结果示意图:

Python读取多列数据以及用matplotlib制作图表方法实例

总结

到此这篇关于Python读取多列数据以及用matplotlib制作图片的文章就介绍到这了,更多相关Python读取多列数据用matplotlib制作图片内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
AI人工智能 Python实现人机对话
Nov 13 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
Jan 04 Python
简单实现python聊天程序
Apr 01 Python
基于python 二维数组及画图的实例详解
Apr 03 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
May 10 Python
pandas中的数据去重处理的实现方法
Feb 10 Python
Django实现从数据库中获取到的数据转换为dict
Mar 27 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
May 13 Python
python 发送get请求接口详解
Nov 17 Python
pycharm + django跨域无提示的解决方法
Dec 06 Python
如何在C++中调用Python
May 21 Python
Python OpenCV之常用滤波器使用详解
Apr 07 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
Sep 23 #Python
python中如何打包用户自定义模块
Sep 23 #Python
python使用matplotlib绘制折线图的示例代码
Sep 22 #Python
python利用paramiko实现交换机巡检的示例
Sep 22 #Python
python批量修改交换机密码的示例
Sep 22 #Python
python爬虫构建代理ip池抓取数据库的示例代码
Sep 22 #Python
scrapy中如何设置应用cookies的方法(3种)
Sep 22 #Python
You might like
php指定函数参数默认值示例代码
2013/12/04 PHP
PHP递归实现层级树状展开
2016/04/01 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
2020/05/27 PHP
JavaScript使用cookie
2007/02/02 Javascript
学习YUI.Ext第五日--做拖放Darg&Drop
2007/03/10 Javascript
firefox和IE系列的相关区别整理 以备后用
2009/12/28 Javascript
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
js查看一个函数的执行时间实例代码
2015/09/12 Javascript
javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
2015/11/13 Javascript
原生javascript实现解析XML文档与字符串
2016/03/01 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
HTML5+jQuery实现搜索智能匹配功能
2017/03/24 jQuery
Vue 请求传公共参数的操作
2020/07/31 Javascript
[01:13:01]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第三场
2018/04/05 DOTA
详解Python3中的Sequence type的使用
2015/08/01 Python
pandas DataFrame数据转为list的方法
2018/04/11 Python
Python数据分析matplotlib设置多个子图的间距方法
2018/08/03 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
python每5分钟从kafka中提取数据的例子
2019/12/23 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
Matplotlib中rcParams使用方法
2021/01/05 Python
CSS3基础(RGBa、text-shadow、box-shadow、border-radius)
2012/11/13 HTML / CSS
通过一张图教会你CSS3倒影的实现
2017/09/26 HTML / CSS
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
大学生村官典型材料
2014/01/12 职场文书
自我鉴定怎么写
2014/01/12 职场文书
优秀教师先进事迹
2014/01/22 职场文书
《威尼斯的小艇》教学反思
2014/02/17 职场文书
交通事故协议书
2014/04/15 职场文书
新教师培训心得体会
2014/09/02 职场文书
详解Mysql 函数调用优化
2021/04/07 MySQL
MybatisPlus代码生成器的使用方法详解
2021/06/13 Java/Android
Java详细解析==和equals的区别
2022/04/07 Java/Android