《基于plotly的可视化绘图》笔记2

《python数据分析 基于plotly的动态可视化绘图》, 孙洋洋 王硕 邢梦来 袁泉 吴娜著, 电子工业出版社.

看看第一篇就够了,主要是在说基本的画图函数和多子图。
到这里就像是强迫症不写完难受了。

有些章节目前对我来说还是有些遥远,所以我只写23496章和visdom,av8d噶油.

plotly与pandas

可以直接识别pandasdataframe或者series

简单案例

线形图、散点图、柱状图

线形图

线形图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import plotly as py 
import plotly.graph_objs as go
import pandas as pd
import numpy as np

pyplt = py.offline.iplot

N = 500
x = np.linspace(0, 1, N)
y = np.random.randn(N)
df = pd.DataFrame({'x': x, 'y': y})
df.head()

data = [
go.Scatter(
x=df['x'],
y=df['y']
)
]

url = pyplt(data)

散点图

散点图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import plotly as py 
import pandas as pd

pyplt = py.offline.iplot

df_50 = pd.read_csv('../Chapter04/dat/000016.csv', index_col=['date'])
df_50.sort_index(inplace=True) # 排序
df_50 = df_50.loc['2017-01-03':,:]
df_300 = pd.read_csv('../Chapter04/dat/000300.csv', index_col=['date'])
df_300.sort_index(inplace=True)
df_300 = df_300.loc['2017-01-01':]

fig = {
'data': [
{
'x': df_50.index,
'y': df_50.volume,
'mode': 'markers',
'name': '上证50'},
{
'x': df_300.index,
'y': df_300.volume,
'mode': 'markers',
'name': '沪深300'}
],
'layout': {
'xaxis': {'title': '时间',
# 'type': 'log',
},
'yaxis': {'title': "成交量"}
}
}

url = pyplt(fig)

柱状图

柱状图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import plotly as py  
import plotly.graph_objs as go
import pandas as pd
import numpy as np

pyplt = py.offline.iplot

N = 40
x = np.linspace(0, 1, N)
y = np.random.randn(N)
df = pd.DataFrame({'x': x, 'y': y})
df.head()

data = [
go.Bar(
x=df['x'],
y=df['y']
)
]

url = pyplt(data)

使用cufflinks绘图

cufflinks的作用是改变pandas默认的呈现模式matplotlibplotly
安装cufflinks

1
!pip install cufflinks -i https://pypi.tuna.tsinghua.edu.cn/simple

然后运行代码。

方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import chart_studio.plotly as py
import cufflinks as cf
import pandas as pd

cf.set_config_file(offline=True, theme='ggplot')


N = 500
x = np.linspace(0, 1, N)
y = np.random.randn(N)
df = pd.DataFrame({'x': x, 'y': y})
df.set_index('x',inplace=True)

df.iplot(kind='scatter')

cufflinks

import cufflinks as cf

设置pandas的输入模式

cf.set_config_file(offline=True, theme='ggplot')

cf.getThemes()可以获取当前版本所有可支持的主题。
并且cf.set_config_file只需要在jupyter里出现一次,这是个全局变量函数。

绘制图形

df.iplot(kind='scatter')

报错

1
2
3
The plotly.plotly module is deprecated,
please install the chart-studio package and use the
chart_studio.plotly module instead.

直接在jupyter里输入:

1
!pip install chart-studio -i https://pypi.tuna.tsinghua.edu.cn/simple

后面都需要用import chart_studio.plotly as py替换import plotly.plotly as py

快速获取数据

可以用datagen来获取bar、pie、scatter、ohlc等图的数据。等多查询dir(cf.datagen)

1
2
3
4
5
6
7
8
9
10
import chart_studio.plotly as py
import cufflinks as cf
import pandas as pd

cf.set_config_file(offline=True, theme='polar')

df = cf.datagen.scatter() # 生成散点图数据


df.iplot(kind='scatter', mode='markers', x='x', y='y')

datagen

自定义绘图

