
Create an Encharter Chart
Source:R/encharter.R, R/encharter_chart.R, R/encharter_chartex.R
encharter.RdFactory function that initialises an R6 chart object. Returns a Chart
object for standard OOXML chart types (bar, line, scatter, ...) or a
ChartEx object for modern extended chart types (waterfall, treemap, ...).
The Chart class provides a flexible interface to build Office OpenXML
(OOXML) chart objects. It allows for granular control over grid lines,
secondary axes, and combined chart types (e.g., Bar and Line) within a
single plot area.
An R6 class to create and manipulate Office OpenXML (OOXML) Extended Charts (ChartEx), including Waterfall, Sunburst, Treemap, and Region Maps, which are not supported by standard Office Open XML chart types.
Details
Supported Chart Types:
Bar/Column:
"barChart","barplot","hist","histogram"Line/Area:
"lineChart","line","areaChart","area"Scatter:
"scatterChart","scatter","point"Pie/Doughnut:
"pieChart","pie","doughnutChart","doughnut"Pie of Pie / Bar of Pie:
"ofPieChart","pieOfPie","barOfPie"(the latter preselects the bar subtype; see$set_of_pie_options())3D:
"bar3DChart","line3DChart","pie3DChart","area3DChart","surface3DChart"(see$set_3d_options())Extended (ChartEx):
"waterfall","treemap","sunburst","regionMap","boxWhisker"/"boxplot","funnel"
Bar vs Column direction:
For bar/column charts, orientation is set via the dir argument in
$add_series(): "col" (vertical, default) or "bar"
(horizontal).
This class is designed to work with the openxlsx2 package by generating
the underlying XML required for the add_chart_xml method.
This class uses XML to manipulate the underlying XML structure and
integrates with openxlsx2 for workbook generation.
Further examples
Additional runnable example scripts ship in inst/examples. Each file
defines a single function (named after the file) that builds a workbook
and opens it in interactive sessions. List or run them with:
list.files(system.file("examples", package = "encharter"))
source(system.file("examples", "Bar_Line_Chart.R", package = "encharter"))The available files are:
01_Chart_examples.R— tour of standard + extended types in one wbAll_chartex.R— every ChartEx type (waterfall, sunburst, treemap, ...)Axis_labels.R— negative-value bar with axis crossing logicBW_with_args.R— box-whisker visibility togglesBar_Area_Chart.R— bars + area comboBar_Line_Chart.R— bars + dashed line on secondary axisBar_Line_and_Data_Table.R— date axis + data table below chartBar_Line_and_Line.R— two independent line/bar demosBar_chart2.R— area-base combo with chart/plot stylingBubble_Doughnut.R— doughnut + bubble on one sheetChart_and_plot_style.R— chart-area vs plot-area stylingDroplines_highlowlines_updownbars.R— line adornmentsHistogram_with_args.R— histogram via clusteredColumn binningLabel_Grouping.R— multi-level category labelsLine.R— line with markers and global data labelsNew_chart_types.R— 0.11 showcase: pie/bar of pie, all 3D types, display units, tick skips, directional error barsPie.R— pie with viridis paletteRadar_chart.R— standard vs filled radarScatter.R— markers-only scatterSeatbelts.R— Seatbelts time series with rolling ratesStockCharts.R— stockChart with high/low and up/down barsStyled_Bars.R— heavy series + axis + grid stylingSurface_Plot.R— surface (contour) plot from a matrixTreemap_with_args.R— treemap with parent_label = "banner"Trendline_and_errorbars.R— series error bars + linear trendlineWaterfall.R— financial bridge with subtotalWaterfall2.R— waterfall with date X-axisWaterfall3.R— fully themed waterfallline_scatterplot.R— multi-species scatter from iris
Run all of them in one session with run_all_examples() (defined in
inst/examples/run_all_examples.R).
Super class
EncharterBase -> Chart
Public fields
x2_titleList containing text and style for the secondary X-axis.
y2_titleList containing text and style for the secondary Y-axis.
first_slice_angInteger. Rotation of the first slice (0-360).
expansionInteger. Size of the expansion for pie charts.
hole_sizeInteger. Size of the hole for doughnut charts (0-90).
show_data_tableLogical if a data table should be added.
drop_linesLogical; show lines from points to the axis.
high_low_linesLogical; show lines between max/min points.
up_down_barsLogical; show bars between first and last series.
bubble_scaleNumeric; the scale factor for bubbles (default 100).
show_neg_bubblesLogical; whether to show bubbles with negative values.
disp_blanks_asCharacter; "gap", "span", or "zero".
of_pie_typeCharacter; subtype of
ofPieChart: "pie" or "bar".second_pie_sizeInteger; size of the second pie/bar plot as a percentage (5-200) for
ofPieChart.split_typeCharacter; how points are split into the second plot for
ofPieChart: "auto", "cust", "percent", "pos", or "val".split_posNumeric; split threshold, or point indices (0-based) when
split_type = "cust".view3dNamed list of 3D view parameters (
rot_x,rot_y,perspective,depth_percent,h_percent,right_angle_axes).gap_depthInteger; gap depth percentage (0-500) for 3D charts.
bar_shapeCharacter; bar shape for
bar3DChart: "box", "cylinder", "cone", "coneToMax", "pyramid", or "pyramidToMax".size_representsCharacter; bubble size meaning, "area" or "w".
Methods
Inherited methods
Chart$set_x2_title()
Set the secondary X-axis title.
Only takes effect if at least one series has been assigned to the
secondary X-axis via add_series(secondary = "x"). Issues a warning
and returns self silently otherwise.
Usage
Chart$set_x2_title(
text,
font_size = NULL,
font_name = NULL,
font_color = NULL,
bold = NULL,
italic = NULL,
fill = NULL,
line = NULL,
line_width = NULL
)Arguments
textTitle string.
font_sizeNumeric font size in points.
font_nameFont typeface name.
font_colorSix-digit hex color for the title text.
bold, italicLogical font style.
fillSix-digit hex color for the title background box.
lineSix-digit hex color for the title border.
line_widthNumeric border width in points.
Examples
ec("scatter")$
add_series(data = "Sheet1!A1:A10", secondary = "x")$
set_x2_title("Secondary X", font_color = "888888")Chart$set_y2_title()
Set the secondary Y-axis title.
Only takes effect if at least one series has been assigned to the
secondary Y-axis via add_series(secondary = TRUE) or
secondary = "y". Issues a warning otherwise.
Usage
Chart$set_y2_title(
text,
font_size = NULL,
font_name = NULL,
font_color = NULL,
bold = NULL,
italic = NULL,
fill = NULL,
line = NULL,
line_width = NULL
)Arguments
textTitle string.
font_sizeNumeric font size in points.
font_nameFont typeface name.
font_colorSix-digit hex color for the title text.
bold, italicLogical font style.
fillSix-digit hex color for the title background box.
lineSix-digit hex color for the title border.
line_widthNumeric border width in points.
Examples
ec("line")$
add_series(data = "Sheet1!A1:A10")$
add_series(data = "Sheet1!B1:B10", secondary = TRUE)$
set_y2_title("Growth Rate (%)")Chart$set_y2_axis()
Set Secondary Y-axis scaling, units, and format.
Usage
Chart$set_y2_axis(
min = NULL,
max = NULL,
major = NULL,
minor = NULL,
major_time = NULL,
minor_time = NULL,
base_time = NULL,
major_tick = NULL,
minor_tick = NULL,
format = NULL,
log_base = NULL,
rev = NULL,
color = NULL,
font_name = NULL,
font_size = NULL,
bold = NULL,
italic = NULL,
font_color = NULL,
rotation = NULL,
grid_color = NULL,
grid_lines = NULL,
minor_grid_color = NULL,
minor_grid_lines = NULL,
cross_between = NULL,
line_width = NULL,
grid_width = NULL,
minor_grid_width = NULL,
crosses = "max",
crosses_at = NULL,
label_pos = NULL,
tick_lbl_skip = NULL,
tick_mark_skip = NULL,
disp_units = NULL
)Arguments
minMinimum value for the axis.
maxMaximum value for the axis.
majorNumeric value for major unit interval.
minorNumeric value for minor unit interval.
major_timeTime unit for major steps ("days", "months", "years"). Used for date axes.
minor_timeTime unit for minor steps ("days", "months", "years"). Used for date axes.
base_timeBase time unit for date axes ("days", "months", "years").
major_tick, minor_tickTick marks for major and minor ("cross", "in", "none", "out").
formatA number format string (e.g., "#,##0" or "yyyy-mm-dd").
log_baseBase for logarithmic scaling (e.g., 10).
revLogical to reverse the value order
color, font_colorHex color for the axis lines and label (or independent label color).
font_nameFont typeface name (e.g., "Arial", "Calibri").
font_sizeFont size for the axis labels.
boldLogical; if
TRUE, axis labels will be bold.italicLogical; if
TRUE, axis labels will be italicized.rotationRotation in degrees.
grid_color, minor_grid_colorHex color for the grid lines.
grid_lines, minor_grid_linesLogical. Show or hide grid lines.
cross_betweenSpecifies how the value axis crosses the category axis ('between' or 'midCat').
line_width, grid_width, minor_grid_widthNumeric. Change the width of the axis and grid lines.
crossesIntersection: "autoZero" (default), "min" (start), or "max" (end).
crosses_atNumeric axis value for intersection. Overrides 'crosses'.
label_posLabel position: "nextTo" (default), "low" (edge of chart), "high" (opposite edge), or "none".
tick_lbl_skip, tick_mark_skipInteger (>= 1); label/tick every n-th category (category axes only).
disp_unitsDisplay units: a built-in unit string (e.g. "thousands") or a positive number (value axes only).
Chart$set_x2_axis()
Set Secondary X-axis scaling, units, and format.
Usage
Chart$set_x2_axis(
min = NULL,
max = NULL,
major = NULL,
minor = NULL,
major_time = NULL,
minor_time = NULL,
base_time = NULL,
major_tick = NULL,
minor_tick = NULL,
format = NULL,
log_base = NULL,
rev = NULL,
color = NULL,
font_name = NULL,
font_size = NULL,
bold = NULL,
italic = NULL,
font_color = NULL,
rotation = NULL,
grid_color = NULL,
grid_lines = NULL,
minor_grid_color = NULL,
minor_grid_lines = NULL,
cross_between = NULL,
line_width = NULL,
grid_width = NULL,
minor_grid_width = NULL,
crosses = "max",
crosses_at = NULL,
label_pos = NULL,
tick_lbl_skip = NULL,
tick_mark_skip = NULL,
disp_units = NULL
)Arguments
minMinimum value for the axis.
maxMaximum value for the axis.
majorNumeric value for major unit interval.
minorNumeric value for minor unit interval.
major_timeTime unit for major steps ("days", "months", "years"). Used for date axes.
minor_timeTime unit for minor steps ("days", "months", "years"). Used for date axes.
base_timeBase time unit for date axes ("days", "months", "years").
major_tick, minor_tickTick marks for major and minor ("cross", "in", "none", "out").
formatA number format string (e.g., "#,##0" or "yyyy-mm-dd").
log_baseBase for logarithmic scaling (e.g., 10).
revLogical to reverse the value order
color, font_colorHex color for the axis lines and label (or independent label color).
font_nameFont typeface name (e.g., "Arial", "Calibri").
font_sizeFont size for the axis labels.
boldLogical; if
TRUE, axis labels will be bold.italicLogical; if
TRUE, axis labels will be italicized.rotationRotation in degrees.
grid_color, minor_grid_colorHex color for the grid lines.
grid_lines, minor_grid_linesLogical. Show or hide grid lines.
cross_betweenSpecifies how the value axis crosses the category axis ('between' or 'midCat').
line_width, grid_width, minor_grid_widthNumeric. Change the width of the axis and grid lines.
crossesIntersection: "autoZero" (default), "min" (start), or "max" (end).
crosses_atNumeric axis value for intersection. Overrides 'crosses'.
label_posLabel position: "nextTo" (default), "low" (edge of chart), "high" (opposite edge), or "none".
tick_lbl_skip, tick_mark_skipInteger (>= 1); label/tick every n-th category (category axes only).
disp_unitsDisplay units: a built-in unit string (e.g. "thousands") or a positive number (value axes only).
Chart$set_of_pie_options()
Configure the Pie of Pie / Bar of Pie chart
(ofPieChart).
Usage
Chart$set_of_pie_options(
type = NULL,
second_size = NULL,
split_type = NULL,
split_pos = NULL
)Arguments
typeSubtype:
"pie"(Pie of Pie, default) or"bar"(Bar of Pie).second_sizeSize of the second plot as a percentage of the main pie, from 5 to 200. Default 75.
split_typeHow data points are assigned to the second plot:
"auto"(default),"percent","pos"(last n points),"val"(values below threshold), or"cust".split_posNumeric split threshold for
"percent","pos", and"val"; for"cust"a vector of 0-based point indices to move to the second plot.
Examples
ec("ofPieChart")$set_of_pie_options(type = "bar", split_type = "pos", split_pos = 3)Chart$set_3d_options()
Configure the 3D view and 3D-only chart options. Only
takes effect for the 3D chart types (bar3DChart,
line3DChart, pie3DChart, area3DChart,
surface3DChart) and surfaceChart.
Usage
Chart$set_3d_options(
rot_x = NULL,
rot_y = NULL,
perspective = NULL,
depth_percent = NULL,
h_percent = NULL,
right_angle_axes = NULL,
gap_depth = NULL,
shape = NULL
)Arguments
rot_xRotation around the X-axis in degrees, from -90 to 90.
rot_yRotation around the Y-axis in degrees, from 0 to 360.
perspectivePerspective in half-degrees, from 0 to 240 (ignored when
right_angle_axes = TRUE).depth_percentDepth as a percentage of chart width, 20 to 2000.
h_percentHeight as a percentage of chart width, 5 to 500.
right_angle_axesLogical; render axes at right angles instead of in perspective.
gap_depthGap depth percentage between series, 0 to 500 (bar/line/area 3D).
shapeBar shape for
bar3DChart:"box"(default),"cylinder","cone","coneToMax","pyramid", or"pyramidToMax".
Examples
ec("bar3DChart")$set_3d_options(rot_x = 20, rot_y = 30, shape = "cylinder")Chart$add_series()
Add a data series to the chart with independent styling.
Usage
Chart$add_series(
name = NULL,
data,
label = NULL,
weight = NULL,
color = "4472C4",
type = NULL,
secondary = FALSE,
dir = "col",
grouping = "standard",
overlap = NULL,
gap_width = NULL,
smooth = FALSE,
show_line = TRUE,
marker = "none",
marker_size = 5,
marker_fill = NULL,
marker_line = NULL,
marker_line_width = 0.75,
show_val = NULL,
show_cat = NULL,
line_type = NULL,
line_width = 1,
line_color = NULL,
filled = FALSE,
error_bars = FALSE,
trendline = FALSE,
invert_if_negative = FALSE
)Arguments
nameCell range or string for series name.
dataCell range for series values.
labelCell range for category labels.
weightCell range for bubble sizes (bubbleChart only).
colorPrimary Hex color for the series (used as default for line and markers).
typeChart type for this specific series (for combo charts).
secondaryLogical. Set to TRUE to move series to secondary axis.
dirBar direction ("col" or "bar").
groupingChart grouping ("standard", "stacked", "percentStacked").
overlapInteger between -100 and 100 for bar charts.
gap_widthInteger between 0 and 500 for bar charts.
smoothLogical. Enable line smoothing for line/scatter charts.
show_lineLogical. Show the line connecting points.
markerMarker type ("none", "circle", "square", "diamond", "triangle").
marker_sizeInteger size of marker.
marker_fillHex color for the interior of the marker. Defaults to
color.marker_lineHex color for the marker border. Defaults to
color.marker_line_widthNumeric width of the marker border.
show_valLogical. Override global label settings for this series (show value).
show_catLogical. Override global label settings for this series (show category).
line_typeLine style: "dashed", "dotted", "dashDot", or "solid".
line_widthNumeric width of the connecting line.
line_colorHex color for the connecting line. Defaults to
color.filledLogical; for radar charts, fills the interior area. Default FALSE.
error_barsA list of error bar properties:
type: The error value type (ST_ErrValType). Must be one of:"fixedVal"(Fixed Value),"percentage"(Percentage),"stdDev"(Standard Deviation),"stdErr"(Standard Error), or"cust"(Custom).value: The numeric value for the error bars (e.g., 10 for 10% or 5 for fixed units).direction: Direction of bars. One of"both","plus", or"minus".axis: Error direction axis,"y"(default) or"x"(horizontal bars, scatter charts).color: Hex color code for the bars (e.g., "FF0000").
trendlineA list of regression line properties:
type: The regression type (ST_TrendlineType). Must be one of:"linear"(Linear),"exp"(Exponential),"log"(Logarithmic),"movingAvg"(Moving Average),"poly"(Polynomial), or"power"(Power).order: Required for"poly"; an integer between 2 and 6.period: Required for"movingAvg"; an integer representing the window size.forward,backward: Numeric; extrapolate the line n periods forwards/backwards.intercept: Numeric; force the line through a fixed y-intercept.color: Hex color code for the line.show_r2: Logical; ifTRUE, displays the R-squared value on the chart.
invert_if_negativeLogical; bar charts only. Invert the fill for negative values. Default
FALSE.
Chart$render()
Generate the final XML string for the chart.
Usage
Chart$render(
u_ids = c("53178645", "60812428", "64752656", "81893617", "90007639")
)Super class
EncharterBase -> ChartEx
Public fields
color_xmlcolor
style_xmlstyle
region_colorsInternal; color scale entries for region maps set via
set_region_map_colors().
Methods
Inherited methods
ChartEx$set_waterfall_colors()
Set the semantic waterfall colors (also used as the
first colors of the chart's color cycle). ChartEx charts derive both
the point fills and the legend keys from the chart's color style
part (colors{n}.xml); waterfall maps Increase, Decrease, and
Total to the first three entries of that cycle. This method
replaces those entries, so the bars and the legend stay consistent.
For individual outlier points (e.g. an "unexpected decrease"), pass
a per-point color vector to add_series() instead.
Arguments
increaseFill for rising values: hex, an R color name, or
openxlsx2::wb_color()(theme colors supported).decreaseFill for falling values.
totalFill for subtotal/total points.
ChartEx$set_color_cycle()
Set the chart's color cycle (the color style part,
colors{n}.xml). ChartEx charts derive series, category, and
legend colors from this cycle: treemap and sunburst color their
top-level categories from it, box & whisker and histogram color
their series, funnel and Pareto take their first colors from it.
The first length(colors) cycle entries are replaced in order; if
more colors are given than the part contains, the cycle is
extended. Remaining entries and the brightness variations are kept.
Arguments
colorsCharacter vector of colors (hex or R color names), or a list which may also contain
openxlsx2::wb_color()values (theme colors supported).
ChartEx$set_region_map_colors()
Set the color scale of a region map. Written as the
series' cx:valueColors element, which drives both the map shading
and the legend's color scale. Only applied to regionMap series.
Arguments
minColor for the smallest values (hex, R color name, or
openxlsx2::wb_color()).maxColor for the largest values.
midOptional middle color for a three-color scale.
Examples
ec("regionMap")$
add_series(data = "Sheet1!B2:B7", label = "Sheet1!A2:A7")$
set_region_map_colors(min = "FFF2CC", max = "C00000")ChartEx$add_series()
Add a data series to the chart.
Usage
ChartEx$add_series(
name = NULL,
data,
label = NULL,
type = NULL,
color = "auto",
line_color = NULL,
line_width = 1,
gap_width = NULL,
subtotals = NULL,
statistics = NULL,
binning = NULL,
visibility = NULL,
parent_label = "overlapping"
)Arguments
nameCell range for the series name.
dataCell range for the numeric values.
labelCell range for the category labels.
typeType of chart (waterfall, sunburst, treemap, regionMap).
colorHex color or "auto".
line_colorBorder color.
line_widthBorder width.
gap_widthInteger between 0 and 500.
subtotalsNumeric vector of indices to treat as subtotals (Waterfall only).
statisticsQuartile method: "inclusive" or "exclusive".
binningA list for Histogram/BoxWhisker:
binSize(numeric),binCount(integer),intervalClosed("left", "right"),underflow(numeric or "auto"),overflow(numeric or "auto").visibilityA named list of logicals for BoxWhisker/Waterfall:
connectorLines,meanLine,meanMarker,nonoutliers,outliers.parent_labelTreemap label style: "overlapping", "banner", or "none".
Examples
# Standard line chart
ec("lineChart")
#> An encharter object
#> Number of Series: 0
# Extended waterfall chart
ec("waterfall")
#> An encharter object
#> Number of Series: 0
# R-style alias
ec("barplot")
#> An encharter object
#> Number of Series: 0
## ------------------------------------------------
## Method `Chart$set_x2_title()`
## ------------------------------------------------
ec("scatter")$
add_series(data = "Sheet1!A1:A10", secondary = "x")$
set_x2_title("Secondary X", font_color = "888888")
## ------------------------------------------------
## Method `Chart$set_y2_title()`
## ------------------------------------------------
ec("line")$
add_series(data = "Sheet1!A1:A10")$
add_series(data = "Sheet1!B1:B10", secondary = TRUE)$
set_y2_title("Growth Rate (%)")
## ------------------------------------------------
## Method `Chart$set_of_pie_options()`
## ------------------------------------------------
ec("ofPieChart")$set_of_pie_options(type = "bar", split_type = "pos", split_pos = 3)
## ------------------------------------------------
## Method `Chart$set_3d_options()`
## ------------------------------------------------
ec("bar3DChart")$set_3d_options(rot_x = 20, rot_y = 30, shape = "cylinder")
## ------------------------------------------------
## Method `ChartEx$set_waterfall_colors()`
## ------------------------------------------------
ec("waterfall")$
add_series(data = "Sheet1!B2:B7", label = "Sheet1!A2:A7", subtotals = c(0, 5))$
set_waterfall_colors(increase = "70AD47", decrease = "C00000", total = "A6A6A6")
## ------------------------------------------------
## Method `ChartEx$set_color_cycle()`
## ------------------------------------------------
ec("treemap")$
add_series(data = "Sheet1!B2:B7", label = "Sheet1!A2:A7")$
set_color_cycle(c("C00000", "4472C4", "70AD47", "FFC000"))
## ------------------------------------------------
## Method `ChartEx$set_region_map_colors()`
## ------------------------------------------------
ec("regionMap")$
add_series(data = "Sheet1!B2:B7", label = "Sheet1!A2:A7")$
set_region_map_colors(min = "FFF2CC", max = "C00000")