原标题:盘一盘 Python 系列 7 - PyEcharts (v1.0)

本文含5835字,33图表截屏

建议阅读30分钟

0

引言

有读者说〖 PyEcharts 〗一贴里的图美如画,但是版本是 pyecharts v0.5,用现在 v1.0 来运行会出错,建议我再写篇 pyecharts v1.0 的。我最不喜欢让读者失望,这不我就来了。

用 v1.0 来运行 v0.5 的代码是肯定会报错的,v0.5 和 v1 间不兼容,v1 是一个全新的版本。首先来回顾 v0.5 的方法总结。

PyEcharts v0.5 方法总结

对pyecharts中的所有原件,都是先创建 (可以带些必要属性,比如标题和尺寸),再用 add 方法添加额外属性。其通用化流程为

object = Object( 必要属性 )

object.add( 额外属性 )

在画图之前,你应该对那些原件可以干嘛有个大概印象,比如 Kline是画 K 线图, Heatmap是画热力图, WordCloud是图词云图等等。对于那些装饰原件所需的 必要属性和 额外属性,上官网一查便知,跟着例子看理解更快。

画多个坐标系用 Grid对象;叠加多个原件用 Overlap对象;随着时间轴展示不同时点的数据关系用 Timeline对象,等等。

首先用 pip 安装 pyecharts

pipinstall pyecharts

引入 pyecharts 并打印出它的版本

importpyecharts aspye

print( 'pyecharts: %s'% pye.__version__)

pyecharts: 1 .3.1

本文首先对比 pyecharts v0.5 和 v1.0 的区别,之后举三个从简单到复杂的例子来学习 v1.0 的用法。

1

v0.5 Vs v1.0

引入基本元件

在 v0.5 中,引入 Line(线)、 Kline(K 线)、 Bar(柱状图)、 Pie(饼状图)、 Grid(多坐标系)、 Overlap(叠加对象)、 Timeline(时间轴轮播图)、 TreeMap(树状图) 和 WordCloud(词云图) 的代码如下:

frompyecharts

importLine, Kline, Pie,

Grid, Overlap, Timeline,

TreeMap, WordCloud

在 v1.0 中,引入它们(除了Overlap)的代码如下:

frompyecharts.charts

importLine, Kline, Pie,

Grid, Timeline,

TreeMap, WordCloud

在 v1.0 中,我们从pyecharts.charts中引入元件,而不是从pyecharts引入。此外,v1.0 已经没有用于组合元件的Overlap了,它有一种更简单的组合方法。对于两个元件,K 线 kline 和线 line,v0.5 和 v1.0 的代码如下:

v0.5:需要先创建一个 Overlap 对象,再把 kline 和 line 一个个 添加进去。

overlap = Overlap

overlap.add(kline)

overlap.add(line)

v1.0:每个元件都有 overlap 函数,可以另外元件,比如先创建 kline 再添加 line.

kline.overlap(line)

一切皆配置

在 pyecharts v1.0 中,一切皆配置(options)。配置项有两种: 全局配置项和 系列配置项。

全局配置项有以下 16 小项:

系列 配置项有以下 14 小项:

配置项越细就能画出更多细节。在后面几节我们会重点说明,尤其是全局配置项,它可通过 set_global_options方法来设置。

引入 pyecharts 里的 options 代码如下:

frompyecharts importoptions asopts

1

K 线图

数据

首先用YahooFinancialsAPI 来下载外汇的三年半历史数据,安装该 API 用一行代码:

pipinstall yahoofinancials

数据的描述如下

起始日:2016-01-01

终止日:2019-05-13

四个外汇:欧元美元、美元日元、美元人民币,英镑美元

其中 货币用的不是市场常见格式,比如「欧元美元」用 EURUSD=X,而不是 EURUSD,而「美元日元」用 JPY=X 而不是 USDJPY

下面代码就是从 API 获取数据:

该 API 返回结果 FX_daily是「字典」格式,样子非常丑陋,感受一下。

数据样子虽丑,但还满齐全,画 K 线需要的开盘价 (open)、最高价 (high)、最低价 (low)、收盘价 (close) 都有。 将上面的「原始数据」转换成 DataFrame,代码如下:

第 3 行完全是为了 YahooFinancial 里面的输入格式准备的。如果 Asset 是加密货币,直接用其股票代码;如果 Asset 是汇率,一般参数写成 EURUSD 或 USDJPY

如果是 EURUSD,转换成 EURUSD=X

如果是 USDJPY,转换成 JPY=X

第 6 行定义好开盘价、收盘价、最低价和最高价的标签。

第 7 行获取出一个「字典」格式的数据。

第 8, 9 行用列表解析式 (list comprehension) 将日期和价格获取出来。

第 11 到 13 行定义一个 DataFrame

值为第 9 行得到的 price 列表

行标签为第 8 行得到的 index 列表

列标签为第 6 行定义好的 columns 列表

处理过后的数据格式美如画,看看 USDCNY。

curr = 'USDCNY'

data= data_converter( FX_daily, curr, 'FX')

data.head( 3).append( data.tail( 3))

PyEcharts v0.5

PyEcharts 0.5 里画 K 线用到Kline对象,除此之外我们添加最高价和最低价两条线Line对象,再用Overlap对象来「叠加」它们。

第 1-2 行获取日期和汇率。

第 4 行创建 K 线对象Kline,设置好标题 "xxx Chart" 和位置 center。第 5-6 行在Kline上添加属性

图例 :'K-Line',

x 坐标轴数据 :日期

y 坐标轴 数据 :一定要按 [开盘值, 收盘值, 最低值, 最高值] 的顺序,之前处理数据特意按这个顺序设定 DataFrame 的列标签的

x 坐标轴可拉伸 : True

图例位置 :右边

图例排序 :竖直

图例文字大小 :10

第 8 行创建折线对象Line。第 9-13 行在Line上添加两条折线,一条是最高价,一条是最低价。

第 14 行创建叠加对象Overlap。第 15-16 行在Overlap上分别添加之前的Kline和Line,这样就把所有对象整合在一起了。

第 17 行如果被运行,该动态图被生成到 USDCNY Chart.html 网页文件里;如果没被运行,该动态图将显示在 Jupyter Notebook 中。

PyEcharts 1.0

PyEcharts 1.0 里画 K 线用到 Kline对象,除此之外我们添加最高价和最低价两条线 Line对象,然后直接把两条线添加到 K 线上去。

需要把日期转成'Y/m/d'格式,在转成列表形式。在 v1.0 中,所有数据都需要转成列表形式。

第 2 行用Kline构造函数生成K 线对象,然后

用 add_xaxis 来修饰 x 轴(第 3 行)传入 日期列表

用 add_yaxis 来修饰 y 轴(第 4 行)传入 价格列表

用 set_global_opts 来设置全局配置(第 5-16 行),主要配置包括:

y 轴可缩放,且颜色交错(第 6-12 行)

x 轴可缩放(第 13 行)

设置标题(第 14 行)

数据局域缩放(第 15 行)

第 20 行用Line构造函数生成线对象,然后

用 add_xaxis 来修饰 x 轴(第 21 行)传入 日期列表

用 add_yaxis 来修饰 y 轴(第 22-29 行)传入 最高价列表

用 add_yaxis 来修饰 y 轴(第 30-37 行)传入 最低价列表

用 set_global_opts 来设置全局配置,主要设置数据局域缩放(第 38 行)

在修饰 y 轴时,我们还设置了线的宽度和透明度、已经不打印出 y 轴对应的图示。

最后将K 线和两条线组合在一起,在 notebook 里展现 (render_notebook)。

在 v1.0 中,通用代码长得以下这个样子

obj = (

Object(...)

.add_xaxis(...)

.add_yaxis(...)

.set_global_options(...)

)

其中 Object可以是任何常见元件,比如 Kline, Line和 Bar等等。三点省略号 ...就代表各种配置了,具体是什么那就要读文档了。

2

股价 K 线图 + 折线图

数据

本小节使用 5 个股票数据,描述如下:

5 只股票 :AAPL, JD, BABA, FB, GS

1 年时期 :从 2018-02-26 到 2019-02-26

再加上同时期的标准普尔 500 指数 (SPX),和恐慌指数 (VIX)。数据如下:

stock_data = pd.read_csv( '1Y Stock Data.csv',

parse_dates=[0],

dayfirst=True )

stock_data.head.append(stock_data.tail)

data = pd.read_csv( 'S&P500.csv',

index_col= 0,

parse_dates= True,

dayfirst= True)

spx = data[[ 'Adj Close']].loc[ '2018-02-26': '2019-02-26']

spx.head( 3).append(spx.tail( 3))

data = pd.read_csv( 'VIX.csv',

index_col= 0,

parse_dates= True,

dayfirst= True)

vix = data[[ 'Adj Close']].loc[ '2018-02-26': '2019-02-26']

vix.head( 3).append(vix.tail( 3))

PyEcharts v0.5

我们想把苹果股票的 K 线图,和 SPX 和 VIX 折线图放在一起看。如果再用 Overlap来叠加它们会显得图很乱,这时可以借用 pyecharts里的 Grid对象,它是将上面三个图放在三个坐标系中。

代码如下:

第 1-5 行用 code 获取股票数据,并获取日期和价格。为了画 K 线,价格数组的列必须按pyecharts里 API 要求的顺序 - [开盘价, 收盘价, 最低价, 最高价]。

第 6 -7 行创建Kline对象 (标题放左边),并添加 x 轴数据、y 轴数据和“允许横轴拉伸”。

第 10 -12 行创建Line对象 (标题为 SPX,位置离顶 55%) 并起名为 line1,再添加若干属性,比如 y 轴范围、标识最小值、 允许横轴拉伸。最关键的是datazoom_xaxis_index=[2,1,0],就说伸缩功能控制三个轴,AAPL 一个,SPX 一个,VIX 一个。这样拉伸 x 轴三幅子图可以同时动,非常酷!

第 15 -18 行创建Line对象 (标题为 VIX,位置离顶 75%) 并起名为 line2,再添加若干属性。

第 20 行创建Grid对象,宽 1000,高 600 (这些数值是不断尝试看效果设置的)。

第 20-23 行将三幅图加在Grid中,关键点是如何设置里面的 grid_top 和 grid_bottom 里的百分数而使得图看起来好看,这个没有标准的,不停地尝试到你最终满意为止。本例中 AAPL 占了 5% 到 50% 的位置,SPX 占了 55% 到 70% 的位置,VIX 占了 75% 到 90% 的位置 (还有 10% 位置留给了拉缩轴)。

第 24 行如果被运行,该动态图被生成到 APPL&VIX.html 网页文件里;如果没被运行,该动态图将显示在 Jupyter Notebook 中。

从图上可以看到在 2018 年底 SPX 和 VIX 同时到达最低点和最高点,对应的苹果 K 线看,在那一点前后苹果股价有一个大跌和大涨。

PyEcharts v1.0

直接上代码。

日期和 OLHC 价格所有数据都需要转成列表形式。

用Kline构造函数生成K 线对象上节已经讲过,需要注意的是第 21 行中的 xaxis_index=[0,1,2],这个设置太关键了。本图含三个子图

苹果股票的 K 线图(index 0)

标普 500 的折线图 (index 1)

恐慌指数的折线图 (index 2)

上面设置是 index为 1 和 2 的两幅图的数据局部伸缩跟着 index 0 那幅图,这样就实现了用一根 x 轴的 slider 可以任意缩放三幅图的数据。

用Line构造函数生成线对象上节已经讲过,需要注意的是第 34 和 54 行,用 MarkPointOpts 选项标识出 SPX 的最小值和 VIX 的最大值。

第 57 行用Grid构造函数来生成网格对象 grid_chart,用来组合上面的三幅图。

接下来一个个加上 AAPL K 线(第 69-72 行)、 SPX 折线(第 73-76 行)和 VIX 折线(第 77-80 行),注意里面 GridOpts 选项里的位置参数。

最后(第 82 行)在 notebook 里展现 grid_chart。

3

股价 K 线图 + 交易量柱状图

数据

本小节使用标准普尔 500 指数 (SPX) 在 2018-02-26 到 2019-02-26 的数据。

PyEcharts v1.0

首先整理一下数据,比如将它们转换成列表形式,等等。

date= pd.to_datetime(data.index).strftime( '%Y/%m/%d').tolist

price= data[[ 'Open', 'Close', 'Low', 'High']].values.tolist

close= data[ 'Close']

volume= data[ 'Volume'].values.tolist

先用 Kline构建 K 线,这里面的内容最丰富。

重点:

第 7 行- 添加用 Hex 字符串表示的红和绿两种颜色,对应着 K线涨和跌的颜色。

第 22-37 行- 添加两个「数据区域缩放」功能,一个看的到(用鼠标拉缩图最下面的 slider),一个看不到(用鼠标直接在图中拉缩),并且设置 xaxis_index =[0,1],表示用 K 线图(index 0)来控制柱状图(index 1)。

第 39-46 行- 将两幅图的提示框合并在一起(第 41 行这个设置太牛逼)。

第 57-67 行-坐标轴指示器配置和区域选择组件配置使得数据和轴可以一起联动。

再用 Line构建两条移动平均线,没什么可说的,用 pandas 里面的 rolling 函数计算了 MA5 和 MA20。

再用 Bar构建交易量柱状图,注意第 112-115 行代码,这些设置为了不显示柱状图的 x 轴上的信息。

最后将 K 线图、两条移动均线图和交易量柱状图组合。

看效果吧。

4

总结

太累了不想总结了,对 pyecharts v1.0 记着一点就行了:

一切皆配置(options),细节都在里面。

其他的都可以查文档,或者在函数中按“shift + tab”来查看有那些参数。

《R语言数据可视化之美》增强版

责任编辑:

python第七关再来一盘_盘一盘 Python 系列 7 - PyEcharts (v1.0)相关推荐

  1. python第七关再来一盘_7、 Python系列,七,的,集合

    集合 1.什么是集合 我们可以把集合看作是没有存储value的字典,也就是说可以把集合看作是只有key的字典. 我们知道字典中的key它必须是不可变的类型,因为我们要根据key调用哈希函数hash() ...

  2. python第七关再来一盘_python:第3关:霍格沃茨来信(互动沟通)

    图片发自简书App要想走得更远,我们已经要掌握Python的代码逻辑,利用正确的[数据]和合理的[逻辑]构造命令,最后还需[回应]计算机,[输入]自己的信息.而这个传递信息的[回应]动作就是input ...

  3. python第七关再来一盘_Python爬虫自学系列(七) — 项目实战篇(一)

    文章目录 前言 流程 第一步,打开网站 第二步,分析网站 分析json包 获取数据并简单处理 前言 之所以标题不说是爬什么网,主要是怕大家看了标题以为是之前那篇的返稿.其实不是啊. 这次爬的是腾讯的暑 ...

  4. 老男孩python全栈9期全套视频_[全套视频] 老男孩Python全栈7期:Flask全套组件及原理剖析视频教程,全套视频教程学习资料通过百度云网盘下载...

    目录├─1398 T* * I K, E% T│ ├─01 python fullstack s7day139 课前分享之找一个对标的人.mp4│ ├─02 python fullstack s7da ...

  5. python3.7 百度网盘_编程开发工具Python v3.7.0 32/64位免费正式版下载[网盘资源] - 艾薇下载站...

    Python3.7.0是一款超好用的面向对象编程的语言功能,也是一种简单易学却功能强大的编程语言,对于初学者来说,作为入门语言可以说是十分合适了.不像是C语言.C#语言一样,晦涩难懂,要求专业性比较高 ...

  6. 黑马传智python基础班课程_fb238 17年_传智黑马Python

    fb238 17年_传智黑马Python 文件大小:7.39GB  文件类型:MP4 文件数量:50 --/资源热下载站/Vip教程/编程开发/Python/Fb238 17年_传智黑马Python/ ...

  7. python使用复合语句def创建函数对象_【收藏】Python实用技巧-成为Pythoner必经之路...

    前言 本文主要记录 Python 中一些常用技巧,所描述的是告诉你怎么写才是更好?  如果你并不熟悉Python语法,希望你能在下面代码片段中看到Python的简单.优雅; 如果你象我这样,对 Pyt ...

  8. python国内谁的书最好看_强烈建议|转行Python最好看一下这篇文章

    Python现在非常火,语法简单而且功能强大,很多同学都想学Python!最近陆陆续续有很多小伙伴问我,学Python到底应该做什么,从事哪种岗位.下面是我们工作圈里面一些同学的苦恼: 一转行要趁早 ...

  9. python爬虫有学c的必要吗_可以一边学python爬虫一边学c语言吗?

    数据结2113构和算法并不是一门语言,你可以说有了Python 不用5261学C或者4102C++了,但是不能说不需要学数据结构了,因为它是所有语1653言的基础.看你学Python的用途,如果你学P ...

最新文章

  1. 十进制字符串转十六进制字符串
  2. 未来到底是什么样子?
  3. SQL Server备份的三个恢复模型
  4. 获取所有栈的信息,只有最上面的和最下面的,但是不能获取栈中间的activity信息...
  5. jquery知识巩固
  6. 几个有用的word小技巧,保准提升效率~
  7. java 复制文本内容_基于java文本复制的7种方式总结
  8. android studio spellchecker,Exclude files from Android Studio lint spell checker
  9. 5G加速向纵深发展 中国电信联合产业链开展“5G创新终端商用合作行动”
  10. shell脚本编程之循环控制语句(continue/break/sleep)
  11. python上传excel文件_POST上传的excel(xls)文件,如何直接读进pandas,避免写入到磁盘?...
  12. mapxtreme 查找指定位置的图元
  13. Microsoft Visio 2010 简体中文版官方版
  14. 【C++】万年历程序
  15. 看到一份名单发现很多公司都和自己发生了或多或少的联系
  16. 建立一个被称为sroot()的函数,返回其参数的二次方根,重载sroot()三次,让它返回整数,长整数与双精度的二次方根
  17. 乘法鉴相器的matlab仿真,基于COSTAS环的载波恢复技术
  18. vue-study-1 mvx模式
  19. 博士申请 | 港中深韩晓光课题组招收与华为中央媒体院联合培养博士生
  20. 选修课:唐宋词课堂鉴赏笔记01

热门文章

  1. E680g手机电话本起死回生记
  2. 计算机公式大全日期与时间函数,09年计算机等级辅导:日期时间函数
  3. hbase 重启regionserver报错 Call queue is full on xxxx,16000,1611197476326, too many items queued
  4. 日常工作,完全无需付费软件(Windows除外)
  5. Cisco3750堆叠配置
  6. Unity创建2.5D地图 【1】
  7. 离线启用.NET3.5
  8. pandas文件读取与存储
  9. mimikatz抓取密码实战
  10. 黎明杀机手游注册登陆详解