天天看点

plotly绘制散点图

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()函数就是代表画离线的交互图的意思。

当这代码运行完成后,会自动打开浏览器,然后就会有一个图形出来, 图形如下:

plotly绘制散点图

在这个图的右上角有很多工具,我不一一介绍了, 你自己点一点, 就会看到了。很有趣。

第三步:同时画多个数据

#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的文件夹内

plotly绘制散点图

第三步、画两个数据,分别表示出来

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格式的文件

plotly绘制散点图

第四步:如何设计坐标轴:请看下面的例子

下面这个代码有问题就是在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绘制散点图

第五个:如果要画的数据有很多怎么办,比如有几千万个。那岂不是很慢?

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绘制散点图

好了, 关于plotly来画散点图, 就介绍到这么的, 好好找一找前面几个code的规律, 你就能摸清楚它们的内在联系了

各位:如果遇到运行我的代码有问题, 欢迎留言, 但是基本上是因为你没有新建一个文件夹叫sp, 我是为了方便,将这些html文件都保存到那个文件夹里面, 所以在所有的代码里的filename这个参数里面,有sp的都可以删掉, 还要记得删掉多出来的斜杠————/