簡(jiǎn)介
- 交互式繪圖工具, 提供python, R, js接口, 以R接口為例
- api類(lèi)似, 需要注意在參數(shù)中涉及子項(xiàng)的在R中使用列表, 在python中使用字典
- 支持管道符操作
%>%
, 類(lèi)似ggplot2的+
- 詳細(xì)教程參見(jiàn) (https://plotly.com/r/)
基本命令
- 基本繪圖命令:
plot_ly(data, x, y, z, type, mode...)
x
: x軸數(shù)據(jù)
y
: y軸數(shù)據(jù)
z
: z軸數(shù)據(jù) (三維圖形)
text
: 文本內(nèi)容
type
: 圖形的類(lèi)型, 包括點(diǎn)圖, 柱狀圖, 熱圖等
name
: 名稱(chēng), 在圖注中使用
alpha
: 透明度0-1, 0表示透明, 1表示不透明
size/sizes
: 點(diǎn)的大小可以指定變量(~size), 也可以使用區(qū)間表示c(10, 100)
linetype/linetypes
: 線(xiàn)的類(lèi)型
color/colors
: 圖形的顏色, 可選擇變量或預(yù)設(shè)的顏色集合
symbol/symbols
: 指定形狀, 例如symbol = ~symbol_indices
或symbols = c('circle','x','o')
stroke/strokes
: 邊框的顏色
width/height
: 圖形的寬高
showlegend
: 布爾值, 當(dāng)前trace是否顯示圖例
圖形命令 (add_trace/add_xxx)
點(diǎn)類(lèi)型 (散點(diǎn)圖, 折線(xiàn)圖, 氣泡圖...)
散點(diǎn)圖
- 指定參數(shù)
add_trace(..., type="scatter", mode="")
- 等同于
add_markers/add_lines
marker
: 指定標(biāo)記點(diǎn)的相關(guān)特征, 包括邊框, 顏色, 大小等
symbol
: 指定點(diǎn)的形狀
color
: 點(diǎn)的顏色
colorscale
: 設(shè)置色階, colorscale必須是一個(gè)數(shù)組, 設(shè)置0 ~ 1中某個(gè)區(qū)間想要使用的顏色, 至少需要最低(0)和最高(1)值的映射。例如:list(c(0.0, '#19d3f3'), c(0.333, '#e763fa'), c(0.666, '#e763fa'), c(1, '#636efa'))
返吻。(左閉右開(kāi)的區(qū)間)
opacity
: 點(diǎn)的透明度(0-1)
size
: 點(diǎn)的大小, 默認(rèn)6
line
: 傳入列表, 指定點(diǎn)的邊框特征
width
: 邊框的粗細(xì)
color
: 邊框的顏色
colorscale
: 指定色階
line
: 傳入列表, 指定線(xiàn)的特征
color
: 線(xiàn)的顏色
width
: 線(xiàn)的粗細(xì) (Default: 2)
shape
: 線(xiàn)的形狀, 可選參數(shù)有: "linear"(直線(xiàn)) | "spline"(平滑曲線(xiàn)) | "hv"(階梯曲線(xiàn)) | "vh" | "hvh" | "vhv"
smoothing
: 平滑度(0-1.3), 默認(rèn)1
simplify
: 通過(guò)刪除幾乎共線(xiàn)的點(diǎn)來(lái)簡(jiǎn)化直線(xiàn)
dash
: 設(shè)置線(xiàn)條的虛線(xiàn)樣式: "solid" | "dot" | "dash" | "longdash" | "dashdot" | "longdashdot"
connectgaps
: 應(yīng)用于折線(xiàn)圖的參數(shù), 確定所提供的數(shù)據(jù)數(shù)組中的間隙(NA)是否連接螟左。
- 同屬scatter類(lèi)型下的不同模式 (mode)
scatter類(lèi)型x與y是一一對(duì)應(yīng)的, 又有三種模式, 可以繪制散點(diǎn)圖或折線(xiàn)圖
mode="markers"
: 繪制點(diǎn)圖, 等同于add_markers
mode="lines"
: 繪制線(xiàn)圖, 等同于add_lines
mode="lines+markers"
: 散點(diǎn)圖和折線(xiàn)圖的結(jié)合
library(plotly)
plot_ly(economics, x = ~date, y = ~uempmed) %>%
add_trace(type="scatter", mode="markers", marker = list(color = "black", line = list(color = "red", width = 1)))
## head(economics)
## # A tibble: 6 x 6
## date pce pop psavert uempmed unemploy
## <date> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1967-07-01 507. 198712 12.6 4.5 2944
## 2 1967-08-01 510. 198911 12.6 4.7 2945
## 3 1967-09-01 516. 199113 11.9 4.6 2958
## 4 1967-10-01 512. 199311 12.9 4.9 3143
## 5 1967-11-01 517. 199498 12.8 4.7 3066
## 6 1967-12-01 525. 199657 11.8 4.8 3018
## 等同于以下命令
plot_ly(economics, x = ~date, y = ~uempmed) %>%
add_markers(marker = list(color = "black", line = list(color = "red", width = 1)))
在散點(diǎn)圖上又有許多擴(kuò)展, 將點(diǎn)連成線(xiàn)就變成了折線(xiàn)圖
plot_ly(economics, x = ~date, y = ~uempmed) %>%
add_trace(type = "scatter", mode = "lines",
line = list(color = "green", width = 2))
## 等同于以下命令
plot_ly(economics, x = ~date, y = ~uempmed) %>%
add_trace(type = "scatter", mode = "lines",
line = list(color = "green", width = 2))
也可以在折線(xiàn)圖的基礎(chǔ)上將點(diǎn)標(biāo)記出來(lái)
- 包含的trace:
marker
,line
plot_ly(economics, x = ~date, y = ~uempmed) %>%
add_trace(type = "scatter", mode = "markers+lines",
marker = list(color = "black", line = list(color = "red", width = 1)),
line = list(color = "green", width = 2))
## 等同于以下命令
plot_ly(economics, x = ~date, y = ~uempmed) %>%
add_trace(type = "scatter", mode = "lines",
line = list(color = "green", width = 2)) %>%
add_trace(type = "scatter", mode = "markers",
marker = list(color = "black", line = list(color = "red", width = 1)))
氣泡圖則是將點(diǎn)的大小和顏色與其他特征聯(lián)系起來(lái) (Bubble)
library(plotly)
data <- read.csv("https://raw.githubusercontent.com/plotly/datasets/master/school_earnings.csv")
data$State <- as.factor(c('Massachusetts', 'California', 'Massachusetts', 'Pennsylvania', 'New Jersey', 'Illinois', 'Washington DC',
'Massachusetts', 'Connecticut', 'New York', 'North Carolina', 'New Hampshire', 'New York', 'Indiana',
'New York', 'Michigan', 'Rhode Island', 'California', 'Georgia', 'California', 'California'))
## head(data)
## School Women Men Gap State
## 1 MIT 94 152 58 Massachusetts
## 2 Stanford 96 151 55 California
## 3 Harvard 112 165 53 Massachusetts
## 4 U.Penn 92 141 49 Pennsylvania
## 5 Princeton 90 137 47 New Jersey
## 6 Chicago 78 118 40 Illinois
fig <- plot_ly(data, x = ~Women, y = ~Men, text = ~School, type = 'scatter',
mode = 'markers', size = ~Gap, color = ~State, colors = 'Paired',
marker = list(opacity = 0.5, sizemode = 'diameter', line = list(color="white", width=1)))
fig <- fig %>% layout(title = 'Gender Gap in Earnings per University',
xaxis = list(showgrid = FALSE),
yaxis = list(showgrid = FALSE),
showlegend = FALSE)
fig
啞鈴圖, 將起始點(diǎn)與終止點(diǎn)用segment連接起來(lái) (Dumbbell)
- 包含的trace:
marker
,line
s <- read.csv("https://raw.githubusercontent.com/plotly/datasets/master/school_earnings.csv")
# order factor levels by men's income (plot_ly() will pick up on this ordering)
s$School <- factor(s$School, levels = s$School[order(s$Men)])
## head(s)
## School Women Men Gap
## 1 MIT 94 152 58
## 2 Stanford 96 151 55
## 3 Harvard 112 165 53
## 4 U.Penn 92 141 49
## 5 Princeton 90 137 47
## 6 Chicago 78 118 40
library(plotly)
fig <- plot_ly(s)
## add_segment添加線(xiàn)段, 指定起始位置x, y和終止位置xend, yend
fig <- fig %>% add_segments(x = ~Women, xend = ~Men, y = ~School, yend = ~School, showlegend = F,
line = list(color = "rgb(230,230,230)"))
fig <- fig %>% add_markers(x = ~Women, y = ~School, name = "Women", color = I("pink"))
fig <- fig %>% add_markers(x = ~Men, y = ~School, name = "Men", color = I("blue"))
fig <- fig %>% layout(
title = "Gender earnings disparity",
xaxis = list(title = "Annual Salary (in thousands)"),
margin = list(l = 65)
)
fig
對(duì)于多個(gè)變量, 創(chuàng)建二維散點(diǎn)圖矩陣 (Splom)
opacity
: 透明度, 0 ~ 1的區(qū)間 (Default: 1)dimensions
: 傳入列表, 指定需要繪圖的維度 (每一個(gè)維度都需要指定下面的參數(shù), 用列表包裹起來(lái))
visible
: 布爾值, 是否可見(jiàn)
label
: 設(shè)置與此splom維度對(duì)應(yīng)的標(biāo)簽
values
: 設(shè)置要繪制的值
marker
: 設(shè)置splom中點(diǎn)的特征
color
: 設(shè)置點(diǎn)的顏色
colorscale
: 設(shè)置色階
symbol
: 設(shè)置點(diǎn)的形狀
size
: 設(shè)置點(diǎn)的大小
line
: 傳入列表, 設(shè)置點(diǎn)的邊框信息
color
: 設(shè)置邊框的顏色
width
: 設(shè)置邊框的寬度
text
: 文本信息
library(plotly)
df <- read.csv('https://raw.githubusercontent.com/plotly/datasets/master/iris-data.csv')
## head(df)
## sepal.length sepal.width petal.length petal.width class
## 1 5.1 3.5 1.4 0.2 Iris-setosa
## 2 4.9 3.0 1.4 0.2 Iris-setosa
## 3 4.7 3.2 1.3 0.2 Iris-setosa
## 4 4.6 3.1 1.5 0.2 Iris-setosa
## 5 5.0 3.6 1.4 0.2 Iris-setosa
## 6 5.4 3.9 1.7 0.4 Iris-setosa
## 注意色階是左閉右開(kāi)的區(qū)間
pl_colorscale=list(c(0.0, '#19d3f3'),
c(0.333, '#e763fa'),
# c(0.333, '#e763fa'),
c(0.666, '#e763fa'),
# c(0.666, '#636efa'),
c(1, '#636efa'))
axis = list(showline=FALSE,
zeroline=FALSE,
gridcolor='#ffff',
ticklen=4)
fig <- df %>%
plot_ly()
fig <- fig %>%
add_trace(
type = 'splom',
dimensions = list(
list(label='sepal length', values=~sepal.length),
list(label='sepal width', values=~sepal.width),
list(label='petal length', values=~petal.length),
list(label='petal width', values=~petal.width)
),
text=~class,
marker = list(
color = as.integer(as.factor(df$class)) / 3,
colorscale = pl_colorscale,
size = 7,
line = list(
width = 1,
color = 'rgb(230,230,230)'
)
)
)
fig <- fig %>%
layout(
title= 'Iris Data set',
hovermode='closest',
dragmode= 'select',
plot_bgcolor='rgba(240,240,240, 0.95)',
xaxis=list(domain=NULL, showline=F, zeroline=F, gridcolor='#ffff', ticklen=4),
yaxis=list(domain=NULL, showline=F, zeroline=F, gridcolor='#ffff', ticklen=4),
xaxis2=axis,
xaxis3=axis,
xaxis4=axis,
yaxis2=axis,
yaxis3=axis,
yaxis4=axis
)
fig
柱類(lèi)型(柱狀圖, 堆積圖, 直方圖, 瀑布圖...)
柱狀圖 (Bar Charts)
- 指定參數(shù)
add_trace(..., type="bar")
- 等同于
add_bars
marker
參數(shù)指定柱子的特征, 包括邊框, 顏色等width
參數(shù)如果指定變量則表示柱子的寬度color
參數(shù)支持使用I("顏色")指定顏色/rgb(0.0.0)指定rgb顏色/rgba(0.0.0.0)指定rgb顏色和透明度orientation
: 設(shè)置條的方向, 可選"v" (豎直) / "h" (水平)marker
: 傳入列表, 指定柱子的特征, 包括顏色, 邊框等
line
: 傳入列表, 指定邊框的顏色, 粗細(xì)等特征
color
: 指定柱子的顏色
opacity
: 指定柱子的透明度
- layout中對(duì)于柱狀圖的設(shè)置
barmode
: 設(shè)置直方圖的展示形式, 可選參數(shù): "stack" (堆疊展示) | "group" (分組展示) | "overlay" (覆蓋展示) | "relative" (相對(duì)高度) (Default: "group")
bargap
: 每個(gè)柱子的間隔
barnorm
: bar的標(biāo)準(zhǔn)化形式, 可選參數(shù): "" | "fraction" (分?jǐn)?shù)) | "percent" (百分?jǐn)?shù)) (Default: "")
bargap
: 設(shè)置相鄰位置坐標(biāo) (不同特征) bar之間的間距 (0 ~ 1的區(qū)間)
bargroupgap
: 設(shè)置相同坐標(biāo) (相同特征) bar之間的間距 (0 ~ 1的區(qū)間) (Default: 0)
library(plotly)
## 構(gòu)建數(shù)據(jù)
x= c(1, 2, 3, 5.5, 10)
y= c(10, 8, 6, 4, 2)
width = c(0.8, 0.8, 0.8, 3.5, 4)
data <- data.frame(x, y, width)
## 繪圖
fig <- plot_ly(data)
fig <- fig %>% add_trace(
type="bar",
x= ~x,
y= ~y,
width = ~width,
marker = list(color = 'rgb(158,202,225)',
line = list(color = 'rgb(8,48,107)', width = 1.5)))
fig
直方圖 (Histgram)
- 指定參數(shù)
add_trace(..., type="histogram")
- 等同于
add_histogram
opacity
: 柱子的透明度, 0 ~ 1的區(qū)間 (Default: 1)histfunc
: 每一個(gè)柱子的統(tǒng)計(jì)指標(biāo): "count" (默認(rèn)) | "sum" | "avg" | "min" | "max"histnorm
: 指定用于此直方圖規(guī)格化類(lèi)型: "" (默認(rèn)) | "percent" | "probability" | "density" | "probability density"marker
: 傳入列表參數(shù), 指定直方圖中柱子的特征
color
: 直方圖的顏色
opacity
: 直方圖的透明度, 0 ~ 1的區(qū)間 (Default: 1)
line
: 傳入列表, 指定直方圖的邊框特征
width
: 邊框的粗細(xì)
color
: 邊框的顏色
fig <- plot_ly(alpha = 0.6)
fig <- fig %>% add_histogram(x = ~rnorm(500))
fig <- fig %>% add_histogram(x = ~rnorm(500) + 1)
fig <- fig %>% layout(barmode = "overlay")
fig
瀑布圖 (Waterfall)
- 指定參數(shù)
add_trace(..., type="waterfall")
measure
: 包含值類(lèi)型的數(shù)組, 可選參數(shù): "relative" (相對(duì)變化) | "total" (計(jì)算總和) | "absolute" (重置計(jì)算結(jié)果, 絕對(duì)變化)
library(plotly)
x= list("Sales", "Consulting", "Net revenue", "Purchases", "Other expenses", "Profit before tax")
measure= c("relative", "relative", "total", "relative", "relative", "total")
text= c("+60", "+80", "", "-40", "-20", "Total")
y= c(60, 80, 0, -40, -20, 0)
data = data.frame(x=factor(x,levels=x),measure,text,y)
fig <- plot_ly(
data, name = "20", type = "waterfall", measure = ~measure,
x = ~x, textposition = "outside", y= ~y, text =~text,
connector = list(line = list(color= "rgb(63, 63, 63)")))
fig <- fig %>%
layout(title = "Profit and loss statement 2018",
xaxis = list(title = ""),
yaxis = list(title = ""),
autosize = TRUE,
showlegend = TRUE)
fig
數(shù)據(jù)整體分布 (箱線(xiàn)圖, 小提琴圖...)
箱線(xiàn)圖 (Box Plot)
- 包含的trace:
marker(點(diǎn))
- 使用
add_trace(..., type="box")
繪制箱線(xiàn)圖 - 等同于
add_boxplot
quartilemethod
參數(shù)指定了箱線(xiàn)圖的定量方法, 包括linear(默認(rèn))/inclusive/exclusiveboxpoints
: 在箱線(xiàn)圖的基礎(chǔ)上繪制點(diǎn)圖 "all" | "outliers" | FALSEopacity
: 箱線(xiàn)圖的透明度, 0 ~ 1的范圍 (Default: 1)fillcolor
: 箱線(xiàn)圖的填充顏色pointpos
參數(shù)指定散點(diǎn)圖與箱線(xiàn)圖的偏移量, -2 ~ 2 的區(qū)間jitter
指定散點(diǎn)隨即抖動(dòng)的范圍, 0 ~ 1的區(qū)間notched
: 布爾類(lèi)型, 是否創(chuàng)建帶凹槽的箱線(xiàn)圖line
: 傳入列表, 指定邊框信息, 包括顏色marker
: 傳入列表, 指定箱線(xiàn)圖中點(diǎn)的特征
outliercolor
: 異常點(diǎn)的顏色
symbol
: 點(diǎn)的形狀 (Default: "circle")
opacity
: 點(diǎn)的透明度 (Default: 1)
color
: 點(diǎn)的顏色(指定的jitter的顏色)
size
: 點(diǎn)的大小, 大于0的范圍 (Default: 6)
line
: 傳入列表參數(shù), 指定點(diǎn)的邊框信息
color
: 邊框的顏色 (Default: "#444")
width
: 邊框的粗細(xì) (Default: 0)
outliercolor
: 異常點(diǎn)的邊框的顏色
outlierwidth
: 異常點(diǎn)的邊框的粗細(xì) (Default: 1)
line
: 傳入列表, 指定箱線(xiàn)圖的邊框信息
color
: 邊框的顏色
width
: 邊框的寬度 (Default: 2)
boxmean
: 展示箱線(xiàn)圖均值所在的位置: TRUE | "sd" (mean和sd都標(biāo)記出來(lái)) | FALSE
- layout中對(duì)于箱線(xiàn)圖的參數(shù)
boxmode
: 箱線(xiàn)圖的展示形式, 可選參數(shù): "group" (分組展示) | "overlay" (覆蓋顯示)
boxgap
: 設(shè)置相鄰位置坐標(biāo) (不同特征) box之間的間距 (0 ~ 1的區(qū)間) (Default: 0.3)
boxgroupgap
: 設(shè)置相同坐標(biāo) (相同特征) box的間距 (0 ~ 1的區(qū)間) (Default: 0.3)
library(plotly)
fig <- plot_ly(y = list(1,2,3,4,5), type = "box", quartilemethod="linear", name="Linear Quartile Mode") %>%
add_trace(y = list(1,2,3,4,5), quartilemethod="inclusive", name="Inclusive Quartile Mode") %>%
add_trace(y = list(1,2,3,4,5), quartilemethod="exclusive", name="Exclusive Quartile Mode") %>%
layout(title = "Modifying The Algorithm For Computing Quartiles")
fig
fig <- plot_ly(y = ~rnorm(50), type = "box", boxpoints = "all", jitter = 0.3, pointpos = 1.8)
fig
小提琴圖 (Violin Plot)
- 包含的trace:
box(小提琴中的箱線(xiàn)圖)
,marker(點(diǎn))
,line(邊框)
- 指定參數(shù)
add_trace(..., type="voilin")
繪制小提琴圖
box
: 傳入列表參數(shù), 控制小提琴中的箱線(xiàn)圖特征
visable
: 是否在小提琴中可見(jiàn)箱線(xiàn)圖(T | F)
width
: 箱線(xiàn)圖的寬度(Default: 0.25)
fillcolor
: 箱線(xiàn)圖的填充顏色
line
: 傳入列表參數(shù), 設(shè)定箱線(xiàn)圖的邊框特征
color
: 箱線(xiàn)圖的邊框顏色
width
: 箱線(xiàn)圖的邊框粗細(xì)
marker
: 傳入列表參數(shù), 設(shè)定小提琴圖中點(diǎn)的特征
outliercolor
: 離群點(diǎn)的顏色 (只包含離群點(diǎn))
symbol
: 點(diǎn)的形狀 (Default: "circle")
opacity
: 點(diǎn)的透明度, 0-1的區(qū)間 (Default: 1)
size
: 點(diǎn)的大小 (Default: 6)
line
: 傳入列表參數(shù), 設(shè)置點(diǎn)的邊框特征
color
: 點(diǎn)的邊框的顏色 (包含所有點(diǎn))
width
: 點(diǎn)的邊框的粗細(xì) (包含所有點(diǎn))
outliercolor
: 離群點(diǎn)的邊框的顏色 (只包含離群點(diǎn))
outlierwidth
: 離群點(diǎn)的邊框的粗細(xì) (只包含離群點(diǎn))
line
: 傳入列表參數(shù), 指定小提琴的邊框特征
color
: 小提琴的邊框顏色
width
: 小提琴的邊框粗細(xì) (Default: 2)
side
: 指定小提琴展示在哪一側(cè), 可選參數(shù)有: "negative"(左側(cè)) | "positive"(右側(cè)) | "both"(兩側(cè), 默認(rèn))points
: 展示點(diǎn), 可選參數(shù)有: "all"(全部點(diǎn)) | "outliers"(異常點(diǎn), 默認(rèn)) | FALSE(不展示點(diǎn), 只展示小提琴)pointpos
: 散點(diǎn)圖與小提琴圖的偏移量, -2 ~ 2的區(qū)間jitter
: 點(diǎn)的抖動(dòng)范圍, 0 ~ 1的范圍filecolor
: 小提琴圖的填充顏色meanline
: 傳入列表小提琴內(nèi)部顯示與樣本平均值相對(duì)應(yīng)的線(xiàn)
visable
: 線(xiàn)是否可見(jiàn)(TRUE | FALSE)
color
: 線(xiàn)的顏色
width
: 線(xiàn)的寬度
- layout中對(duì)于小提琴圖的設(shè)定 (官網(wǎng)沒(méi)有這些參數(shù), 但是對(duì)圖形有影響)
violinmode
: 小提琴圖的展示形式, 可選參數(shù): "group" (分組展示) | "overlay" (覆蓋顯示)
violingap
: 設(shè)置相鄰位置坐標(biāo) (不同特征) violin之間的間距 (0 ~ 1的區(qū)間) (Default: 0.3)
violingroupgap
: 設(shè)置相同坐標(biāo) (相同特征) violin的間距 (0 ~ 1的區(qū)間) (Default: 0.3)
library(plotly)
df <- read.csv("https://raw.githubusercontent.com/plotly/datasets/master/violin_data.csv")
fig <- df %>%
plot_ly(type = 'violin')
fig <- fig %>%
add_trace(
x = ~day[df$smoker == 'Yes'],
y = ~total_bill[df$smoker == 'Yes'],
legendgroup = 'Yes',
scalegroup = 'Yes',
name = 'Yes',
side = 'negative',
box = list(
visible = T
),
meanline = list(
visible = T
),
color = I("blue")
)
fig <- fig %>%
add_trace(
x = ~day[df$smoker == 'No'],
y = ~total_bill[df$smoker == 'No'],
legendgroup = 'No',
scalegroup = 'No',
name = 'No',
side = 'positive',
box = list(
visible = T
),
meanline = list(
visible = T
),
color = I("green")
)
fig <- fig %>%
layout(
xaxis = list(
title = ""
),
yaxis = list(
title = "",
zeroline = F
),
violingap = 0,
violingroupgap = 0,
violinmode = 'overlay'
)
fig
不知道為何violingap, violingroupgap, violinmode會(huì)報(bào)warning提示沒(méi)有該參數(shù), 但是實(shí)際改變這些參數(shù)確實(shí)是對(duì)圖形有影響的
善萁遥基圖 (Sankey Diagram)
- 包含的trace:
node (節(jié)點(diǎn))
,link (連接)
- 指定參數(shù)
add_trace(..., type="sankey")
- 節(jié)點(diǎn)
node
和連接link
visible
: 是否可見(jiàn), 可選參數(shù): TRUE | FALSE | "legendonly" (之戰(zhàn)時(shí)圖例)domain
: 傳入列表, 設(shè)置珊樵铮基圖展示的區(qū)域
x
: x軸展示的范圍, 以整體的分?jǐn)?shù)形式表示, 0~1的區(qū)間
y
: y軸展示的范圍, 以整體的分?jǐn)?shù)形式表示, 0~1的區(qū)間
row
: 如果存在網(wǎng)格,表示網(wǎng)格中的指定行
column
: 如果存在網(wǎng)格撵彻,表示網(wǎng)格中的指定列
node
: 傳入列表, 指定節(jié)點(diǎn)信息
label
: 設(shè)置每個(gè)節(jié)點(diǎn)的label, 用于展示文本信息, 用向量表示多個(gè)幾點(diǎn)的label
groups
: 節(jié)點(diǎn)的分組信息
x
: 節(jié)點(diǎn)的標(biāo)準(zhǔn)化垂直位置
y
: 節(jié)點(diǎn)的標(biāo)準(zhǔn)化水平位置
color
: 節(jié)點(diǎn)的顏色, 用向量表示多個(gè)節(jié)點(diǎn)的顏色
pad
: 設(shè)置節(jié)點(diǎn)之間的填充距離 (Default: 20)
thickness
: 設(shè)置節(jié)點(diǎn)的寬度 (Default: 20)
line
: 傳入列表, 設(shè)置每個(gè)節(jié)點(diǎn)的邊框信息
color
: 邊框的顏色
width
: 邊框的寬度
link
: 傳入列表, 設(shè)置連接的特征
label
: 連接的標(biāo)識(shí), 展示文本信息, 使用向量表示多個(gè)連接的label
color
: 連接的顏色
source
: 連接的起始位置, 使用向量表示多個(gè)值
target
: 連接的終止位置, 使用向量表示多個(gè)值
value
: 表示流量的具體數(shù)值
line
: 傳入列表, 設(shè)置連接的邊框信息
width
: 邊框的寬度
color
: 邊框的顏色
library(plotly)
fig <- plot_ly(
type = "sankey",
orientation = "h",
node = list(
label = c("A1", "A2", "B1", "B2", "C1", "C2"),
color = c("blue", "blue", "blue", "blue", "blue", "blue"),
pad = 15,
thickness = 20,
line = list(
color = "black",
width = 0.5
)
),
link = list(
source = c(0,1,0,2,3,3), ## 每個(gè)值對(duì)應(yīng)一個(gè)link的起始位置, 值代表node的index, 從0開(kāi)始
target = c(2,3,3,4,4,5), ## 每個(gè)值對(duì)應(yīng)一個(gè)link的終止位置, 值代表node的index, 從0開(kāi)始
value = c(8,4,2,8,4,2) ## 每個(gè)值對(duì)應(yīng)一個(gè)link的流量
)
)
fig <- fig %>% layout(
title = "Basic Sankey Diagram",
font = list(
size = 10
)
)
fig
library(plotly)
library(rjson)
json_file <- "https://raw.githubusercontent.com/plotly/plotly.js/master/test/image/mocks/sankey_energy.json"
json_data <- fromJSON(paste(readLines(json_file), collapse=""))
fig <- plot_ly(
type = "sankey",
domain = list(
x = c(0,1),
y = c(0,1)
),
orientation = "h",
valueformat = ".0f",
valuesuffix = "TWh",
node = list(
label = json_data$data[[1]]$node$label,
color = json_data$data[[1]]$node$color,
pad = 15,
thickness = 15,
line = list(
color = "black",
width = 0.5
)
),
link = list(
source = json_data$data[[1]]$link$source,
target = json_data$data[[1]]$link$target,
value = json_data$data[[1]]$link$value,
label = json_data$data[[1]]$link$label
)
)
fig <- fig %>% layout(
title = "Energy forecast for 2050<br>Source: Department of Energy & Climate Change, Tom Counsell via <a >Mike Bostock</a>",
font = list(
size = 10
),
xaxis = list(showgrid = F, zeroline = F),
yaxis = list(showgrid = F, zeroline = F)
)
fig
誤差線(xiàn) (Error Bar)
- 指定
add_trace(..., error_y / error_x)
繪制誤差線(xiàn) - 注意需要先計(jì)算特征的方差/標(biāo)準(zhǔn)差合并到原數(shù)據(jù)中, 指定該變量繪制誤差線(xiàn)
- 誤差線(xiàn)可以應(yīng)用于barplot/Scatterplot /lineplot
- 傳入列表指定誤差線(xiàn)特征
visable
: 布爾值, 誤差線(xiàn)是否可見(jiàn)type
: 確定用于生成誤差線(xiàn)的規(guī)則, 可選參數(shù)有: "percent"(誤差新的長(zhǎng)度對(duì)應(yīng)于基礎(chǔ)數(shù)據(jù)的百分比) | "constant"(誤差線(xiàn)長(zhǎng)度為常量墙贱。在參數(shù)"value"中設(shè)置此常量) | "sqrt"誤差線(xiàn)長(zhǎng)度對(duì)應(yīng)于數(shù)據(jù)的sqaure | "data"(誤差線(xiàn)長(zhǎng)度由參數(shù)"array"設(shè)置)symmetric
: 布爾值, 確定誤差線(xiàn)在兩個(gè)方向上的長(zhǎng)度是否相同(垂直線(xiàn)的上/下,水平線(xiàn)的左/右)却紧。array
: 設(shè)置與每個(gè)誤差線(xiàn)長(zhǎng)度相對(duì)應(yīng)的數(shù)據(jù), 值是相對(duì)于基礎(chǔ)數(shù)據(jù)的桐臊。value
: 設(shè)置與誤差線(xiàn)長(zhǎng)度相對(duì)應(yīng)的百分比(如果"type"設(shè)置為"percent")或常量(如果“type”設(shè)置為“constant”)(Default: 10)color
: 設(shè)置誤差線(xiàn)的顏色width
: 設(shè)置誤差線(xiàn)的寬度 (上下兩條bar)thickness
: 設(shè)置誤差線(xiàn)的厚度 (誤差線(xiàn)整體的粗細(xì)) (Default: 2)
library(plotly)
library(plyr)
data_mean <- ddply(ToothGrowth, c("supp", "dose"), summarise, length = mean(len))
data_sd <- ddply(ToothGrowth, c("supp", "dose"), summarise, length = sd(len))
data <- data.frame(data_mean, data_sd$length)
data <- rename(data, c("data_sd.length" = "sd"))
data$dose <- as.factor(data$dose)
plot_ly() %>%
add_trace(data = data[which(data$supp == 'OJ'),], x = ~dose, y = ~length, type = 'bar', name = 'OJ',
error_y = ~list(array = sd, color = '#000000')) %>%
add_trace(data = data[which(data$supp == 'VC'),], x = ~dose, y = ~length, type = "bar", name = 'VC',
error_y = ~list(array = sd, color = '#000000'))
圖內(nèi)文字和批注 (text and annotations)
- 由
add_text
指定文字內(nèi)容以及字體特征 - 根據(jù)所繪制圖形的不同文字的位置也有所不同
text
- 簡(jiǎn)單的文字信息, 不包含箭頭, 文本框
text
: 指定文字的內(nèi)容textposition
: 指定文字的位置, 可選參數(shù): "top left" | "top center" | "top right" | "middle left" | "middle center" | "middle right" | "bottom left" | "bottom center" | "bottom right" | "outside" | "inside"textfont
: 傳入列表參數(shù), 指定文字的字體相關(guān)特征
family
: 指定字體"Arial", "Balto", "Courier New"...
size
: 指定字體大小
color
: 指定字體顏色
library(plotly)
df <- read.csv("https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv",
stringsAsFactors = FALSE)
df <- df[which(df$year==2007 & df$continent=='Europe' & df$pop > 2.e6),]
fig <- plot_ly(df, type='bar', x = ~country, y = ~pop, text = ~lifeExp, name="",
hovertemplate = paste('%{x}', '<br>lifeExp: %{text:.2s}<br>'),
texttemplate = '%{y:.2s}', textposition = 'outside')
fig <- fig %>% layout(uniformtext=list(minsize=8, mode='hide'))
fig
annotations
- 包含箭頭, 文本框的批注信息
- 由
add_annotations
指定批注信息 - 也可以由
layout(..., annotations)
指定, 需要傳入列表參數(shù)
visable
: 布爾值, 批注是否可見(jiàn)text
: 設(shè)置與此批注關(guān)聯(lián)的文本。Plotly使用HTML標(biāo)記的子集來(lái)執(zhí)行諸如換行符(
)晓殊、粗體(<b></b>)断凶、斜體(<i></i>)、超鏈接(<a href='…'></a>)textangle
: 設(shè)置字體的角度 (Default: 0)font
: 傳入列表參數(shù), 指定字體相關(guān)信息
family
: 指定字體, 包括"Arial", "Balto", "Courier New", "Droid Sans"...
size
: 字體大小
color
: 字體顏色
width/height
: 批注的寬高opacity
: 批注的透明度, 0 ~ 1的區(qū)間 (Default: 1)align
: 設(shè)置批注的水平對(duì)齊方式, 可選參數(shù): "left" | "center" | "right" (Default: "center")valign
: 設(shè)置批注的數(shù)值對(duì)齊方式, 可選參數(shù): "top" | "middle" | "bottom" (Default: "middle")bgcolor
: 設(shè)置批注的背景顏色 (Default: "rgba(0,0,0,0)")bordercolor
: 設(shè)置批注的邊框顏色 (Default: "rgba(0,0,0,0)")borderpad
: 設(shè)置邊框和文字內(nèi)容之間的填充 (Default: 1)borderwidth
: 邊框的寬度showarrow
: 布爾值, 是否顯示箭頭arrowwidth
: 箭頭的寬度arrowcolor
: 箭頭的顏色arrowside
: 指定箭頭指向的方向, 可選參數(shù): "end" | "start" | "end+start" | "none" (Default: "end")arrowhead/startarrowhead
: 指定結(jié)束/開(kāi)始箭頭的形狀, 0 ~ 8的區(qū)間 (Default: 1)arrowsize/startarrowsize
: 指定結(jié)束/開(kāi)始位置箭頭的大小 (Default: 1)standoff/startstandoff
: 設(shè)置距離結(jié)束/開(kāi)始位置的距離, 以像素為單位 (Default: 0)ax/ay
: 設(shè)置批注與圖形的偏移量, 以像素為單位 (ax: 左右偏移; ay: 上下偏移)xref/yref
: 設(shè)置批注相對(duì)參考坐標(biāo)軸, 可選參數(shù) "x" | "x2"... | "y" | "y2"...
library(plotly)
m <- mtcars[which.max(mtcars$mpg), ]
a <- list(
x = m$wt,
y = m$mpg, # 需要添加注釋的位置
text = rownames(m), # 注釋內(nèi)容
xref = "x", # 參考坐標(biāo)軸x
yref = "y", # 參考坐標(biāo)軸y
showarrow = TRUE, # 展示箭頭
arrowhead = 7, # 箭頭類(lèi)型 (7 -> 方塊)
ax = 20, # x軸偏移量 (20px)
ay = -40 # y軸偏移量 (40px)
)
fig <- plot_ly(mtcars, x = ~wt, y = ~mpg)
fig <- fig %>% add_markers()
fig <- fig %>% layout(annotations = a)
fig
熱圖 (Heatmap)
add_trace(p, type="heatmap"[, ...])
visible
: 是否顯示trace, 可選參數(shù): TRUE | FALSE | "legendonly" (Default: TRUE)showlegend
: 布爾值, 是否顯示圖例legendgroup
: 圖例的分組, 在圖例的分組繪制時(shí)使用opacity
: 透明度, 0 ~ 1的區(qū)間 (Default: 1)x/y
: 指定樣本/特征z
: 指定繪制熱圖需要的值colorscale
: 設(shè)置繪制熱圖的色階 (鍵值對(duì)形式), 指定0 (最小值) ~ 1 (最大值) 之間的顏色 (最小值和最大值必須指定), 例如:[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]
或者使用預(yù)設(shè)色階字符串, 包括:
(Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis)colors
: 指定熱圖的顏色 (向量形式), 支持顏色插值函數(shù), 如colorRamp()
, 也支持預(yù)設(shè)顏色集, 包括: (Greys,YlGnBu,Greens,YlOrRd,RdBu,Blues等)
library(plotly)
## dim(volcano)
## [1] 87 61
fig <- plot_ly(z = volcano, ## (data.frame/matrix/array)格式, 每一個(gè)值對(duì)應(yīng)熱圖一個(gè)cell的顏色
type = "heatmap")
fig
m <- matrix(rnorm(9), nrow = 3, ncol = 3)
fig <- plot_ly(
x = c("a", "b", "c"), y = c("d", "e", "f"), ## 指定x/y
z = m, type = "heatmap"
)
fig
其他
- 布局 (layout)
title
: 傳入列表, 標(biāo)題的設(shè)置
text
: 標(biāo)題文本內(nèi)容font
: 傳入列表, 對(duì)標(biāo)題的字體的設(shè)置
family
: 對(duì)標(biāo)題的字體設(shè)置
size
: 標(biāo)題的大小
color
: 標(biāo)題的顏色
xref
: 橫向偏移時(shí)參考的坐標(biāo)軸 (Default: "container")yref
: 縱向偏移時(shí)參考的坐標(biāo)軸 (Default: "container")x
: 在標(biāo)準(zhǔn)化坐標(biāo)系中巫俺,相對(duì)于"xref"的x位置從"0" (左)到"1" (右) (Default: 0.5)y
: 在標(biāo)準(zhǔn)化坐標(biāo)系中认烁,相對(duì)于"yref"的y位置從“0”(左)到“1”(右) (Default: "auto")xanchor
: 設(shè)置標(biāo)題相對(duì)于其x位置的水平對(duì)齊方式, 可選參數(shù): "left" (左對(duì)齊) | "right" (右對(duì)齊) | "center" (居中) | "auto" (將"xref"除以3,并根據(jù)"x"的值自動(dòng)計(jì)算"xanchor"值) (Default: "auto")yanchor
: 設(shè)置標(biāo)題相對(duì)于其y位置的水平對(duì)齊方式, 可選參數(shù): "left" (左對(duì)齊) | "right" (右對(duì)齊) | "center" (居中) | "auto" (將"yref"除以3介汹,并根據(jù)"y"的值自動(dòng)計(jì)算"yanchor"值) (Default: "auto")pad
: 設(shè)置標(biāo)題的填充却嗡。每個(gè)填充值僅在相應(yīng)設(shè)置了相應(yīng)的"xanchor"/"yanchor"值時(shí)才適用
r
: 右側(cè)(right)的填充 (px) (Default: 0)
t
: 頂部(top)的填充 (px) (Default: 0)
l
: 左側(cè)(left)的填充 (px) (Default: 0)
b
: 底部(bottom)的填充 (px) (Default: 0)
showlegend
: 布爾值, 是否顯示圖例legend
: 傳入列表, 設(shè)置圖例的特征
bgcolor
: 圖例的背景顏色bordercolor
: 邊框顏色borderwidth
: 邊框的寬度 (Default: 0)font
: 傳入列表, 設(shè)置圖例的字體特征
family
: 設(shè)置圖例文字的字體
color
: 設(shè)置圖例文字的顏色
size
: 設(shè)置圖例文字的大小 (大于1)
orientation
: 設(shè)置圖例的方向, 可選參數(shù): "v" (豎直) | "h" (水平)traceorder
: 確定圖例項(xiàng)的顯示順序, 可選參數(shù): "reversed" (與normal相反) | "grouped" (則項(xiàng)目將分組顯示(當(dāng)提供跟蹤"legendgroup"時(shí)) | "reversed+grouped" (與"grouped"按相反的順序顯示) | "normal" (與輸入數(shù)據(jù)相同的順序從上到下顯示)tracegroupgap
: 設(shè)置圖例組之間的垂直間距 (以px為單位) (Default: 10)itemsizing
: 確定圖例項(xiàng)符號(hào)是否具有相應(yīng)的trace進(jìn)行縮放, 可選參數(shù): "trace" | "constant"x/y
: 圖例的坐標(biāo) (-2 ~ 3之間)xanchor
: 圖例的水平定位, 可選參數(shù): "auto" | "left" | "center" | "right"yanchor
: 圖例的豎直定位, 可選參數(shù): "auto" | "top" | "middle" | "bottom"title
: 傳入列表, 設(shè)置圖例標(biāo)題的特征
text
: 設(shè)置圖例標(biāo)題的文字內(nèi)容
side
: 圖例標(biāo)題相對(duì)于圖例的位置, 可選參數(shù):"top" | "left" | "top left"
font
: 傳入列表, 設(shè)置圖例標(biāo)題的字體相關(guān)特征
family
: 設(shè)置字體
color
: 設(shè)置文字顏色
size
: 設(shè)置文字大小
margin
: 設(shè)置圖形的外邊距
l/r/t/b
: 分別設(shè)置左(left), 右(right), 上(top, Default: 100), 下(bottom) (Default: 80)
pad
: 外邊距的填充量(px) (Default: 0)
autoexpand
: 自動(dòng)擴(kuò)展, 根據(jù)圖例, 標(biāo)題等因素對(duì)圖形進(jìn)行動(dòng)態(tài)擴(kuò)展 (Default: TRUE)
width
: 設(shè)置圖形整體的寬度 (Default: 700)height
: 設(shè)置圖形整體的高度 (Default: 450)
font
: 設(shè)置圖形中文字的特征
family
: 字體 (Default: ""Open Sans", verdana, arial, sans-serif")
color
: 顏色 (Default: 12)
size
: 大小 (Default: "#444")
uniformtext
: 統(tǒng)一文本
mode
: 確定如何在每個(gè)跟蹤類(lèi)型之間統(tǒng)一不同文本元素的字體大小, 如果計(jì)算的文本大小小于由minsize
使用"hide"選項(xiàng)隱藏文本; 使用"show"選項(xiàng)顯示文本, 而不需要進(jìn)一步縮小縮放
minsize
: 設(shè)置相同類(lèi)型trace之間的最小文本大小 (Default: 0)
paper_bgcolor
: 設(shè)置圖紙的背景顏色plot_bgcolor
: 設(shè)置圖形的背景顏色
坐標(biāo)軸
(Axes)
visible
: 布爾值, 坐標(biāo)軸是否可見(jiàn)color
: 坐標(biāo)軸的顏色 (Default: "#444")title
: 坐標(biāo)軸的標(biāo)題
text
: 標(biāo)題的內(nèi)容
standoff
: 設(shè)置軸標(biāo)簽和標(biāo)題文本之間的間距
font
: 標(biāo)題的字體
family
: 字體
size
: 大小
color
: 顏色
type
: 設(shè)置坐標(biāo)軸的類(lèi)型, 可選參數(shù): "-" | "linear" | "log" | "date" | "category" | "multicategory" (Default: "-")autorange
: 布爾值, 是否根據(jù)輸入數(shù)據(jù)自動(dòng)計(jì)算坐標(biāo)軸的范圍 (Default: TRUE)rangemode
: 適用于線(xiàn)性軸, 則根據(jù)輸入數(shù)據(jù)的極值計(jì)算范圍, 可選參數(shù): "normal" | "tozero" (坐標(biāo)軸擴(kuò)展到0) | "nonnegative" (坐標(biāo)軸始終非負(fù))range
: 手動(dòng)設(shè)置坐標(biāo)軸的范圍fixedrange
: 布爾值, 確定此軸是否可縮放, 如果為T(mén)RUE, 則禁用縮放tickmode
: 設(shè)定軸的刻度模式, 可選參數(shù): "auto" (通過(guò)"nticks"設(shè)置刻度數(shù)) | "linear" (刻度的位置由起始位置"tick0"和刻度步長(zhǎng)"dtick"決定) | "array" (通過(guò)"tickvals"設(shè)置ticks的位置,tick文本為"ticktext")nticks
: 指定特定軸的最大刻度數(shù)tick0
: 設(shè)置坐標(biāo)軸上第一個(gè)刻度的位置dtick
: 設(shè)置刻度步長(zhǎng)tickvals
: 傳入數(shù)組, 設(shè)置該坐標(biāo)軸上的刻度出現(xiàn)的值ticktext
: 每一個(gè)tickvals
出現(xiàn)的刻度上的顯示的文本ticks
: 是否繪制刻度, 可選參數(shù): "outside" | "inside" | ""mirror
: 確定坐標(biāo)軸/刻度是否鏡像到另一側(cè), 可選參數(shù): TRUE | "ticks" | FALSE | "all" | "allticks"ticklen
: 設(shè)置刻度長(zhǎng)度 (px) (Default: 5)tickwidth
: 設(shè)置刻度寬度 (px) (Default: 1)tickcolor
: 設(shè)置刻度的顏色 (Default: "#444")showticklabels
: 布爾值, 是否繪制刻度標(biāo)簽automargin
: 確定長(zhǎng)刻度標(biāo)簽是否自動(dòng)擴(kuò)展外邊距tickfont
: 刻度的字體特征
family
: 字體
color
: 顏色
size
: 大小
tickangle
: 刻度的角度tickprefix
: 刻度的前綴 (Default: "")showtickprefix
: 指定哪些刻度會(huì)展示簽證, 可選參數(shù): "all" | "first" | "last" | "none" (Default: "all")ticksuffix
: 刻度的后綴 (Default: "")showticksuffix
: 指定哪些刻度會(huì)展示簽證, 可選參數(shù): "all" | "first" | "last" | "none" (Default: "all")showline
: 布爾值, 是否繪制此坐標(biāo)軸的邊界線(xiàn)linecolor
: 坐標(biāo)軸的顏色 (Default: "#444")linewidth
: 設(shè)置坐標(biāo)軸的寬度 (Default: 1)showgrid
: 確定是否繪制網(wǎng)格線(xiàn)嘹承。如果為"TRUE", 則在每個(gè)刻度線(xiàn)處繪制網(wǎng)格線(xiàn)gridcolor
: 設(shè)置網(wǎng)格線(xiàn)的顏色 (Default: "#eee")gridwidth
: 設(shè)置網(wǎng)格線(xiàn)的寬度 (Default: 1)zeroline
: 布爾值, 確定是否沿該軸的0值繪制直線(xiàn)zerolinecolor
: 設(shè)置0線(xiàn)的顏色 (Default: "#444")zerolinewidth
: 設(shè)置0線(xiàn)的寬度 (Default: 1)side
: 確定坐標(biāo)軸繪制的位置, 可選參數(shù): "top" | "bottom" | "left" | "right"domain
: 設(shè)置此軸的域 (Default: [0, 1])anchor
: 如果設(shè)置為相反的字母軸id (例如"x2", "y"), 則此軸將綁定到相應(yīng)的相反字母軸窗价。如果設(shè)置為free
,則該軸的位置由position
決定叹卷。position
: 設(shè)置坐標(biāo)軸在圖形中的位置 (在標(biāo)準(zhǔn)化坐標(biāo)中), 只有當(dāng)anchor
設(shè)置為free
時(shí)才有效果
- ggplot2圖形轉(zhuǎn)換plotly:
ggplotly(p)
- 導(dǎo)出靜態(tài)圖片
- 首先需要下載orca(https://github.com/plotly/orca/releases), 選擇對(duì)應(yīng)系統(tǒng)的版本
- 安裝orca并添加到環(huán)境變量
- 安裝額外依賴(lài):
install.packages("processx")
p
: 需要導(dǎo)出的plotly對(duì)象file
: 導(dǎo)出的文件名width
: 生成文件后圖片的寬度, 默認(rèn)使用layout.width
生成圖片的寬度height
: 生成文件后圖片的高度, 默認(rèn)使用layout.height
生成圖片的高度scale
: 圖片的縮放比例verbose
: 是否在控制臺(tái)打印日志信息
library(plotly)
if (!require("processx")) install.packages("processx")
fig <- plot_ly(z = ~volcano) %>% add_surface()
orca(fig, "surface-plot.png", scale = 0.5, verbose = T)
## exported surface-plot, in 1822.699999 ms
## \
## done with code 0 in 1.82 sec - all task(s) completed