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 相关文章推荐
python控制台英汉汉英电子词典
Apr 23 Python
Python基于Matplotlib库简单绘制折线图的方法示例
Aug 14 Python
Python爬取十篇新闻统计TF-IDF
Jan 03 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
Apr 10 Python
使用实现pandas读取csv文件指定的前几行
Apr 20 Python
Python生成器定义与简单用法实例分析
Apr 30 Python
python3实现随机数
Jun 25 Python
浅谈PYTHON 关于文件的操作
Mar 19 Python
Python collections模块使用方法详解
Aug 28 Python
python判断无向图环是否存在的示例
Nov 22 Python
使用Python实现 学生学籍管理系统
Nov 26 Python
Django中Aggregation聚合的基本使用方法
Jul 09 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高级OOP技术演示
2009/08/27 PHP
php 错误处理经验分享
2011/10/11 PHP
php json与xml序列化/反序列化
2013/10/28 PHP
PHP连接MySQL的2种方法小结以及防止乱码
2014/03/11 PHP
PHP+MySQL实现的简单投票系统实例
2016/02/24 PHP
textContent在Firefox下与innerText等效的属性
2007/05/12 Javascript
js 表格隔行颜色
2009/12/02 Javascript
javascript是怎么继承的介绍
2012/01/05 Javascript
JS创建对象几种不同方法详解
2016/03/01 Javascript
jQuery前端开发35个小技巧
2016/05/24 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
vue中render函数的使用详解
2018/10/12 Javascript
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
详解Vue 全局变量,局部变量
2019/04/17 Javascript
javascript-hashchange事件和历史状态管理实例分析
2020/04/18 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
[03:12]2016完美“圣”典风云人物:单车专访
2016/12/02 DOTA
Python isinstance函数介绍
2015/04/14 Python
python求解水仙花数的方法
2015/05/11 Python
详解Tensorflow数据读取有三种方式(next_batch)
2018/02/01 Python
Python使用numpy模块创建数组操作示例
2018/06/20 Python
Python中查看变量的类型内存地址所占字节的大小
2019/06/26 Python
Python MySQL 日期时间格式化作为参数的操作
2020/03/02 Python
使用keras内置的模型进行图片预测实例
2020/06/17 Python
html5基础教程常用技巧整理
2013/08/20 HTML / CSS
详解Html5 监听拦截Android返回键方法
2018/04/18 HTML / CSS
MIRTA官网:手工包,100%意大利制造
2020/02/11 全球购物
介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)
2014/10/31 面试题
网络研修随笔感言
2014/02/17 职场文书
2014年电话客服工作总结
2014/12/09 职场文书
学校食堂食品安全承诺书
2015/04/29 职场文书
工程款催款函
2015/06/24 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL