{"_id":"@apple/hierarchical-confusion-matrix","_rev":"9-07df2dd8dafc56a0d00cbcf212fc7bd2","name":"@apple/hierarchical-confusion-matrix","dist-tags":{"latest":"1.1.1"},"versions":{"1.0.0":{"name":"@apple/hierarchical-confusion-matrix","version":"1.0.0","author":{"name":"Apple Inc."},"license":"Apple Sample Code","_id":"@apple/hierarchical-confusion-matrix@1.0.0","maintainers":[{"name":"domoritz","email":"domoritz@gmail.com"},{"name":"fredhohman","email":"fred.hohman@gmail.com"}],"dist":{"shasum":"91e57f58166e6719cf2e3a15377d25157cd89f54","tarball":"https://registry.npmjs.org/@apple/hierarchical-confusion-matrix/-/hierarchical-confusion-matrix-1.0.0.tgz","fileCount":37,"integrity":"sha512-TXASm27ir3n7+BId+Tf3Zt1mWDC4CQFLFEj8mTjw2H19cjkjI7s9C/QP4kW7S6DT3Y4q7DCOs4NvyfRWDfyFbg==","signatures":[{"sig":"MEYCIQD8zSWGV0xFTdz9Zq2K6rWkSk45Ccx1MgKKU4M7yar0jwIhAK2nvOzrcuB4tMf1qAlV9/HuoCZ/HRe98iD5rLVDw8Xv","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":434936,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiWeziACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpzmQ/7BHQLR4ekZrfgt8npLlN4Yrvco318k2M+YQsqp/H0O6oGl+4i\r\ndocke92qhs3VaUQFGuXjLczRO2008MKWRwEnWAAdM6pq/WcG+RdmPFXJrFfN\r\nql3aFU3B7sFTiI3FH1hg/xLzcYbea8RNxiXwqFXJgPpx2I57YS9pkSd9WS2V\r\nouZl0jVkftMt/JfJfeIQRKXAHzkicrXvonXzEH9REJCdzxfinuYpnDCKgZhb\r\nywIALAvorDXj5vgXGvYUT6YUs/kkPlPT94L/9z/7aeSfYRiPF0AmFRYCKKvS\r\naUGnGY9BoggQTlsacEuzK5JSyUSL6u70WKr0H8dMmXJPlg7HOgdXybaWPyC4\r\nIzzcb4binnJz70OrJsPJijkftetDDfdCit7o5Uz2xtRnDbQAoLdWkmIrTv+V\r\nzqj9N+Q8EsyJRwyvoNb/ruaTCLHtXpBLNeKpqaHB8Wbf8Xy8HHa0dq21wqRo\r\n2LIzO91oBuZIgAKUay5gmDO05vgQZZADnNvQKnVsWlGhO8fzD1/7vF+ORZyy\r\n2s71FR97ywA6lXQ5fAtQtkYzyW4TsF2v1ydTV3rmgkRKh8OeTPVFMPfHX23f\r\n0PxV8VVWl3os1BfJ8QQB5cqE7dfmYmtJKhAD7d7WtEWSP+jEdRbavaediEeT\r\nn8WvCW+Dywc5iRYYyWyVpb9syzvpwFedrNs=\r\n=Q0MN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"public/confMat.js","gitHead":"17b45b697f568fd3d4b410cbfe3a19dfab4c01db","scripts":{"dev":"run-p start:dev autobuild","lint":"eslint --config .eslintrc.json --ext .js,.ts,.json .","test":"npm run lint && npm run svelte-check && jest","build":"rollup -c","start":"sirv public --single","deploy":"npm run build && gh-pages -d public","format":"npm run lint -- --fix","autobuild":"rollup -c -w","start:dev":"sirv public --single --dev","svelte-check":"npx svelte-check"},"_npmUser":{"name":"fredhohman","email":"fred.hohman@gmail.com"},"_npmVersion":"7.24.1","description":"The confusion matrix, a ubiquitous visualization for helping people evaluate machine learning models, is a tabular layout that compares predicted class labels against actual class labels over all data instances. Neo is a visual analytics system that enabl","directories":{},"_nodeVersion":"14.15.4","dependencies":{"d3-dsv":"^2.0.0","lodash":"^4.17.21","ndarray":"^1.0.19","d3-array":"^2.11.0","d3-scale":"^3.2.3","vega-scale":"^7.1.1","ndarray-ops":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.5.1","tslib":"^2.3.1","eslint":"^8.10.0","rollup":"^2.70.0","svelte":"^3.46.4","ts-jest":"^27.1.3","gh-pages":"^3.2.3","sirv-cli":"^2.0.2","babel-jest":"^27.5.1","typescript":"^4.6.2","@babel/core":"^7.17.5","@types/jest":"^27.4.1","@types/node":"^17.0.21","npm-run-all":"^4.1.5","@types/cwise":"^1.0.4","svelte-check":"^2.4.5","@types/d3-dsv":"^3.0.0","@types/lodash":"^4.14.179","@types/ndarray":"^1.0.11","@types/d3-array":"^3.0.2","@types/d3-scale":"^4.0.2","@tsconfig/svelte":"^3.0.0","svelte-preprocess":"^4.10.4","eslint-plugin-jest":"^26.1.1","eslint-plugin-json":"^3.1.0","@rollup/plugin-json":"^4.1.0","rollup-plugin-svelte":"^7.1.0","rollup-plugin-terser":"^7.0.2","eslint-plugin-svelte3":"^3.4.1","rollup-plugin-css-only":"^3.1.0","@rollup/plugin-commonjs":"^21.0.2","@babel/preset-typescript":"^7.16.7","rollup-plugin-livereload":"^2.0.5","@rollup/plugin-typescript":"^8.3.1","@typescript-eslint/parser":"^5.14.0","@rollup/plugin-node-resolve":"^13.1.3","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/hierarchical-confusion-matrix_1.0.0_1650060514047_0.12396175304716972","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@apple/hierarchical-confusion-matrix","version":"1.0.1","author":{"name":"Apple Inc."},"license":"Apple Sample Code","_id":"@apple/hierarchical-confusion-matrix@1.0.1","maintainers":[{"name":"domoritz","email":"domoritz@gmail.com"},{"name":"fredhohman","email":"fred.hohman@gmail.com"}],"dist":{"shasum":"68afbf29fbd822a628f10f251770f78db3c6647f","tarball":"https://registry.npmjs.org/@apple/hierarchical-confusion-matrix/-/hierarchical-confusion-matrix-1.0.1.tgz","fileCount":36,"integrity":"sha512-4aNjmb5QoxouCVjzma43ApzsgHCBisciVu48SGMZ4pkJeceoYOG8HpZRkr2LtwhjZBJXiPRuDJe2B/Gx1/Fq6Q==","signatures":[{"sig":"MEUCIQDCGQORkN84oBR7tKTLmQNbCGQpqQKfU2zVq5yEfJe0fgIgEM29wODJ1U4wZan14nDFwH9uNb19orXqjxecEzfGEyI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":194641,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjPxmUACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpFtw//UX7xjfoVnZpPiaS9omYw3lBVhUTIEBuULFaZi9bmkXV2U90/\r\nG+STRWcSy7k7hRT3fX6vk7aF04Ro2V+hcQA7Hm3QrDVrZzHIVlbwVNQ81tjo\r\nJ0ycW62qlpwCn+erqVcP02LgbH2UBNP4iTXqIs7ezvZYOIR/7zp8dA5ZdWNA\r\nzu4aIWFaB0N+YaNOJ2T7iKp5mXNM01Pp3vk9Z0pKwROMRtPfkLhrZiWrDsC0\r\nU/dGrBpr1dac5otcz1Cukc2LXtodSQswdjSLMjsU7berwrG5NUtcAdG11qwz\r\nUuwahIItZoNxDgMgkJcY3bP+HG6RSz0aIj5DtKYMCUsuwwtRBEyifoc51tQS\r\nNtUilin9eBc/A6BfpEJTkTWsanV2//svjqWqALxOhUajc1s78nAfGqZ4YRCu\r\nhmg15qG4F+2X8ObjdW5VLAK+AfiMXeeotqW3hcmlEusiIWanmuJk7ZalmbwM\r\ng5nKqtdr89S/enI7IESUFvUSqjwMNnimNGJ4B49KpvDnowCGhVCLNvxILI8L\r\nXUTBrgu2MoW/T9/tErtkEjAuLL+4K19yUjg2MC2TkYldefUIWoqhS5qpXAzK\r\nUuYlRgEvHYEH0djx2yFJMFuhtRpzjsYBDktJcl50Ok4gI+FmfyBWFgW2Fy4d\r\nHgusOeLNRBm3Q9SlyBsmW5+0iqBycvRi5BI=\r\n=HVJB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"public/confMat.js","gitHead":"d715d2bc4a537535119e667358dcf2dd70b0e317","scripts":{"dev":"run-p start:dev autobuild","lint":"eslint --config .eslintrc.json --ext .js,.ts,.json .","test":"npm run lint && npm run svelte-check && jest","build":"rollup -c","start":"sirv public --single","deploy":"npm run build && gh-pages -d public","format":"npm run lint -- --fix","autobuild":"rollup -c -w","start:dev":"sirv public --single --dev","svelte-check":"npx svelte-check"},"_npmUser":{"name":"fredhohman","email":"fred.hohman@gmail.com"},"_npmVersion":"8.12.1","description":"[![npm version](https://img.shields.io/npm/v/@apple/hierarchical-confusion-matrix.svg)](https://www.npmjs.com/package/@apple/hierarchical-confusion-matrix)","directories":{},"_nodeVersion":"18.4.0","dependencies":{"d3-dsv":"^3.0.1","lodash":"^4.17.21","ndarray":"^1.0.19","d3-array":"^3.2.0","d3-scale":"^4.0.2","vega-scale":"^7.1.1","ndarray-ops":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.5.1","tslib":"^2.3.1","eslint":"^8.24.0","rollup":"^2.79.0","svelte":"^3.50.1","ts-jest":"^27.1.5","gh-pages":"^4.0.0","sirv-cli":"^2.0.2","babel-jest":"^29.0.1","typescript":"^4.7.4","@babel/core":"^7.18.10","@types/jest":"^27.4.1","@types/node":"^18.7.23","npm-run-all":"^4.1.5","@types/cwise":"^1.0.4","svelte-check":"^2.8.0","@types/d3-dsv":"^3.0.0","@types/lodash":"^4.14.179","@types/ndarray":"^1.0.11","@types/d3-array":"^3.0.3","@types/d3-scale":"^4.0.2","@tsconfig/svelte":"^3.0.0","svelte-preprocess":"^4.10.7","eslint-plugin-jest":"^26.5.3","eslint-plugin-json":"^3.1.0","@rollup/plugin-json":"^4.1.0","rollup-plugin-svelte":"^7.1.0","rollup-plugin-terser":"^7.0.2","eslint-plugin-svelte3":"^4.0.0","rollup-plugin-css-only":"^3.1.0","@rollup/plugin-commonjs":"^22.0.2","@babel/preset-typescript":"^7.18.6","rollup-plugin-livereload":"^2.0.5","@rollup/plugin-typescript":"^8.4.0","@typescript-eslint/parser":"^5.30.3","@rollup/plugin-node-resolve":"^13.1.3","@typescript-eslint/eslint-plugin":"^5.38.1"},"_npmOperationalInternal":{"tmp":"tmp/hierarchical-confusion-matrix_1.0.1_1665079699733_0.5723338472933592","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@apple/hierarchical-confusion-matrix","version":"1.1.0","author":{"name":"Apple Inc."},"license":"SEE LICENSE IN `LICENSE`","_id":"@apple/hierarchical-confusion-matrix@1.1.0","maintainers":[{"name":"domoritz","email":"domoritz@gmail.com"},{"name":"fredhohman","email":"fred.hohman@gmail.com"}],"dist":{"shasum":"14affd7068a623db11411f4d848a146bdb05ae49","tarball":"https://registry.npmjs.org/@apple/hierarchical-confusion-matrix/-/hierarchical-confusion-matrix-1.1.0.tgz","fileCount":45,"integrity":"sha512-/3sei4KpfnGEixO0HNgzx8hRtEbKRks2340ggZUjlfCOauM1R2vH7oVvCHbWoGn+2MsMrPrvO9YTRQ+po8cJdw==","signatures":[{"sig":"MEQCIA77tzfXnwcM4TuES+e/LNBPDBm1JsKTq5L/0cYdZXrOAiAEZcO+QCNwLRTx4BoQ2+g0SXNnFh4lXHVRca4CdXGq+A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":225385},"main":"package/confMat.js","type":"module","gitHead":"69ed4b1f6f3f67b0c77ef08be621845f35c940f5","scripts":{"dev":"vite dev","fmt":"prettier --ignore-path .eslintignore --check .","lint":"eslint . --max-warnings 0","build":"vite build","check":"svelte-kit sync && svelte-check --tsconfig ./tsconfig.json","fix:fmt":"prettier --ignore-path .eslintignore --write .","preview":"vite preview","coverage":"vitest run --coverage","fix:lint":"eslint . --fix","test:unit":"vitest","check:watch":"svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"},"_npmUser":{"name":"domoritz","email":"domoritz@gmail.com"},"_npmVersion":"9.6.6","description":"[![npm version](https://img.shields.io/npm/v/@apple/hierarchical-confusion-matrix.svg)](https://www.npmjs.com/package/@apple/hierarchical-confusion-matrix)","directories":{},"_nodeVersion":"20.1.0","dependencies":{"d3-dsv":"^3.0.1","lodash":"^4.17.21","ndarray":"^1.0.19","d3-array":"^3.2.3","d3-scale":"^4.0.2","vega-scale":"^7.3.0","ndarray-ops":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.3.6","tslib":"^2.5.0","eslint":"^8.40.0","svelte":"^3.59.1","vitest":"^0.31.0","gh-pages":"^5.0.0","prettier":"^2.8.8","typescript":"^5.0.4","@types/node":"^20.1.5","@types/cwise":"^1.0.4","svelte-check":"^3.3.2","@sveltejs/kit":"^1.16.3","@types/d3-dsv":"^3.0.1","@types/lodash":"^4.14.194","@types/ndarray":"^1.0.11","@types/d3-array":"^3.0.4","@types/d3-scale":"^4.0.3","eslint-plugin-json":"^3.1.0","eslint-plugin-svelte":"^2.28.0","eslint-config-prettier":"^8.8.0","prettier-plugin-svelte":"^2.10.0","@sveltejs/adapter-static":"^2.0.2","@typescript-eslint/parser":"^5.59.6","@typescript-eslint/eslint-plugin":"^5.59.6"},"_npmOperationalInternal":{"tmp":"tmp/hierarchical-confusion-matrix_1.1.0_1684225832944_0.7348580848983965","host":"s3://npm-registry-packages"}},"1.1.1":{"name":"@apple/hierarchical-confusion-matrix","version":"1.1.1","author":{"name":"Apple Inc."},"license":"SEE LICENSE IN `LICENSE`","_id":"@apple/hierarchical-confusion-matrix@1.1.1","maintainers":[{"name":"domoritz","email":"domoritz@gmail.com"},{"name":"fredhohman","email":"fred.hohman@gmail.com"}],"dist":{"shasum":"14efeff111211ba387eb5a2c8e78d695eb5818b0","tarball":"https://registry.npmjs.org/@apple/hierarchical-confusion-matrix/-/hierarchical-confusion-matrix-1.1.1.tgz","fileCount":87,"integrity":"sha512-AcFZczSRA2YDDgk3AJm5IBXeFsE0TtP4/W6WI8Yjy0JXTWdnqa/g5NKSjjEdm9rY5bSceOOmRz1cFiFOUQkx1w==","signatures":[{"sig":"MEUCIQDM9go7tlH80yalOwIN9eQzJDr5HmBFrnbwiTqb2r95VQIgYT72125VhjEtCn4MsXczsQvGRy0su7J4KanU2uo96qM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4767247},"main":"./package/confMat.umd.cjs","type":"module","style":"./dist/style.css","types":"./dist/index.d.ts","module":"./package/confMat.js","exports":{".":{"import":"./package/confMat.js","require":"./package/confMat.umd.cjs"},"./package/*.css":{"import":"./package/*.css","require":"./package/*.css"}},"gitHead":"ae2e05ce5cd3a194877bec3f3fd66d8eb6302de1","scripts":{"dev":"vite dev","fmt":"prettier --ignore-path .eslintignore --check .","lint":"eslint . --max-warnings 0","build":"vite build","check":"svelte-kit sync && svelte-check --tsconfig ./tsconfig.json","fix:fmt":"prettier --ignore-path .eslintignore --write .","prepack":"yarn build:lib","preview":"vite preview","coverage":"vitest run --coverage","fix:lint":"eslint . --fix","build:lib":"vite build --config vite.config.lib.ts","test:unit":"vitest","check:watch":"svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"},"_npmUser":{"name":"domoritz","email":"domoritz@gmail.com"},"_npmVersion":"9.8.1","description":"[![npm version](https://img.shields.io/npm/v/@apple/hierarchical-confusion-matrix.svg)](https://www.npmjs.com/package/@apple/hierarchical-confusion-matrix)","directories":{},"_nodeVersion":"20.5.0","dependencies":{"d3-dsv":"^3.0.1","lodash":"^4.17.21","ndarray":"^1.0.19","d3-array":"^3.2.4","d3-scale":"^4.0.2","vega-scale":"^7.3.0","ndarray-ops":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.3.9","tslib":"^2.6.1","eslint":"^8.44.0","svelte":"^3.59.2","vitest":"^0.34.1","prettier":"^2.8.8","typescript":"^5.1.6","@types/node":"^20.1.5","@types/cwise":"^1.0.4","svelte-check":"^3.4.6","@sveltejs/kit":"^1.22.4","@types/d3-dsv":"^3.0.1","@types/lodash":"^4.14.195","@types/ndarray":"^1.0.11","@types/d3-array":"^3.0.5","@types/d3-scale":"^4.0.3","vite-plugin-dts":"^3.5.1","eslint-plugin-json":"^3.1.0","eslint-plugin-svelte":"^2.28.0","eslint-config-prettier":"^8.8.0","prettier-plugin-svelte":"^2.10.1","@sveltejs/adapter-static":"^2.0.2","@typescript-eslint/parser":"^5.62.0","@sveltejs/vite-plugin-svelte":"^2.4.5","@typescript-eslint/eslint-plugin":"^5.59.6"},"_npmOperationalInternal":{"tmp":"tmp/hierarchical-confusion-matrix_1.1.1_1691754704939_0.4597901242185256","host":"s3://npm-registry-packages"}}},"time":{"created":"2022-04-15T22:08:34.047Z","modified":"2025-05-13T18:21:17.238Z","1.0.0":"2022-04-15T22:08:34.197Z","1.0.1":"2022-10-06T18:08:20.017Z","1.1.0":"2023-05-16T08:30:33.138Z","1.1.1":"2023-08-11T11:51:45.110Z"},"author":{"name":"Apple Inc."},"license":"SEE LICENSE IN `LICENSE`","description":"[![npm version](https://img.shields.io/npm/v/@apple/hierarchical-confusion-matrix.svg)](https://www.npmjs.com/package/@apple/hierarchical-confusion-matrix)","maintainers":[{"email":"fred.hohman@gmail.com","name":"fredhohman"},{"email":"domoritz@gmail.com","name":"domoritz"},{"email":"donghao.ren+npm@gmail.com","name":"donghaoren"},{"email":"tim@kolecke.com","name":"kolecke"}],"readme":"# Neo: Hierarchical Confusion Matrix\n\n[![npm version](https://img.shields.io/npm/v/@apple/hierarchical-confusion-matrix.svg)](https://www.npmjs.com/package/@apple/hierarchical-confusion-matrix)\n\nThe confusion matrix, a ubiquitous visualization for helping people evaluate machine learning models, is a tabular layout that compares predicted class labels against actual class labels over all data instances. Neo is a visual analytics system that enables practitioners to flexibly author and interact with hierarchical and multi-output confusion matrices, visualize derived metrics, renormalize confusions, and share matrix specifications.\n\nThis code accompanies the research paper:\n\n**[Neo: Generalizing Confusion Matrix Visualization to Hierarchical and Multi-Output Labels](https://machinelearning.apple.com/research/generalizing-confusion-matrix)**  \nJochen Görtler, Fred Hohman, Dominik Moritz, Kanit Wongsuphasawat, Donghao Ren, Rahul Nair, Marc Kirchner, Kayur Patel  \n_ACM Conference on Human Factors in Computing Systems (CHI), 2022._  \n[<img width=\"16\" alt=\"image\" src=\"https://user-images.githubusercontent.com/5741691/166707770-eac596b5-2622-4899-9ff8-8c3037b03b3a.png\"> Paper](https://arxiv.org/abs/2110.12536), [<img width=\"12\" alt=\"image\" src=\"https://user-images.githubusercontent.com/5741691/166709218-c8fa7af7-a5a4-467b-b77d-679aaf1aabda.png\"> Live demo](https://apple.github.io/ml-hierarchical-confusion-matrix/), [<img width=\"18\" alt=\"image\" src=\"https://user-images.githubusercontent.com/5741691/166709344-e11b80c9-1b24-4412-bd7d-03c7e3dfaecc.png\"> Video](https://www.youtube.com/watch?v=LmsJJDHfGlI), [<img width=\"18\" alt=\"image\" src=\"https://user-images.githubusercontent.com/5741691/166709459-5d0e44a5-0dbc-4679-b071-10ed0a3cdd92.png\"> Video Preview](https://www.youtube.com/watch?v=8ZxvsLPIF_Q), [<img width=\"20\" alt=\"image\" src=\"https://user-images.githubusercontent.com/5741691/166706116-4d2c003f-fd68-4b75-b896-8f9a588318c1.png\"> Code](https://github.com/apple/ml-hierarchical-confusion-matrix/)\n\n## Documentation\n\nYou can embed our confusion matrix visualization into your own project. There are two ways to use it.\n\n### NPM\n\nInstall with `npm install --save @apple/hierarchical-confusion-matrix` or `yarn add @apple/hierarchical-confusion-matrix`.\n\nThen you can import the module in your project\n\n```js\nimport confMat from '@apple/hierarchical-confusion-matrix';\n\nconst spec = {\n    classes: ['root'],\n};\n\nconst confusions = [\n    {\n        actual: ['root:a'],\n        observed: ['root:a'],\n        count: 1,\n    },\n    {\n        actual: ['root:a'],\n        observed: ['root:b'],\n        count: 2,\n    },\n    {\n        actual: ['root:b'],\n        observed: ['root:a'],\n        count: 3,\n    },\n    {\n        actual: ['root:b'],\n        observed: ['root:b'],\n        count: 4,\n    },\n];\n\nconfMat.embed('matContainer', spec, confusions);\n```\n\n### Embed the Compiled File\n\nIf you prefer to load the compiled JavaScript directly, you have to compile it. To do this, run `yarn install` and copy the `public/confMat.js` into your project. Here is a simple example of a small confusion matrix:\n\n```html\n<!DOCTYPE html>\n<html>\n    <head>\n        <meta charset=\"utf8\" />\n        <meta name=\"viewport\" content=\"width=device-width\" />\n        <title>Neo: Hierarchical Confusion Matrix</title>\n    </head>\n\n    <body>\n        <div id=\"matContainer\"></div>\n        <script src=\"confMat.js\"></script>\n        <script>\n            const spec = {\n                classes: ['root'],\n            };\n\n            const confusions = [\n                {\n                    actual: ['root:a'],\n                    observed: ['root:a'],\n                    count: 1,\n                },\n                {\n                    actual: ['root:a'],\n                    observed: ['root:b'],\n                    count: 2,\n                },\n                {\n                    actual: ['root:b'],\n                    observed: ['root:a'],\n                    count: 3,\n                },\n                {\n                    actual: ['root:b'],\n                    observed: ['root:b'],\n                    count: 4,\n                },\n            ];\n\n            confMat.embed('matContainer', spec, confusions);\n        </script>\n    </body>\n</html>\n```\n\n### Specification\n\nYou can find all the options that you can pass via the `spec` argument in [`src/specification.ts`](src/specification.ts).\n\n### Loaders\n\nThe different loaders can be found in [`src/loaders`](src/loaders), which include loading data from `json`, `csv`, `vega`, and a synthetic example `synth` for testing.\n\n### Confusion Data Format Examples\n\n#### Example 1: Conventional Confusions\n\nThe confusions for data with `actual` labels of `fruit:lemon` that are incorrectly predicted as `fruit:apple`, of which there are `count` 1 of them.\n\n```json\n{\n    \"actual\": [\"fruit:lemon\"],\n    \"observed\": [\"fruit:apple\"],\n    \"count\": 1\n}\n```\n\n#### Example 2: Hierarchical Confusions\n\nThe confusions for hierarchical data with `actual` labels of `fruit:citrus:lemon` that are incorrectly predicted as `fruit:pome:apple`, of which there are `count` 2 of them. Note `:` denotes hierarchies.\n\n```json\n{\n    \"actual\": [\"fruit:citrus:lemon\"],\n    \"observed\": [\"fruit:pome:apple\"],\n    \"count\": 2\n}\n```\n\n#### Example 3: Multi-output Confusions\n\nThe confusions for multi-output data with `actual` labels of `fruit:lemon,taste:sweet` that are incorrectly predicted as `fruit:apple,taste:sour`, of which there are `count` 3 of them. Note `,` denotes multi-ouput labels.\n\n```json\n{\n    \"actual\": [\"fruit:lemon\", \"taste:sweet\"],\n    \"observed\": [\"fruit:apple\", \"taste:sour\"],\n    \"count\": 3\n}\n```\n\n#### Example 4: Hierarchical and Multi-output Confusions\n\nThe confusions for hierarchical and multi-output data with `actual` labels of `fruit:citrus:lemon,taste:sweet,ripeness:ripe` that are incorrectly predicted as `fruit:pome:apple,taste:sour,ripeness:not-ripe`, of which there are `count` 4 of them.\n\n```json\n{\n    \"actual\": [\n        \"fruit:citrus:lemon\",\n        \"taste:sweet\",\n        \"ripeness:ripe\"\n    ],\n    \"observed\": [\n        \"fruit:pome:apple\",\n        \"taste:sour\"\n        \"ripeness:not-ripe\"\n    ],\n    \"count\": 4\n}\n```\n\nSee [`fruit.json`](public/data/fruit.json) for a complete example of confusions for a hierarchical fruit, taste, and ripeness classification model.\n\n## Development\n\nBuild:\n\n```sh\nyarn install\nyarn build\n```\n\nTest:\n\n```sh\nyarn test:unit\n```\n\nDev Server:\n\n```sh\nyarn dev\n```\n\nLint & Fix:\n\n```sh\nyarn lint\n```\n\n## Contributing\n\nWhen making contributions, refer to the [`CONTRIBUTING`](CONTRIBUTING.md) guidelines and read the [`CODE OF CONDUCT`](CODE_OF_CONDUCT.md).\n\n## BibTeX\n\nTo cite our paper, please use:\n\n```bibtex\n@inproceedings{goertler2022neo,\n  title={Neo: Generalizing Confusion Matrix Visualization to Hierarchical and Multi-Output Labels},\n  author={Görtler, Jochen and Hohman, Fred and Moritz, Dominik and Wongsuphasawat, Kanit and Ren, Donghao and Nair, Rahul and Kirchner, Marc and Patel, Kayur},\n  booktitle={Proceedings of the SIGCHI Conference on Human Factors in Computing Systems},\n  year={2022},\n  organization={ACM},\n  doi={10.1145/3491102.3501823}\n}\n```\n\n## License\n\nThis code is released under the [`LICENSE`](LICENSE) terms.\n","readmeFilename":"README.md"}