Visdom 介紹

用於創建,組織和共享實時豐富數據可視化的靈活工具。支持Python。

  • 概述
  • 概念
  • 設置
  • 用法
  • API
  • 注意事項
  • 貢獻

API

要快速瞭解visdom的功能,請查看example目錄,或閱讀以下詳細信息。

Visdom Arguments(僅限Python)

python visdom客戶端有以下幾種選擇:

  • server:visdom服務器的主機名(默認值:'http://localhost')
  • port:visdom服務器的端口(默認值:8097)
  • base_url:基本visdom服務器url(默認:/)
  • env:沒有提供env時要繪製的默認環境(默認是main)
  • raise_exceptions:失敗時引發異常,而不是打印它們(默認值:"True"(性能好))
  • log_to_filename:如果不是全部,則將所有繪圖和更新事件記錄到給定文件中(附加模式),以便以後可以使用replay_log來重放它們(默認值:"None")
  • use_incoming_socket:啟用套接字以從Web客戶端接收事件,允許用戶註冊回調(默認值:"True")
  • http_proxy_host:已棄用。使用Proxies參數可獲得完整的代理支持。
  • http_proxy_port:已棄用。使用Proxies參數可獲得完整的代理支持。
  • username:用於驗證的用戶名,如果服務器以-enable_login開頭(默認值:None)
  • password:用於驗證的密碼,如果服務器以-enable_login開頭(默認:None)
  • proxies:字典映射協議,用於在每個請求上使用的代理URL(例如{http:foo.bar:3128})。(默認值:"無")
  • offline:標記為在脫機模式下運行visdom,在該模式下,所有請求都記錄到文件而不是服務器上。需要設置"logtofilename"。在離線模式下,所有不創建或更新繪圖的visdom命令都將簡單地返回True。(默認值:"False")

其他選項當前未使用(端點,ipv6)或用於內部功能。

基本功能

Visdom提供以下基本的可視化功能:

  • vis.image:圖片
  • vis.images:圖像列表
  • vis.text:任意HTML
  • vis.properties:屬性網格
  • vis.audio:音頻
  • vis.video:視頻
  • vis.svg:SVG對象
  • vis.matplot:matplotlib圖
  • vis.save:序列化狀態服務器端

繪圖

