首先,加载recharts
:
library(recharts)
线图、柱图、散点图、k线图和事件河流图都基于直角坐标系,需要配置x-和y-坐标轴。用echartr
创建好一个直角坐标系Echarts对象,接下来可以用setAxis
调整期坐标轴。这个函数家族包括几个工作函数:setXAxis
, setYAxis
, setX1Axis
, setY1Axis
。
所有函数名都有小驼峰法和小写连划线(Hadly Wickham推荐此法)两种形式。
setAxis(chart, series = NULL, which = c("x", "y", "x1", "y1"),
type = c("value", "category", "time", "log"), show = TRUE,
position = c("bottom", "top", "left", "right"), name = "",
nameLocation = c("end", "start"), nameTextStyle = emptyList(),
boundaryGap = c(0, 0), min = NULL, max = NULL, scale = TRUE,
splitNumber = NULL, axisLine = list(show = TRUE, onZero = FALSE),
axisTick = list(show = FALSE), axisLabel = list(show = TRUE),
splitLine = list(show = TRUE), splitArea = list(show = FALSE),
data = list())
set_axis(chart, series = NULL, which = c("x", "y", "x1", "y1"),
type = c("value", "category", "time", "log"), show = TRUE,
position = c("bottom", "top", "left", "right"), name = "",
nameLocation = c("end", "start"), nameTextStyle = emptyList(),
boundaryGap = c(0, 0), min = NULL, max = NULL, scale = TRUE,
splitNumber = NULL, axisLine = list(show = TRUE, onZero = FALSE),
axisTick = list(show = FALSE), axisLabel = list(show = TRUE),
splitLine = list(show = TRUE), splitArea = list(show = FALSE),
data = list())
setYAxis(chart, ...)
set_axis_y(chart, ...)
setY1Axis(chart, ...)
set_axis_y1(chart, ...)
setXAxis(chart, ...)
set_axis_x(chart, ...)
setX1Axis(chart, ...)
set_axis_x1(chart, ...)
参数 | 要求 |
---|---|
chart |
|
series |
哪些系列放置在此坐标轴上。如设为NULL,作用于所有系列。可以写作:
|
which |
要修改哪条坐标轴,可以是下列之一:
|
type |
坐标轴类型,可以是 c(‘time’, ‘value’, ‘category’, ‘log’). 默认为’value’. |
show |
逻辑型,该坐标轴是否显示。默认为TRUE. |
position |
该坐标轴的位置。可以是 c(‘bottom’, ‘top’, ‘left’, ‘right’) (分别为主x轴、次x轴、主y轴和次y轴的默认值) |
name |
该坐标轴的名称,默认为空白(“”). |
nameLocation |
坐标轴名称位置,可以是c(‘start’, ‘end’). 默认为’end’. |
nameTextStyle |
坐标轴名称文本样式,可以是textStyle列表样式。默认值继承textStyle全局设定 |
boundaryGap |
长度为2的数值型向量,定义坐标轴两端留空策略 (百分比)。默认为 c(0, 0). |
min |
坐标轴最小值,默认为NULL (自动)。 如设置数值,则boundaryGap被禁用. |
max |
坐标轴最大值,默认为NULL (自动)。 如设置数值,则boundaryGap被禁用 |
scale |
逻辑型,用于’value’, ‘time’, ’log’型坐标轴,定义是否自动缩放到最小、最大值区间内。默认为TRUE. |
splitNumber |
数值型,将坐标轴且分成多少份。默认为NULL,即自动根据最小、最大值计算。 |
axisLine |
列表,默认为 |
axisTick |
列表,默认为 |
axisLabel |
控制坐标轴标签的列表,默认为
|
splitLine |
控制分割线的列表,默认为 |
splitArea |
控制分割区域的列表,默认为 |
data |
文本型向量或列表,用于’category’型坐标轴,定义坐标轴标签文字。默认为NULL。甚至可以传入带textStyle列表的复杂列表: |
… |
省略号 |
用airquality
生成4个Echarts对象 g1
- g4
:
时间轴 | 单个系列 | 多个系列 |
---|---|---|
no | g1 |
g2 |
yes | g3 |
g4 |
require(data.table)
## Loading required package: data.table
aq <- airquality
aq$Date <- as.Date(paste('1973', aq$Month, aq$Day, sep='-'))
g1 <- echartr(aq, Date, Temp, type='curve') %>% setToolbox(pos=3)
g2 <- echartr(aq, Day, Temp, Month, type='curve') %>% setToolbox(pos=3)
g3 <- echartr(aq, Day, Temp, t=Month, type='curve') %>% setToolbox(pos=3)
aq1 <- melt(aq, id=c('Month', 'Day'), measure=c('Temp', 'Wind'),
variable='Param')
g4 <- echartr(aq1, Day, value, Param, t=Month, type='curve') %>%
setToolbox(pos=3)
可以修改坐标轴外观: 标题、分割段数、标签。留意axisLabel
中的formatter
: 要求使用JavaScript,所以始终可以用JS
函数。也可以用sprintf
表达式。
g1 %>% setXAxis(name='m/d', splitNumber=20, axisLabel=list(
formatter='%m/%d', rotate=90)) %>%
setYAxis(axisLabel=list(formatter='{value} °C'))
就等价于
g1 %>% setXAxis(name='m/d', splitNumber=20, axisLabel=list(
formatter=JS('function (v) {
return v.getMonth() + 1 + "/" + v.getDate();
}'),
rotate=90)) %>%
setYAxis(axisLabel=list(formatter='{value} °C'))
可以把第2-4系列 (6月-8月) 放置在次y轴…
g2 %>% setY1Axis(series=2:4, name='Summer Temp')
但不能在不同时间轴设置不同的坐标轴。
要不设置成学术样式的坐标轴?那意味着去掉所有垂直分割线,并把绘图区边框宽度设为0。
g3 %>% setXAxis(splitLine=list(show=FALSE)) %>% setGrid(borderWidth=0) %>%
setYAxis(axisLine=list(lineStyle=lineStyle(width=0)))
把这些属性串联起来。
g4 %>% setY1Axis(series='Wind', axisLine=list(lineStyle=lineStyle(width=0)),
name='Wind', axisLabel=list(formatter="%.1f mph"), min=0) %>%
setXAxis(splitLine=list(show=FALSE), axisLine=list(
lineStyle=lineStyle(color='darkgray'))) %>%
setYAxis(axisLine=list(lineStyle=lineStyle(width=0)),
axisLabel=list(formatter="%.1f °C"), min=0, name='Temp') %>%
setGrid(borderWidth=0)