Draco is a formal framework for representing design knowledge about effective visualization design as a collection of constraints. You can use Draco to find effective visualization visual designs in Vega-Lite. Draco's constraints are implemented in based on Answer Set Programming (ASP) and solved with the Clingo constraint solver. We also implemented a way to learn weights for the recommendation system directly from the results of graphical perception experiment.
Read our introductory blog post about Draco and our research paper for more details. Try Draco in the browser at https://uwdata.github.io/draco-editor.
There Be Dragons! This project is in active development and we are working hard on cleaning up the repository and making it easier to use the recommendation model in Draco. If you want to use this right now, please talk to us. More documentation is forthcoming.
This repository currently contains:
- The ASP programs with soft and hard constraints.
- A Python and Typescript API that
- translates from Compassql and Vega-Lite to ASP:
cql2asp
,vl2asp
- translates the output from the Clingo ASP solver to Vega-Lite:
asp2vl
- translates a dataset to schema and ASP declaration:
data2schema
,schema2asp
. - translates constraints (hard or soft) from asp to json:
constraints2json
.
- translates from Compassql and Vega-Lite to ASP:
Various functionality and extensions are in the following repositories
-
- A TypeScript/JavaScript version of Draco for use in web applications.
-
- Runs a learning-to-rank method on results of perception experiments.
-
- UI tools to create annotated datasets of pairs of visualizations, look at the recommendations, and to explore large datasets of example visualizations.
-
- Notebooks to analyze the results.
You can install Clingo with conda: conda install -c potassco clingo
. On MacOS, you can alternatively run brew install clingo
.
yarn
or npm install
You might need to activate a Python 2.7 environment to compile the canvas module.
yarn build
pip install -r requirements.txt
or conda install --file requirements.txt
Install Draco in editable mode. We expect Python 3.
pip install -e .
Now you can call the command line tool draco
. For example draco --version
or draco --help
.
You should also be able to run the tests (and coverage report)
python setup.py test
ansunit asp/tests.yaml
pytest -v
mypy draco tests --ignore-missing-imports
To run Draco on a partial spec.
sh run_pipeline.sh spec
The output would be a .vl.json file (for Vega-Lite spec) and a .png file to preview the visualization (by default, outputs would be in folder __tmp__
).
Run yarn build_cql_examples
.
You can use the helper file asp/_all.lp
.
clingo asp/_all.lp test.lp
Alternatively, you can invoke Draco with draco -m asp test.lp
.
clingo asp/_apt.lp examples/example_apt.lp --opt-mode=optN --quiet=1 --project -c max_extra_encs=0
This only prints the relevant data and restricts the extra encodings that are being generated.
- Make sure everything works!
- Update
__version__
indraco/__init__.py
and use the right version below. git commit -m "bump version to 0.0.1"
- Tag the last commit
git tag -a v0.0.1
. git push
andgit push --tags
- Run
python setup.py sdist upload
.
Previous prototypes
Related software