欢迎使用CSDN-markdown编辑器

对于Python用户,plotly不仅可以从原生的Python获得支持,如果你正在使用matplotlib,pandas等库,plotly也有专门为其量身定制的接口。

plotly安装:这里参照:http://www.cnblogs.com/wangshuo1/p/6185932.html

在anconda安装可使用:conda install plotly

首先,获得数据,
导入plotly与pandas,可以用pandas中的read_csv直接读取原始数据。

import plotly .plotly as py
import plotly.graph_objs as go
import pandas as pd
data = pd.read_csv('30_-10_full.csv')

我们可以用plotly绘制散点图,现在我们想研究前三列数据关系(MH,MH3,MH5),那么我们可以考虑其中两个数值映射到x,y轴,另一个变量值可以用颜色来表征。

aes = go.Scatter( #go.Scatter创建一个散点图或者折线图对象
x=data['MH5'] #这里定义坐标轴映射关系,MH5列对应x轴
y =data['MH3']#MH3对应y轴
mode = 'markers'#这里mode默认是由点连起来的折线图,要绘制散点图,所以设置为‘market’
marker = dict( #marker 就是定义每个点的性质,比如颜色,点的大小
color =data['MH'] #将MH值映射到点的颜色上,颜色不同代表列不同MH值
size =‘5#代表点的大小
colorscale = ‘Viridis’ #这里是颜色标度的配色方案
showscale =True #右侧显示颜色标度
}
}
py.iplot([aes]) #接受一个list对象,进行绘制

图像如下
这里写图片描述
其中有几点地方需要注意

1 整个图像的比例不是很协调,需要我们重新调整其长和宽。
2 x轴,y轴,以及右侧的图例分别代表什么含义,这个图里并没有体现。
3 这个图中的配色方案是‘Viridis’,plotly默认了不少其他美观的配色方案,具体效果可以参考本文附录三。
接下来我们就涉及到了“图层”的概念,以上的图像仅仅就是将原始数据映射到坐标轴上,如果我们还想继续设置x轴的标题,y轴的标题,以及在图像上添加一些几何图形,那么就可以往上继续添加图层——layout(这里就是ggplot2作图的思想)

layout =go.Layout(
title = '$MH_5,MH_3$' 
autosize = False #取消自动设置图像大小,下面自己调整图像长宽
width = 1000
height = 800
xaxis =dict(  #设置x轴标题
    title =‘$MH_5$’
    ),
yaxis =dict(
    title = '$MH_3$' #设置y轴标题
),
)
fig =go.Figure(data=[aes],layout=layout)#将data与layout组合为一个图像对象
py.iplot(fig)

得到图像为
这里写图片描述
我们可以往图里添加一些简单的几何图,以直线为例

line1 = dict(  #用一个字典表示图形特征
type ='line' #'line'表示线段
xref = 'x',
yref = 'y',
x0 = 200, #(x0,y0)表示线段起点,(x1,y1)表示线段终点
y0 = 100
x1 = 200
y1 = 600
Line =dict(
    color ='black' #线段颜色
    width = 2 #宽度
    )
)
line2 =  dict(  #用一个字典表示图形特征
type ='line' #'line'表示线段
xref = 'x',
yref = 'y',
x0 = 100, #(x0,y0)表示线段起点,(x1,y1)表示线段终点
y0 = 180
x1 = 519
y1 = 600
line =dict(
    color ='black' #线段颜色
    width = 2 #宽度
    )
)

同时在定义图层时加上shapes属性

layout =go.Layout(
title = '$MH_5,MH_3$' 
autosize = False #取消自动设置图像大小,下面自己调整图像长宽
width = 1000
height = 800
shapes = [line1,line2] #将定义的线段等几何图形添加到图层之中
xaxis =dict(  #设置x轴标题
    title =‘$MH_5$’
    ),
yaxis =dict(
    title = '$MH_3$' #设置y轴标题
    ),
)

这里写图片描述
接下来我需要在图像上画一些交叉点,这个plotly自身并不支持(反正我没找到),但是我们可以用两条线段来组合成一个交叉点。
于是可以定义这样一个函数,给定一个坐标,返回组成这个交叉点的两条直线,这很简单

def cross(x,y):
line1 =dict(
type = 'line'
xref = 'x'
yref ='y'
x0 = x-4, #(x0,y0)表示线段起点,(x1,y1)表示线段终点
y0 = y-5
x1 = x+4
y1 = y+5
line =dict(
    color ='black' #线段颜色
    width = 2 #宽度
    )
line2 =dict(
type = 'line'
xref = 'x'
yref ='y'
x0 = x-4, #(x0,y0)表示线段起点,(x1,y1)表示线段终点
y0 = y+5
x1 = x+4
y1 = y-5
line =dict(
    color ='black' #线段颜色
    width = 2 #宽度
    )
)
return line1,line2

将layout中的shapes换成

shapes=[line1,line2,cross(230,530)[0],cross(230,530)[1],cross(230,430)[0],cross(230,530)[1],cross(230,330)[0],cross(230,330)[1],cross(300,530)[0],cross(300,530)[1],cross(300,430)[0],cross(300,430)[1]]

得到下图
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值