我們包裝了幾種常見的繪圖類型,以輕鬆創建基本的可視化效果。這些可視化由Plotly(https://plot.ly/)提供支持。

當前支持以下API:

  • vis.scatter:2D或3D散點圖
  • vis.line:線圖
  • vis.stem:stem圖
  • vis.heatmap:熱圖
  • vis.bar:條形圖
  • vis.histogram:直方圖
  • vis.boxplot:箱線圖
  • vis.surf:表面圖
  • vis.contour:等高線圖
  • vis.quiver:顫動圖
  • vis.mesh:網格圖

通用圖

請注意,服務器API遵循"數據"和"佈局"對象的Plotly約定,因此你可以產生自己的任意"Plotly"可視化效果:

<code>import visdomvis = visdom.Visdom()trace = dict(x=[1, 2, 3], y=[4, 5, 6], mode="markers+lines", type='custom',             marker={'color': 'red', 'symbol': 104, 'size': "10"},             text=["one", "two", "three"], name='1st Trace')layout = dict(title="First Plot", xaxis={'title': 'x1'}, yaxis={'title': 'x2'})vis._send({'data': [trace], 'layout': layout, 'win': 'mywin'})/<code>


其他

  • vis.close:按ID關閉窗口
  • vis.deleteenv:通過envid刪除環境
  • vis.win_exists:通過ID檢查窗口是否已存在
  • vis.getenvlist:獲取服務器上所有環境的列表
  • vis.win_hash:獲取窗口內容的md5哈希值
  • vis.getwindowdata:獲取窗口的當前數據
  • vis.check_connection:檢查服務器是否已連接
  • vis.replay_log:從提供的日誌文件中重播操作

細節

Visdom 介紹 | 下

基礎內容

vis.image

該函數繪製一個"img"。它以CxHxW張量的img作為輸入

支持以下opts:

  • jpgquality:JPG的質量(number 0-100)。如果已定義,圖像將另存為JPG以減小文件大小。如果未定義,圖像將另存為PNG。
  • caption:圖片的標題
  • store_history:將所有圖像存儲在同一窗口中,並在底部附加一個滑塊,使你可以選擇要查看的圖像。將新圖像發送到具有歷史記錄的圖像時,必須始終提供此選項。

注意你可以在圖像窗格上使用alt查看光標的x/y座標。你也可以按ctrl鍵滾動縮放,按住alt鍵滾動可以垂直平移,按住alt鍵滾動則可以水平平移。在窗格內雙擊以將圖像恢復為默認值。

vis.images

此函數繪製"圖像"列表。它需要一個輸入"BxCxHxW"張量或一個"圖像列表",且大小均相同。它使圖像的尺寸為(B/nrow,nrow)。

支持以下參數和opts:

  • nrow:連續的圖像數量
  • padding:在圖片周圍填充,在所有4條邊均等填充
  • opts.jpgquality:JPG的質量(number 0-100)。如果已定義,圖像將另存為JPG以減小文件大小。如果未定義,圖像將另存為PNG。
  • opts.caption:圖片的標題

vis.text

此函數在框中打印文本。你可以使用它嵌入任意HTML。它以"text"字符串作為輸入。目前不支持特定的opts。

vis.properties

此函數在窗格中顯示可編輯的屬性。屬性應該是字典列表,例如:

<code>    properties = [        {'type': 'text', 'name': 'Text input', 'value': 'initial'},        {'type': 'number', 'name': 'Number input', 'value': '12'},        {'type': 'button', 'name': 'Button', 'value': 'Start'},        {'type': 'checkbox', 'name': 'Checkbox', 'value': True},        {'type': 'select', 'name': 'Select', 'value': 1, 'values': ['Red', 'Green', 'Blue']},    ]/<code>

支持的類型:

  • text:字串
  • number:十進制數字
  • button:標有"值"的按鈕
  • checkbox:布爾值呈現為複選框
  • select:多個值選擇框 value:所選值的ID(從零開始) values:可能值的列表

在屬性值更新時調用回調:

  • event_type:"PropertyUpdate"
  • propertyId:在properties列表中的位置
  • value:新值

目前不支持特定的opts。

vis.audio

此函數播放音頻。它以音頻文件名作為輸入文件或包含波形的"N"張量("Nx2"矩陣用於立體聲音頻)。該函數不支持任何特定於繪圖的opts。

支持以下opts:

  • opts.sample_frequency:採樣頻率(integer> 0;默認= 44100)

已知問題:Visdom使用scipy將張量輸入轉換為wave文件。一些已知版本的Chrome不能播放這些wave文件(Firefox和Safari可以正常工作)。

vis.video

此函數播放視頻。它以視頻的文件名作為輸入video或LxHxWxC大小的張量包含視頻的所有幀作為輸入。函數不支持任何特定於繪圖的opts。

支持以下opts:

  • opts.fps:視頻的FPS(integer> 0;默認= 25)

注意:使用tensor輸入要求ffmpeg已安裝並工作。你能否播放視頻取決於你使用的瀏覽器:在OGG容器中支持Theano編解碼器(Chrome支持此函數)。

vis.svg

該函數繪製一個SVG對象。它以SVG字符串svgstr或SVG文件svgfile的名稱。該函數不支持任何特定的opts。

vis.matplot

此函數繪製Matplotlibplot。函數支持一個特定於繪圖的選項:"可調整大小"。

注意:設置為"True"時,將使用窗格。你需要安裝beautifulsoup4和lxml軟件包。

注意:matplot的渲染後端與繪圖中的繪圖不同,效率較低。使用過多的Matplot窗口可能會降低視覺效果。

vis.plotlyplot

該函數繪製一個Plotly圖對象。它沒有顯式地採用選項,因為它假定你已經顯式配置了圖形的"佈局"。

注意你必須安裝"plotly"軟件包才能使用此函數。通常可以通過運行"pip install plotly"來安裝它。

vis.embeddings

此函數使用Barnes-Hut t-SNE算法)可視化一組特徵。

該函數接受以下參數:

  • features:張量列表
  • labels:為features提供的張量的相應標籤列表
  • data_getter = fn :(可選)一個函數,該函數將要素數組中的索引作為參數並返回張量的摘要表示。如果已設置,則還必須設置"data_type"。
  • data_type = str :(可選),當前唯一可接受的值是"html"

目前,我們假設唯一標籤的數量不超過10個,將來,我們希望為其他情況提供可選的顏色圖。

