python可交互式可视化
具体内容可以到plotly上查看,但是上面的案例有的不适合,比如要求在线画图,但是我就不喜欢在线画图!!!因此我将一些例子进行转换, 基本上在电脑本地就可以了
接下来进行简单的code实践
第一步查看plotly版本:
>>> import plotly
>>> plotly.__version__
'3.4.2'
我的版本是3.4.2,如果你的版本比我低,希望你可以更新一些,网上都有教程
第二步:写一个简单的code
import plotly
import plotly.plotly as py
import plotly.graph_objs as go
import numpy as np
N = 1000
random_x = np.random.randn(N)
random_y = np.random.randn(N)
#Create a trace
trace = go.Scatter(x=random_x, y=random_y, mode='markers')
data = [trace]
plotly.offline.plot(data, filename='basic-scatter.html')
给大家介绍一下代码的含义:
前几个就是导入基本的工具包,基本上我每次都要导入, 然后就是生成两个数据,分别叫random_x 和random_y 。然后就新建一个trace。 我也没查trace是什么意思,这个trace可能就是储存数据的。 然后将[trace] 给data。 然后再plotly.offline.plot()函数。这个函数里面的data就是你要发出来的数据, 里面的filename就是你这个运行出在本地的文件的名字, 这个文件类型就是html格式的文件, 用浏览器都可以打得开。要记住这个plotly.offline.plot()函数就是代表画离线的交互图的意思。
当这代码运行完成后,会自动打开浏览器,然后就会有一个图形出来, 图形如下:
在这个图的右上角有很多工具,我不一一介绍了, 你自己点一点, 就会看到了。很有趣。
第三步:同时画多个数据
#line and scatter Plots
import plotly
import plotly.plotly as py
import plotly.graph_objs as go
import numpy as np
N = 100
random_x = np.linspace(0, 1, N)
random_y0 = np.random.randn(N) + 5
random_y1 = np.random.randn(N)
random_y2 = np.random.randn(N) - 5
#Create traces
trace0 = go.Scatter(x=random_x, y=random_y0, mode='markers', name='markers')
trace1 = go.Scatter(
x=random_x, y=random_y1, mode='lines+markers', name='lines+markers')
trace2 = go.Scatter(x=random_x, y=random_y2, mode='lines', name='lines')
data = [trace0, trace1, trace2]
plotly.offline.plot(data, filename='scatter-mode.html')
首先看这个code, random开头的名字都是数据名, 我们可以看到trace0使用了random_x 和random_y0 数据来画散点图。 (为什么是说散点图:因为你可以看到go.Scatter()函数里面有个mode='markers',意思就是说:模式是点模式。我觉得单单从英文意思上就可以看出来)。 依次类推:你可以看到在trace1中用到了mode=‘lines+markers', 这个意思就是说使用了点和线相结合的方式。 接下来要注意的是我们使用的是因为中括号将三个trace整合到一起。命名为data,然后将data放入plotly.offline.plot()函数中, 并将这个文件命名为’scatter-mode.html, 这时候也会打开浏览器, 然后图形会出现。图形如下:
你可能会疑惑,这个文件到在哪里呢?其实你可以通过浏览器的搜索栏看到。 就是我下面的白色的区域:显示为wod文件夹下documents文件夹里面的名叫sp的文件夹内
第三步、画两个数据,分别表示出来
import plotly.plotly as py
import plotly.graph_objs as go
import plotly
import numpy as np
N = 500
trace0 = go.Scatter(
x=np.random.randn(N),
y=np.random.randn(N) + 2,
name='Above',
mode='markers',
marker=dict(
size=10,
color='rgba(152, 0, 0, 0.8)',
line=dict(
width=2,
color='rgb(0, 0, 0)'
)
)
)
trace1 = go.Scatter(
x=np.random.randn(N),
y=np.random.randn(N) - 2,
name='Below',
mode='markers',
marker=dict(
size=10,
color='rgba(255, 182, 193, 0.9)',
line=dict(width=2,
)
)
)
data = [trace0, trace1]
layout = dict(
title='Styled Scatter',
yaxis=dict(zeroline=False), xaxis=dict(zeroline=False))
plotly.offline.plot(data, layout, filename='./styled-scatter.html')
运行结果如下:要领就是先将数据放到go.Scatter()里面,然后将这东西放到英文的中括号中, 如何需要对坐标轴或者标签进行设置, 那么就使用字典, 最后将这两个东西放到plotly.offline.plot()中,记住加入filename,这个意思就是你将东西储存到哪里。记住保存为html格式的文件
第四步:如何设计坐标轴:请看下面的例子
下面这个代码有问题就是在pd.read_csv()读取这个网络上的csv文件, 如果失败的话, 复制链接然后再浏览器中打开,然后鼠标右键点击另存为,保存为csv文件, 然后这时候就可以读取本地文件,真的,一点报错都没有。
在下面的变量c,这个意思就是获取颜色, 不是说它代表颜色, 就是它代表一个字符串,当他放入这个图层中的时候,自动就获取出他对于的颜色了。
第一个for循环 对于i来说,就是不断地新建一个trace, 建立了多少个?答案是53个要是问为什么,请好好理解range()函数.hhhh
layout这个字典里面包含着字典,yaxis和xaxis就不介绍了 ,就是代表数轴的意思, 有matplotlib的基础的人都知道。
所以这么介绍很简单吧
import plotly
import plotly.plotly as py
import plotly.graph_objs as go
import random
import numpy as np
import pandas as pd
l = []
y = []
data = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/2014_usa_states.csv")
#data = pd.read_csv('D:/data/2014_usa_states.csv')
#set colors for plot
N = 53
c = ['hsl(' + str(h) + ' ,50%' + ',50%)' for h in np.linspace(0, 360, N)]
for i in range(int(N)):
y.append((2000+i))
trace0 = go.Scatter(
x=data['Rank'],
y=data['Population'] + (i*1000000),
mode='markers',
marker=dict(size=14,
line=dict(width=1),
color=c[i],
opacity=0.3),
name=y[i],
text=data['State']
)
l.append(trace0)
layout = dict(
title='Stats of USA Sattes',
hovermode='closest',
xaxis=dict(
title='Population',
ticklen=5,
zeroline=False,
gridwidth=2
),
yaxis=dict(
title='Rank',
ticklen=5,
gridwidth=2,
),
showlegend=False
)
plotly.offline.plot(l, layout, filename='./sp/2014-usa-states.html')
code运行的结果如下:
第五个:如果要画的数据有很多怎么办,比如有几千万个。那岂不是很慢?
plotly也帮你想到了。这个时候你只要将go.Scatter()函数变成go.Scattergl()函数就可以了, 哈哈哈
是不是很简单
具体代码如下:
import plotly.graph_objs as go
import numpy as np
import plotly
N = 100000
#加速,当数据很大的时候。可以使用
trace = go.Scattergl(
x=np.random.randn(N),
y=np.random.randn(N),
mode='markers',
marker=dict(
color='#FFBAD2',
line=dict(width=1)
)
)
data = [trace]
plotly.offline.plot(data, filename='./sp/compare_webgl2.html')
这个里面有10万个数据, 但是你要是运行的话,依然很快
好了, 关于plotly来画散点图, 就介绍到这么的, 好好找一找前面几个code的规律, 你就能摸清楚它们的内在联系了
各位:如果遇到运行我的代码有问题, 欢迎留言, 但是基本上是因为你没有新建一个文件夹叫sp, 我是为了方便,将这些html文件都保存到那个文件夹里面, 所以在所有的代码里的filename这个参数里面,有sp的都可以删掉, 还要记得删掉多出来的斜杠————/