對於python使用者,plotly不僅可以從原生的python獲得支援,如果你正在使用matplotlib,pandas等庫,plotly也有專門為其量身定製的介面。
plotly安裝:這裡參照:
在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]]
得到下圖
歡迎使用CSDN markdow
本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...
歡迎毛毛與妞妞使用CSDN markdown編輯器
建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...
歡迎使用CSDN markdow1n編輯器
本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...