在用戶界面中,你還可以圍繞特徵子集繪製lasso(套索)。這將在所選子集上重新運行t-SNE可視化。

vis.save

此函數保存在visdom服務器上仍然有效的envs。它需要輸入要保存的環境ID列表。

繪圖

下面給出了有關繪圖函數的更多詳細信息。

繪製函數的輸入有所不同,儘管大多數函數將包含數據的張量"X"和包含可選數據變量(例如標籤或時間戳)的)張量"Y"(可選)作為輸入。所有繪圖函數均以可選的"win"作為輸入,可用於繪製到特定窗口中。每個繪圖函數還返回繪圖窗口的"win"。還可以指定添加可視化效果的"env"。

vis.scatter

此函數繪製2D或3D散點圖。它取一個Nx2或Nx3張量X作為輸入,它指定了散點圖中N個點的位置。一個包含範圍在1到K之間的離散標籤的可選的N個張量Y也可以指定,標籤將反映在標記的顏色上。

更新可以用來有效地更新現有圖的數據。使用'append'來添加數據,使用'replace'來使用新數據,或使用'remove'來刪除由name指定的跟蹤。如果不存在,使用update ='append'將創建一個圖,否則將其追加到現有圖上。如果要更新單個跟蹤,請使用"name"指定要更新的跟蹤的名稱。全部為NaN的更新數據將被忽略(可用於屏蔽更新)。

支持以下opts:

  • opts.markersymbol:標記符號(string;默認='dot')
  • opts.markersize:標記大小(number;默認='10')
  • opts.markercolor:每個標記的顏色。(torch.* Tensor;默認=nil)
  • opts.legend:table包含圖例名稱
  • opts.textlabels:每個點的文本標籤(list:默認 =None)
  • opts.layoutopts:圖形後端接受佈局的任何其他選項的字典。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}。
  • opts.traceopts:字典將跟蹤名稱或索引映射到圖形後端接受的其他選項的字典。例如traceopts = {'plotly':{'myTrace':{'mode':'markers'}}}。
  • opts.webgl:使用WebGL進行繪圖("boolean";默認="false")。如果繪圖包含太多點,則速度更快。謹慎使用,因為瀏覽器在單個頁面上最多允許兩個WebGL上下文。

opts.markercolor是具有整數值的張量。張量的大小可以為"N"或"Nx3"或"K"或"Kx3"。

  • 大小為N的張量:每個數據點的單個強度值。0=黑色,255=紅色
  • 大小為"Nx3"的張量:每個數據點的紅色,綠色和藍色強度。0,0,0=黑色,255,255,255=白色
  • "K"和"Kx3"大小的張量:不是每個數據點都有唯一的顏色,而是為特定標籤的所有點共享相同的顏色。

vis.line

此函數繪製線圖。它以一個N或NxM張量作為輸入,"Y"指定"M"行的值(連接"N"個點)繪圖。它還需要一個可選的X張量來指定相應的x軸值;X可以是N張量(在這種情況下線將共享相同的x軸值)或具有與"Y"相同的尺寸。

更新可以用來有效地更新現有圖的數據。使用'append'附加數據,'replace'使用新數據,或'remove'刪除由name指定的跟蹤。如果要更新單個跟蹤,請使用"名稱"指定要更新的跟蹤的名稱。全部為NaN的更新數據將被忽略(可用於屏蔽更新)。

支持以下opts:

  • opts.fillarea:填充線以下的區域(boolean)
  • opts.markers:顯示標記(boolean;默認=false)
  • opts.markersymbol:標記符號(string;默認='dot')
  • opts.markersize:標記大小(number;默認='10')
  • opts.linecolor:線條顏色(np.array;默認=None)
  • opts.dash:每行的行破折號類型(np.array;默認='solid'),為solid,dash,dashdot或dash之一,大小應與畫線
  • opts.legend:table包含圖例名稱
  • opts.layoutopts:圖形後端為佈局接受的任何其他選項的dict。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}。
  • opts.traceopts:dict將跟蹤名稱或索引映射到plot.ly接受的其他選項的dict。
  • opts.webgl:使用WebGL進行繪圖("boolean";默認="false")。如果繪圖包含太多點,則速度更快。謹慎使用,因為瀏覽器在單個頁面上最多允許兩個WebGL上下文。

