Python制作折线图
利用python的第三方包Pygal制作简单的折线图。
申明:本文仅供学习交流使用。源码大部分来自《python编程从入门到实践》;如有侵权,请联系我删除。
1 #!usr/bin/env python3
2 # -*-coding=utf-8 -*-
3 '''
4 制作一个简单的交易走势图。源码大部分来自<python编程从入门到实践>
5 过程分析:
6 1,从网站下载数据并存储到本地,两种方法:
7 a,urlopen
8 b,requests
9 2,读取本地数据,利用pygal制作交易走势图
10 '''
11 #正文开始
12 from __future__ import (absolute_import, division, print_function, unicode_literals)
13 try:
14 from urllib2 import urlopen
15 except ImportError:
16 from urllib.request import urlopen
17 import json
18 import requests
19 import pygal
20 from pygal.style import LightColorizedStyle as LCS,LightenStyle as LS
21
22 #第一种方法利用urlopen提取网络上存储的数据
23 #定义要提取数据的url
24 URL = "https://www.xxx.com/btc_close_2017.json"
25 read_url = urlopen(URL) #读取URL
26 read_response = read_url.read() #读取返回的数据
27
28 #开始存储数据到本地, 以'wb'形式(二进制)
29 with open('btc_close_2017_urllib.json', 'wb') as file_object:
30 file_object.write(read_response) #将读取到的数据写入到文件
31
32 file_urllib = json.loads(read_response)
33 print(file_urllib)
34
35 #第二种方法利用requests提取网络上存储的数据
36 #定义要提取数据的URL
37 URL = "https://www.xxx.com/btc_close_2017.json"
38 response = requests.get(URL) #利用requests读取URL并获取数据
39
40 #开始存储数据到本地文件;
41 with open('btc_close_2017_requests.json', 'w') as file_object:
42 file_object.write(response.text) #写入数据到本地文件,要以str格式写入
43
44 file_requests = response.json()
45 print(file_requests)
46
47 print("-----------------------I am delimiter-----------------")
48 #打印一下两种方法是不是获取到相同的数据
49 print(file_urllib == file_requests) #True
50
51 #开始读取相关数据
52 filename = 'btc_close_2017.json'; #加载文件
53
54 #以读的方式打开文件
55 with open(filename) as file_object:
56 btc_data = json.load(file_object) #将读取到的数据加载为json格式
57
58 print(btc_data) #打印是否符合预期
59
60 #打印每一天的信息,并将字符串转换成数值型的:
61 for btc_dict in btc_data:
62 date = btc_dict['date']
63 month = int(btc_dict['month'])
64 week = int(btc_dict['week'])
65 weekday = btc_dict['weekday']
66 close_price = int(float(btc_dict['close'])) #先将字符串转换为浮点型,再将浮点型转换成整型
67 print("{} is month: {}, week: {}, weekday: {}, the close price is: {}".format(date,month,week,weekday,close_price))
68
69
70 #可视化,开始绘制收盘价折线图
71
72 #定义空列表以存储循环得到的项
73 dates, months, weeks, weekdays, close_prices = [], [], [], [], []
74 #循环读取btc_data里的每一项
75 for btc_dict in btc_data:
76 date = btc_dict['date']
77 month = int(btc_dict['month'])
78 week = int(btc_dict['week'])
79 weekday = btc_dict['weekday']
80 close_price = int(float(btc_dict['close'])) #先将字符串转换为浮点型,再将浮点型转换成整型
81
82 #将每一项追加到对应的空列表
83 dates.append(date)
84 months.append(month)
85 weeks.append(week)
86 weekdays.append(weekday)
87 close_prices.append(close_price)
88
89 line_chart = pygal.Line(x_label_rotation=20,show_minor_x_labels=False) #x轴标签顺时针旋转20度,show_minor_x_labels告诉pygal不必显示全部的x轴标签
90 line_chart.title = "Close Price ($)" #标题
91 line_chart.x_title = "Dates" #x轴标题
92 line_chart.y_title = "Price" #y轴标题
93 line_chart.x_labels = dates #x轴标签
94 line_chart.x_labels_major = dates[::20] #让x轴坐标每隔20天显示第一次;
95 line_chart.add("BTC", close_prices) #
96 line_chart.render_to_file('closeprice.svg')
97
98 '''
99 写一些折线图的样式
100 '''
101 my_style = LS("#999888",base_style=LCS)
102 my_config = pygal.Config()
103 my_config.x_label_rotation = 20
104 my_config.show_legend = False
105 my_config.show_minor_x_labels = False
106 my_config.title_font_size = 10
107 my_config.label_font_size = 10
108 my_config.major_label_font_size = 18
109 my_config.truncate_label = 10
110 my_config.show_y_guides = False
111 my_config.width = 1000
112
113 #利用样式可视化
114 line_chart = pygal.Line(my_config,style=my_style)
115 line_chart.title = "BTC close price in 2017"
116 line_chart.x_title = "Dates"
117 line_chart.y_title = "Price"
118 line_chart.x_labels = dates
119 line_chart.x_labels_major = dates[::20]
120 line_chart.add("SPJ",close_prices)
121 line_chart.render_to_file("closeprice1.svg")
Python制作折线图的更多相关文章
- JFreeChart在制作折线图
JFreeChart在制作折线图的时候可以使用两种不同的方式 package Line; import java.awt.Color; import java.awt.Font; import org ...
- Microsoft Excel Sheet/表格 制作折线图
Microsoft Excel Sheet/表格 制作折线图 虽然比较简单,但是仍然需要稍微花一点功夫. 1.制作好表格数据 2.先将数据选定(不包括 横座标的 年月日或其他的刻度 的那一列) 3.插 ...
- Python绘制折线图
一.Python绘制折线图 1.1.Python绘制折线图对应代码如下图所示 import matplotlib.pyplot as pltimport numpy as np from pylab ...
- 使用python制作动图
利用python制作gif图 引言 当写文章时候,多张图片会影响排版,可以考虑制作gif图 准备 pip install imageio 代码 # This is a sample Python sc ...
- 利用python进行折线图,直方图和饼图的绘制
我用10个国家某年的GDP来绘图,数据如下: labels = ['USA', 'China', 'India', 'Japan', 'Germany', 'Russia', 'Brazil', ...
- excel制作折线图太麻烦?试试这些折线图在线生成工具
折线图是以折线的上升或下降来表示统计数量的增减变化的统计图,叫作折线统计图.用折线的起伏表示数据的增减变化情况,不仅可以表示数量的多少,而且可以反映数据的增减变化情况.并且折线图也是目前最方便的一种统 ...
- python matplotlib 折线图
1.绘制折线图,去上和右边框,显示中文 import numpy as np import matplotlib.pyplot as plt #plt.style.use('default') #pl ...
- Vue整合d3.v5.js制作--折线图(line)
先上效果图(x轴固定为时间轴): 图中出现的悬浮框是鼠标悬停效果 1.环境说明: vue版本:"vue": "^2.5.2" d3版本:"d3&quo ...
- python绘折线图
# -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt #X轴,Y轴数据 y = [0.3,0.4,2,5 ...
随机推荐
- flink:JobGraph生成过程分析
1.JobGraph是由StreamGraph转换而来,当client将StreamGraph提交后,job启动前会先完成转换,统一的转换入口如下: 2.StreamingJobGraphGenera ...
- 基础知识redis详解--【Foam番茄】
Redis 学习方式: 上手就用 基本的理论先学习,然后将知识融汇贯通 nosql讲解 为什么要用Nosql 现在都是大数据时代 大数据一般的数据库无法进行分析处理了 至少要会Springboot+S ...
- 考研数学数一公式整理(微积分&线性代数&概率统计)
主要根据李永乐老师的线性代数讲义.全书和汤家凤老师的高数讲义整理的. 用于记背数学需要背的公式和步骤,概念.定义.公式多,方法步骤少(毕竟太庞杂了). 本来是自用,但还是分享一下,希望有补充指正! 链 ...
- JavaScript原型链及其污染
JavaScript原型链及其污染 一.什么是原型链? 1.JavaScript中,我们如果要define一个类,需要以define"构造函数"的方式来define: functi ...
- CSP-2020 退役记
CSP-2020 游记 第2次参加CSP-- Day -5~-7 每天笔试+机试 Day -8~-9 在家放松(写作业) Day 0 鸡鸭月考 Day 1 9:30以前 愉快的在别人月考的时候离开鸡鸭 ...
- Spring Boot 2 集成 Swagger
本文测试代码使用 Spring Boot 2.1.6.RELEASE + Swagger 2.9.2 添加依赖 <dependency> <groupId>io.springf ...
- 第二十九章、containers容器类部件QFrame框架部件详解
一.概述 容器部件就是可以在部件内放置其他部件的部件,在Qt Designer中可以使用的容器部件有如下: 容器中的Frame为一个矩形的框架对象,对应类QFrame,QFrame类是PyQt中带框架 ...
- PyQt开发样例: 利用QToolBox开发的桌面工具箱Demo
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 toolBox工具箱是一个容器部件,对应类为QToolBox,在其内有一列从上到下顺序排列 ...
- ASP.NET Log4net数据库日志新增记录客户端ip
LOG4数据库记录器XML配置 1 <appender name="ADONetAppender" type="log4net.Appender.ADONetApp ...
- Springboot中redisTemplate乱码或json转换问题
问题1 用RedisTemplate存入map值的时候,用rdm可视化打开,看到的是转码之后的数据,如图: 存入的方法为: public boolean hmset(String key, Map&l ...