完成一些常见设置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import chart_studio.plotly as py
import cufflinks as cf
import pandas as pd

cf.set_config_file(offline=True, world_readable=True)


df = cf.datagen.lines(n_traces=3,columns=['one','two','three']) # 生成一个3列的DataFrame(默认5列)。

colors = ['red', 'blue', 'black'] # 自定义每条线的颜色
dashes = ['solid', 'dash', 'dashdot'] # 自定义每条线的Style
widths = [2, 4, 6] # 自定义每条线的宽度

plot_url = df.iplot(kind='scatter', mode='lines', colors=colors, dash=dashes,width=widths,xTitle='日期',yTitle='数量',title='自定义绘图')

自定义绘图

基本图形绘制

可以输入df.iplot?进行学习。
下面的案例真是又简单又好看,惊了。

柱状图

柱状图

1
2
3
4
5
6
import chart_studio.plotly as py
import cufflinks as cf

cf.set_config_file(offline=True, world_readable=True, theme='ggplot')
df = cf.datagen.bars()
df.iplot(kind='bar')

层叠柱状图

层叠柱状图

1
2
3
4
5
6
7
8
import chart_studio.plotly as py
import cufflinks as cf


cf.set_config_file(offline=True, world_readable=True, theme='ggplot')
df = cf.datagen.bars(n_categories=4,columns=['A', 'B', 'C', 'D'])

df.iplot(kind='bar', barmode='stack')

散点图

散点图

1
2
3
4
5
6
7
import chart_studio.plotly as py
import cufflinks as cf

cf.set_config_file(offline=True, world_readable=True)
df = cf.datagen.lines(2, columns=['中信证券','招商证券'])
df.iplot(kind='scatter',mode='markers',size=10,symbol='x',colorscale='paired',
xTitle='日期',yTitle='每股盈利增长率',title='散点图')

价差图

价差图

1
2
3
4
5
import cufflinks as cf

cf.set_config_file(offline=True, world_readable=True)
df= cf.datagen.lines(2,columns=['万科A','中粮地产'])
df.iplot(kind='spread',xTitle='日期',yTitle='收益率',title='价差图')

直方图

直方图

1
2
3
4
5
6
import cufflinks as cf

cf.set_config_file(offline=True, world_readable=True)

df= cf.datagen.histogram(2)
df.iplot(kind='histogram',opacity=.75,title='直方图')

时序子图

时序子图

1
2
3
4
5
6
7
import cufflinks as cf

cf.set_config_file(offline=True, world_readable=True, theme='pearl')

df=cf.datagen.lines(4)

df.iplot(subplots=True, shape=(4,1), shared_xaxes=True, fill=True)

3D散点图

3D散点图

1
2
3
4
5
6
7
8
import cufflinks as cf

cf.set_config_file(offline=True, world_readable=True)

df = cf.datagen.scatter3d(2,150)
df.iplot(kind='scatter3d',x='x',y='y',z='z',size=15,categories='categories',text='text',
title='3D散点图',colors=['blue','pink'],width=0.5,margin=(0,0,0,0),
opacity=1)

总结

艾西,pandas这章跟我想的还是不太一样,有点失望。
看来具体理解还得自己去尝试,感觉没有学到预期的东西,cufflinks非常方便,但可能也只是限于理解绘图函数吧。

pyecharts绘图示例

而且pyecharts的效果也是很好的,还可以画动态图,下面举个例子.

line

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from pyecharts import Line, Bar
# 折线图, 日均积数

line = Line('积数按季度变化图') # 图的名字
xii = ['20160930', '20161231', '20170331', '20170630', '20170930', '20171231', '20180331', '20180630', '20180819']
yii = ['13156337.93',
'39318037.75',
'59714025.06',
'63307896.71',
'120550973.1',
'130784306.8',
'191504839.2',
'242483066',
'266377661.4']
line.add("日均积数", xii, yii, mark_line=["average"], mark_point=["max", "min"])
line.show_config()
line.render()

会在当前文件夹生成一个html文件。