vis.stem

此函數繪製stem圖。它以一個N或NxM張量作為輸入X,它指定M時間序列中N點的值。可以指定一個可選的包含時間戳的N或NxM張量Y以及如果Y是N張量,則所有M時間序列都假定為具有相同的時間戳。

支持以下opts:

  • opts.colormap:顏色圖(string;默認='Viridis')
  • opts.legend:table包含圖例名稱
  • opts.layoutopts:圖形後端為佈局接受的任何其他選項的dict。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}。

vis.heatmap

此函數繪製熱圖。它以一個NxM張量X為輸入,指定熱圖中每個位置的值。

支持以下opts:

  • opts.colormap:顏色圖(string;默認='Viridis')
  • opts.xmin:剪輯最小值(number;默認=X:min())
  • opts.xmax:剪輯最大值(number;默認=X:max())
  • opts.columnnames:table包含X軸標籤
  • opts.rownames:包含y軸標籤的table
  • opts.layoutopts:圖形後端為佈局接受的任何其他選項的dict。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}。
  • opts.nancolor:用於繪製NaNs的顏色。如果為"None",則將"NaN"繪製為透明。(string;默認=None)

vis.bar

此函數繪製規則的,堆疊的或分組的條形圖。它需要輸入一個N或NxM張量X來指定每個條形。如果"X"包含"M"列,則對應於每一行的值是堆疊還是分組(取決於"opts.stacked"的方式)。除了X,還可以指定一個(可選的)N張量Y。包含相應的x軸值。

當前支持以下特定於圖的opts:

  • opts.rownames:table包含x軸標籤
  • opts.stacked:在X中堆疊多列
  • opts.legend:包含圖例標籤的table
  • opts.layoutopts:圖形後端為佈局接受的任何其他選項的dict。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}。

vis.histogram

此函數繪製指定數據的直方圖。它作為輸入一個N張量X來指定要構造其的數據直方圖。

當前支持以下特定於圖的opts:

  • opts.numbins:箱數(number;默認=30)
  • opts.layoutopts:圖形後端為佈局接受的任何其他選項的dict。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}。

vis.boxplot

此函數繪製指定數據的箱形圖。它作為輸入,一個"N"或"NxM"張量"X",用於指定其中的"N"個數據值來構造"M"箱形圖。

當前支持以下特定於圖的opts:

  • opts.legend:X中每個列的標籤
  • opts.layoutopts:圖形後端為佈局接受的任何其他選項的dict。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}。

vis.surf

此函數繪製表面圖。它以一個NxM張量X為輸入。它指定表面圖中每個位置的值。

支持以下opts:

  • opts.colormap:顏色圖(string;默認='Viridis')
  • opts.xmin:剪輯最小值(number;默認=X:min())
  • opts.xmax:剪輯最大值(number;默認=X:max())
  • opts.layoutopts:圖形後端為佈局接受的任何其他選項的dict。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}。

vis.contour

此函數繪製輪廓圖。它以一個NxM張量X為輸入。它指定等高線圖中每個位置的值。

支持以下opts:

  • opts.colormap:顏色圖(string;默認='Viridis')
  • opts.xmin:剪輯最小值(number;默認=X:min())
  • opts.xmax:剪輯最大值(number;默認=X:max())
  • opts.layoutopts:圖形後端為佈局接受的任何其他選項的dict。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}。

vis.quiver

該函數繪製一個抖動圖,其中箭頭的方向和長度由NxM張量X和y決定。可以提供兩個可選的NxM張量gridX和gridY,指定箭頭的偏移量;默認情況下,箭頭將在常規網格上顯示。

支持以下opts:

  • opts.normalize:最長箭頭的長度(number)
  • opts.arrowheads:顯示箭頭(boolean;默認=true)
  • opts.layoutopts:圖形後端為佈局接受的任何其他選項的dict。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}。

可見網格

此函數從一組頂點中定義的一組頂點繪製網格圖"Nx2"或"Nx3"矩陣"X",以及在可選"Mx2"或"Mx3"矩陣Y。

支持以下opts:

  • opts.color:顏色(string)
  • opts.opacity:多邊形的不透明度("number"介於0和1之間)
  • opts.layoutopts:圖形後端為佈局接受的任何其他選項的dict。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}。

自定義圖

