library(dplyr) test_that("ecr.ebars", { # dset + groups tmp <- iris |> group_by(Species) |> ec.init(load= 'custom', ctype='bar', legend=list(show=T), yAxis=list(type='category')) p <- tmp |> ecr.ebars(encode= list(x=c('Sepal.Width', 'Petal.Length', 'Petal.Width'), y='Sepal.Length')) expect_equal(p$x$opts$series[[6]]$name, 'virginica') expect_equal(p$x$opts$xAxis$name, 'Sepal.Length') # horiz.bars p <- tmp |> ecr.ebars(encode= list(x=c(2,3,4), y=1)) # numeric encode expect_equal(p$x$opts$series[[4]]$z, 3) expect_match(p$x$opts$series[[4]]$tooltip$formatter, 'range', fixed=TRUE) # dset + groups df <- mtcars |> group_by(cyl,gear) |> summarise(yy= round(mean(mpg),2)) |> mutate(low= round(yy-cyl*runif(1),2), high= round(yy+cyl*runif(1),2)) p <- ec.init(df, load='custom', ctype='bar', tooltip= list(s=T), xAxis=list(type='category')) |> ecr.ebars(encode= list(y=c(3,4,5), x=2)) expect_equal(p$x$opts$series[[6]]$name, '8') expect_match(p$x$opts$series[[6]]$tooltip$formatter, 'range', fixed=TRUE) expect_equal(length(p$x$opts$series), 6) expect_equal(p$x$opts$series[[4]]$type, 'custom') expect_true(p$x$opts$series[[4]]$renderItem == 'riErrBars') expect_s3_class(p$x$opts$series[[4]]$renderItem, 'JS_EVAL') expect_equal(p$x$opts$xAxis$type, 'category') # test for auto xAxis= list(type='category') p <- Orange |> arrange(Tree) |> mutate( #Tree= paste0('D',Tree), # char up= circumference+runif(5)*6, lo= circumference-runif(5)*6 ) |> group_by(age) |> ec.init(load='custom', ctype='bar', legend= list(show=T), series.param= list(encode= list(x='Tree', y='circumference')) ) |> ecr.ebars(encode= list(x=1, y=c(3,4,5))) expect_equal(p$x$opts$xAxis$type, 'category') # data + name + char.encode p <- ec.init(load= 'custom', legend= list(show=T), tooltip= list(show=T), xAxis=list(type='category'), series= list(list(type='bar', name= 'data', encode= list(x='gear',y='yy'), dimensions= c('cyl','gear','yy','low','high'), data= ec.data(df |> filter(cyl==4)) ))) |> ecr.ebars(encode= list(x='gear', y=c('yy','low','high')), hwidth=12, name='err', itemStyle= list(borderWidth= 2.5, color= "red") ) expect_equal(p$x$opts$series[[2]]$encode$y, c(2,3,4)) expect_equal(p$x$opts$series[[2]]$itemStyle$borderDashOffset, 12) # grouped + non-categorical tmp <- round(rnorm(24, sin(1:24/2)*10, .5)) df <- data.frame(x = 1:24, val = tmp, lower = round(rnorm(24, tmp -10, .5)), upper = round(rnorm(24, tmp + 5, .8)), cat= rep(c('A','B'),24) ) |> group_by(cat) p <- ec.init(df, load='custom') |> ecr.ebars(encode= list(x=1, y=c(2,3,4))) expect_equal(p$x$opts$series[[3]]$encode$y, c(1,2,3)) # make horizontal p <- ec.init(df, load='custom', series.param= list(encode= list(y=1, x=2))) |> ecr.ebars(encode= list(y=1, x=c(2,3,4))) #|> ec.inspect() expect_equal(p$x$opts$series[[1]]$encode$y, 0) expect_equal(p$x$opts$series[[3]]$encode$x, c(1,2,3)) # manual series + data sers = list( list(name= 's1',type= 'bar', data= list(5, 20, 36)), list(name= 's2',type= 'bar', data= list(4, 2, 40)), list(name= 's3',type= 'bar', data= list(15, 10, 36)), list(name= 's2',type= 'custom', z=11, renderItem= htmlwidgets::JS('riErrBars'), itemStyle= list(color= 'brown', borderDashOffset=8 ), # 8= halfWidth encode= list(x=1,y=c(2,3,4)), data= list(list('Mon',5,4,7), list('Tue',10, 9, 11)) ) ) p <- ec.init(load='custom', yAxis= list(show=T), xAxis= list(data= list('Mon','Tue','Wed')), series= sers ) expect_equal(p$x$opts$series[[4]]$encode$y, c(1,2,3)) expect_s3_class(p$x$opts$series[[4]]$renderItem, 'JS_EVAL') }) test_that("ecr.ebars riErrBarSimple", { set.seed(222) df <- data.frame(category= paste0('category', seq(1,50,1)), avg= round(runif(50) * 1000, 2)) |> mutate(lo= round(avg - runif(50) * 200), hi= round(avg + runif(50) * 180)) p <- df |> ec.init(load='custom', xAxis= list(data= df$category), tooltip= list(trigger= "axis", axisPointer= list(type= "shadow")), legend= list(show=TRUE), dataZoom= list(list(type= "slider", start= 50, end= 70), list(type= "inside", start= 50, end= 70)) ) |> ec.upd({ series <- append(series, list( list( type= "custom", name= "error", itemStyle = list(borderWidth= 1.5, color= 'brown'), # encode() does not work ?! # get data from dataset$source in format 'x,lo,hi' data= ec.data(as.data.frame(do.call(rbind, dataset[[1]]$source[-1]))[,c(1,3,4)]), renderItem = htmlwidgets::JS("riErrBarSimple") ) )) }) expect_equal(p$x$opts$series[[2]]$type, 'custom') expect_true( p$x$opts$series[[2]]$name == "error") expect_s3_class(p$x$opts$series[[2]]$renderItem, 'JS_EVAL') expect_equal(length(p$x$opts$series[[2]]$data), 50) }) test_that("ecr.band", { df <- Orange |> mutate(Tree=as.numeric(Tree)) |> relocate(Tree, .after= last_col()) band <- ecr.band(df |> filter(Tree==4) |> inner_join(df |> filter(Tree=='1'), by='age'), 'circumference.y', 'circumference.x', type= 'polygon', name= 'poly1') p <- ec.init(load='custom', legend= list(s=T), tooltip= list(trigger='axis'), dataZoom= list(type='inside', filterMode='none'), series= list( band[[1]], list(type='line', data=ec.data(df |> filter(Tree==5)), color='orange', name='line1', clip=F) ) ) expect_equal(length(p$x$opts$series), 2) expect_equal(p$x$opts$series[[1]]$type, 'custom') expect_equal(p$x$opts$series[[1]]$name, 'poly1') expect_true( p$x$opts$series[[1]]$renderItem == "riPolygon") expect_s3_class(p$x$opts$series[[1]]$renderItem, 'JS_EVAL') }) test_that("ecr.band tooltips", { df <- airquality |> mutate(lwr= round(Temp-Wind*2), upr= round(Temp+Wind*2), x= paste0(Month,'-',Day) ) |> relocate(x,Temp) bands <- ecr.band(df, 'lwr', 'upr', type='stack', name='Band', areaStyle= list(opacity=0.4)) p <- df |> ec.init(load='custom', legend= list(show= TRUE), xAxis= list(type='category', boundaryGap=FALSE), series= list( list(type='line', color='blue', name='line'), bands[[1]], bands[[2]] ), tooltip= list( trigger= 'axis', formatter= ec.clmn( 'high %@
line %@
low %@', 3.3, 1.2, 2.2) ) # 3.3= upper_serie_index +.+ index_of_column_inside ) expect_equal(p$x$opts$series[[2]]$stack, 'Band') expect_match(p$x$opts$tooltip$formatter, 'ss=[2.3,0.2,1.2]', fixed=TRUE) }) test_that("leaflet with geoJson", { myGeojson= gsub('\n', '', '{ "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": { "color": "purple" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [-110.81391, 31.931967 ], [-111.8391, 31.931931 ], [-111.838888, 32.931931 ], [-110.813849, 32.9319 ] ], [ [-110.81391, 33.93196 ], [-111.8391, 33.93193 ], [-111.83888, 34.93193 ], [-110.81384, 34.9319 ] ] ] } }, { "type": "Feature", "properties": { "color": "green" }, "geometry": { "type": "LineString", "coordinates": [ [-115.81391, 31.93196 ], [-116.8391, 31.93193 ], [-116.83888, 32.93193 ], [-115.81384, 32.9319 ] ] } }, { "type": "Feature", "properties": { "color": "black" }, "geometry": { "type": "MultiLineString", "coordinates": [ [ [-115.8139, 34.93196 ], [-116.8391, 34.93193 ], [-116.8388, 35.93193 ], [-115.8138, 35.9319 ] ], [ [-117.8138, 34.9319 ], [-117.8139, 32.93186 ], [-118.8139, 32.93196 ] ] ] } }, { "type": "Feature", "geometry": { "type": "Point", "coordinates": [-116, 33.66] }, "properties": { "color": "green" } }, { "type": "Feature", "geometry": { "type": "MultiPoint", "coordinates": [ [-119.0, 35.99], [-120.0, 36.66] ] }, "properties": { "color": "blue" } } ]}') p <- ec.init(load= c('leaflet','custom'), leaflet= list(center= c(-116.35, 35.5), zoom= 5, roam= T), series= list( ec.util(cmd= 'geojson', geojson= jsonlite::fromJSON(myGeojson), itemStyle= list(opacity= 0.5), ppfill= NULL ) # =no polygon fill ) ) expect_equal(p$x$opts$leaflet$zoom, 5) expect_equal(p$x$opts$series[[1]]$type, 'custom') expect_s3_class(p$x$opts$series[[1]]$renderItem, 'JS_EVAL') expect_match(p$x$opts$series[[1]]$renderItem,"ecf.geofill=null", fixed=T) expect_equal(length(p$x$opts$series[[1]]$data), 5) expect_equal(p$x$opts$series[[1]]$data[[5]][[1]], 5) # tmp <- jsonlite::fromJSON('https://echarts.apache.org/examples/data/asset/geo/USA.json') # p <- ec.init(load= c('leaflet', 'custom'), # leaflet= list( # center= c(-111, 35.5), zoom= 4, roam= T), # tooltip= list(show=T), # series= list( # ec.util(cmd= 'geojson', geojson= tmp, colorBy= 'data', nid='name', # itemStyle= list(opacity= 0.5) ) # ) # ) # p p <- ec.init(load= c('world','custom'), geo= list(type='map', map='world', center= c(-116.35, 35.5), zoom= 17, roam=TRUE), series= list( ec.util(cmd= 'geojson', geojson= jsonlite::fromJSON(myGeojson), cs='geo', itemStyle= list(opacity= 0.5), ppfill= 'red' ) ) ) expect_equal(p$x$opts$series[[1]]$coordinateSystem, 'geo') })