In [ ]:
import pandas as pd
import lux

# Collecting basic usage statistics for Lux (For more information, see: https://tinyurl.com/logging-consent)
lux.logger = True # Remove this line if you do not want your interactions recorded

url = 'https://github.com/lux-org/lux-datasets/blob/master/data/olympic.csv?raw=true'
df = pd.read_csv(url)
df["Year"] = pd.to_datetime(df["Year"], format='%Y') # change pandas dtype for the column "Year" to datetype

In the earlier tutorials, we have seen how Lux recommends visualizations automatically to the user. Often, the user might have a particular visualizations in mind that they want to specify. In this case, users can quickly define their own visualizations using Lux and visualize their data on-demand.

In this tutorial, we will introduce how to create a visualization via the Vis object and a collection of visualization via the VisList object.

Creating Desired Visualizations On-Demand using Vis

A Vis object represents an individual visualization displayed in Lux, which can either be automatically generated or defined by the user.

To generate a Vis, users should specify their intent and a source dataframe as inputs. The intent is expressed using the same intent specification language described in the last tutorial.

For example, here we indicate our intent for visualizing the Weight attribute on the dataframe df.

In [ ]:
from lux.vis.Vis import Vis
intent = ["Weight"]
vis = Vis(intent,df)
vis

We can very easily replace the Vis's source data without changing the Vis definition, which is useful for comparing differences across different datasets with the same schema.

For example, we might be interested in the same Weight distribution, but plotted only on the subset of data with female athletes.

In [ ]:
vis.refresh_source(df[df["Sex"]=='F'])
vis

Likewise, we can modify the intent of the query, in this case, to increase the bin size of the histogram and to indicate the filtered source:

In [ ]:
new_intent = [lux.Clause("Weight",bin_size=50),"Sex=F"]
vis.set_intent(new_intent)
vis

Vis objects are powerful programmatic representations of visualizations that can be exported into visualization code (more in the next tutorial) or be composed into a VisList collection.

Working with Collections of Visualization with VisList

VisList objects represent collections of visualizations in Lux.

There are two ways to specify lists of visualization in Lux: 1) by specifying intent or 2) by manually composing Vis object into a list.

Approach #1: Specifying VisList using intent syntax

First, we look at an example of a VisList created through a user intent. Here, we create a vis collection of Weight with respect to all other attributes, using the wildcard "?" symbol.

In [ ]:
from lux.vis.VisList import VisList
vc = VisList(["Weight","?"],df)
vc

Alternatively, we can specify desired attributes via a list with respect to Weight:

In [ ]:
vc = VisList(["Weight",['Sport','Year','Height','HostRegion','SportType']],df)
vc

Approach #2: Specifying VisList by constructing Vis objects

VisList can be manually constructed by individually specifying the content of each Vis, then finally putting the entire list into a VisList object.

Here is the equivalent VisList example constructed using this approach:

In [ ]:
from lux.vis.VisList import VisList

vcLst = []
for attribute in ['Sport','Year','Height','HostRegion','SportType']: 
    vis = Vis([lux.Clause("Weight"), lux.Clause(attribute)])
    vcLst.append(vis)
vc = VisList(vcLst,df)

vc