Categoricals
can only take on a limited number of possible values (categories) and
can be sorted according to the custom order of the categories.
To harness Categorical
data type in Lets-Plot you can annotate any variable in your dataset as Categorical
using Lets-Plot asDiscrete()
function and the levels
parameter.
%useLatestDescriptors
%use lets-plot
%use dataframe
LetsPlot.getInfo()
Lets-Plot Kotlin API v.4.6.0. Frontend: Notebook with dynamically loaded JS. Lets-Plot JS v.4.2.0.
val mpg = DataFrame.readCSV("https://raw.githubusercontent.com/JetBrains/lets-plot-docs/master/data/mpg.csv")
mpg.head(3)
DataFrame: rowsCount = 3, columnsCount = 12
untitled | manufacturer | model | displ | year | cyl | trans | drv | cty | hwy | fl | class |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | audi | a4 | 1.800000 | 1999 | 4 | auto(l5) | f | 18 | 29 | p | compact |
2 | audi | a4 | 1.800000 | 1999 | 4 | manual(m5) | f | 21 | 29 | p | compact |
3 | audi | a4 | 2.000000 | 2008 | 4 | manual(m6) | f | 20 | 31 | p | compact |
val mpgData = mpg.toMap()
Unordered Discrete
by Default¶letsPlot(mpgData) + geomBar() { x = "manufacturer" } + coordFlip()
//
// Create a list of categories sorted according to a num. of vehicles in the dataset.
//
val brandsByCount = mpg.valueCounts { manufacturer }.manufacturer.toList()
brandsByCount.forEach(::println)
dodge toyota volkswagen ford chevrolet audi hyundai subaru nissan honda jeep pontiac land rover mercury lincoln
Categorical
Using asDiscrete(levels=..)
¶letsPlot(mpgData) +
geomBar(labels = layerLabels("..count..").format("..count..", "d"), tooltips = tooltipsNone) {
x = asDiscrete("manufacturer", levels = brandsByCount)
} +
coordFlip()
However, it's fairly tricky to annotate a facet variable with asDiscrete()
.
letsPlot(data = mpgData) {
// Utilize unused aesthetic just to annotate "manufacturer" as Categorical.
slope = asDiscrete("manufacturer", levels = brandsByCount)
} +
geomPie() {
fill = "drv"
size = "..sum.."
} +
facetWrap(facets = "manufacturer", ncol = 5, order = 0) +
scaleSize(range = 2 to 10) +
guides(size = "none") +
themeVoid()