繪圖功能採用可選的opts表作為輸入,可用於更改(通用或特定於繪圖的)繪圖屬性。所有輸入參數都在一個表中指定;輸入參數根據輸入表中的鍵進行匹配。

下列opts是通用的,因為它們對於所有可視化都是相同的(plot.image,plot.text,plot.video和plot.audio除外):

  • opts.title:圖形標題
  • opts.width:圖形寬度
  • opts.height:圖形高度
  • opts.showlegend:顯示圖例("true"或"false")
  • opts.xtype:x軸的類型('linear'或'log')
  • opts.xlabel:x軸的標籤
  • opts.xtick:在x軸上顯示刻度(boolean)
  • opts.xtickmin:x軸上的第一個刻度(number)
  • opts.xtickmax:x軸上的最後一個刻度(number)
  • opts.xtickvals:x軸上的刻度線位置("number" s的"table"表)
  • opts.xticklabels:勾選x軸上的標籤(strings的table)
  • opts.xtickstep:x軸刻度之間的距離(number)
  • opts.xtickfont:x軸標籤的字體(字體信息的字典(https://plot.ly/javascript/reference/#layout-font))
  • opts.ytype:y軸的類型('linear'或'log')
  • opts.ylabel:y軸的標籤
  • opts.ytick:在y軸上顯示刻度(boolean)
  • opts.ytickmin:y軸上的第一個刻度(number)
  • opts.ytickmax:y軸上的最後一個刻度(number)
  • opts.ytickvals:y軸上的刻度位置(number類型的s的table)
  • opts.yticklabels:在y軸上打勾標籤(string類型的s的table)
  • opts.ytickstep:y軸上刻度線之間的距離(number)
  • opts.ytickfont:y軸標籤的字體(字體信息的字典(https://plot.ly/javascript/reference/#layout-font))
  • opts.marginleft:左邊距(以像素為單位)
  • opts.marginright:右邊距(以像素為單位)
  • opts.margintop:上邊距(以像素為單位)
  • opts.marginbottom:底邊距(以像素為單位)

其他選項是特定於可視化的,並在API手冊中進行了描述。

其他

vis.close

此函數關閉特定的窗口。它需要輸入窗口ID"win"和環境ID"eid"。使用win作為None關閉環境中的所有窗口。

vis.delete_env

此函數將完全刪除指定的環境。它需要env ideid作為輸入。

注意:delete_env刪除環境中的所有數據,並且是不可撤銷的。除非絕對要刪除環境,否則請勿使用。

vis.fork_env

此函數派生類似於UI功能的環境。

參數:

  • prev_eid:我們要fork的環境ID。
  • eid:將用fork創建的新環境ID。

注意:fork_env如果不存在的env被fork,則會發生異常。

vis.win_exists

該函數返回一個布爾值,指示服務器上是否已經存在窗口"win"。如果出現問題,則返回None。

可選參數:

  • env:搜索窗口的環境。默認為None。

vis.getenvlist

此函數在調用時返回服務器上所有環境的列表。它不帶參數。

vis.win_hash

如果服務器上存在窗口"win"的內容,則此函數返回md5哈希值。否則返回None。

可選參數:

  • env:搜索窗口的環境。默認為None。

vis.getwindowdata

此函數返回給定窗口的窗口數據。如果win為None,則返回環境中所有窗口的數據。

參數:

  • env:搜索窗口的環境。
  • win:要為其返回數據的窗口。設置為"無"以檢索環境中的所有窗口。

vis.check_connection

此函數返回布爾值,指示是否已連接服務器。它接受可選參timeout_seconds數秒以等待服務器啟動。

vis.replay_log

此函數獲取虛擬日誌的內容,並將其重播到當前服務器以恢復狀態或處理所有丟失的條目。

參數:

  • log_filename:重播日誌文件的內容。

許可

visdom的許可是LICENSE文件中的Creative Commons Attribution-NonCommercial 4.0 International Public許可。

關於Lua Torch支持的注意事項

在v0.1.8.4之後,不再支持Lua Torch。如果你想使用Torch支持,則需要下載該版本。你可以在此處按照使用說明進行操作,但不再受正式支持。

貢獻

請參閱在CONTRIBUTING.md的貢獻

致謝

Visdom受到display之類的工具的啟發,並依賴Plotly(https://plot.ly/)作為繪圖前端。


分享到:


相關文章: