User:Sj/internal/Big books
Appearance
Graphs are unavailable due to technical issues. Updates on reimplementing the Graph extension, which will be known as the Chart extension, can be found on Phabricator and on MediaWiki.org. |
<graph>
{
"version": 2, "width": 800, "height": 400,
"data": [
{
// Each Data value has the following attributes:
// date_sold, price_adj, year_published, period (binned p1, p2, p3, p4, p5), author (author name),
// author (binned Da Vinci, Audubon, unknown, other), title, ratio (approximate image ratio), img
"name": "table",
"format": {"type": "json", "parse": {"date_sold": "date"} },
"values": [
{"date_sold": "November 1, 1994", "price_adj": 63.3, "year_published": 1510, "period": "p2", "author": "Leonardo Da Vinci", "author": "Da Vinci", "title": "Leicester Codex", "ratio": {"x": 1.5, "y": 1}, "img": "wikirawupload://upload.wikimedia.org/wikipedia/commons/thumb/6/60/Vinci_-_Hammer_2A.jpg/190px-Vinci_-_Hammer_2A.jpg"},
{"date_sold": "December 1, 2007", "price_adj": 31.3, "year_published": 1297, "period": "p1", "author": "King John", "author": "King John", "title": "Magna Carta", "ratio": {"x": 0, "y": 0} },
{"date_sold": "April 1, 2012", "price_adj": 19, "year_published": 650, "period": "p1", "author": "Unknown", "author": "unknown", "title": "St. Cuthbert Gospel", "ratio": {"x": 1, "y": 1.5}, "img": "wikirawupload://upload.wikimedia.org/wikipedia/commons/thumb/5/57/St_Cuthbert_Gospel_-_f.1.jpg/190px-St_Cuthbert_Gospel_-_f.1.jpg"},
{"date_sold": "November 1, 2013", "price_adj": 18.6, "year_published": 1640, "period": "p3", "author": "Unknown", "author": "unknown", "title": "Bay Psalm Book", "ratio": {"x": 1, "y": 1.5}, "img": "wikirawupload://upload.wikimedia.org/wikipedia/commons/thumb/f/fc/Bay_Psalm_Book_LoC.png/190px-Bay_Psalm_Book_LoC.png"},
{"date_sold": "July 1, 1999", "price_adj": 24.5, "year_published": 1510, "period": "p2", "author": "Unknown", "author": "unknown", "title": "Rothschild Prayerbook", "ratio": {"x": 1.5, "y": 1}, "img": "wikirawupload://upload.wikimedia.org/wikipedia/commons/thumb/0/03/Rothschild2.jpg/190px-Rothschild2.jpg"},
{"date_sold": "December 1, 1983", "price_adj": 35.8, "year_published": 1175, "period": "p1", "author": "Order of Saint Benedict", "author": "other", "title": "Gospels of Henry the Lion", "ratio": {"x": 1, "y": 1.5}, "img": "wikirawupload://upload.wikimedia.org/wikipedia/commons/thumb/f/f8/Evangeliar_heinrich_des_loewen.jpg/190px-Evangeliar_heinrich_des_loewen.jpg"},
{"date_sold": "December 1, 2010", "price_adj": 16.1, "year_published": 1830, "period": "p4", "author": "John James Audubon", "author": "Audubon", "title": "The Birds of America", "ratio": {"x": 1, "y": 1.5}, "img": "wikirawupload://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Audubon-Flamingo.jpg/190px-Audubon-Flamingo.jpg"},
{"date_sold": "January 1, 2000", "price_adj": 15.6, "year_published": 1830, "period": "p4", "author": "John James Audubon", "author": "Audubon", "title": "The Birds of America", "ratio": {"x": 1, "y": 1.5}, "img": "wikirawupload://upload.wikimedia.org/wikipedia/commons/thumb/3/39/Campephilus_principalisAWP066AA2.jpg/190px-Campephilus_principalisAWP066AA2.jpg"},
{"date_sold": "January 1, 2012", "price_adj": 10.5, "year_published": 1830, "period": "p4", "author": "John James Audubon", "author": "Audubon", "title": "The Birds of America", "ratio": {"x": 1, "y": 1.5}, "img": "wikirawupload://upload.wikimedia.org/wikipedia/commons/thumb/5/50/Zenaida_macrouraAWP17AA.jpg/190px-Zenaida_macrouraAWP17AA.jpg"},
{"date_sold": "January 1, 1998", "price_adj": 14, "year_published": 1478, "period": "p2", "author": "Geoffrey Chaucer", "author": "Geoffrey Chaucer", "title": "The Canterbury Tales", "ratio": {"x": 0, "y": 0} },
{"date_sold": "January 1, 2001", "price_adj": 10.5, "year_published": 1623, "period": "p3", "author": "William Shakespeare", "author": "William Shakespeare", "title": "Shakespeare's First Folio", "ratio": {"x": 1, "y": 1.5}, "img": "wikirawupload://upload.wikimedia.org/wikipedia/commons/thumb/8/8c/Title_page_William_Shakespeare%27s_First_Folio_1623.jpg/190px-Title_page_William_Shakespeare%27s_First_Folio_1623.jpg"},
{"date_sold": "January 1, 1985", "price_adj": 14.2, "year_published": 1802, "period": "p4", "author": "Pierre-Joseph Redouté", "author": "Pierre-Joseph Redouté", "title": "Les Liliacées", "ratio": {"x": 0, "y": 0} },
{"date_sold": "January 1, 1987", "price_adj": 13.1, "year_published": 1450, "period": "p2", "author": "Other", "author": "other", "title": "Gutenberg Bible", "ratio": {"x": 1, "y": 1.5}, "img": "wikirawupload://upload.wikimedia.org/wikipedia/commons/thumb/2/27/Gutenberg_bible_Old_Testament_Epistle_of_St_Jerome.jpg/190px-Gutenberg_bible_Old_Testament_Epistle_of_St_Jerome.jpg"},
{"date_sold": "January 1, 2006", "price_adj": 6.8, "year_published": 1768, "period": "p3", "author": "Henri-Louis Duhamel du Monceau", "author": "Henri-Louis Duhamel du Monceau", "title": "Traité des Arbres Fruitiers", "ratio": {"x": 1, "y": 1.5}, "img": "wikirawupload://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Pomme_rambour.jpg/190px-Pomme_rambour.jpg"},
{"date_sold": "December 1, 2010", "price_adj": 6, "year_published": 1892, "period": "p4", "author": "James Naismith", "author": "James Naismith", "title": "Rules of basketball", "ratio": {"x": 0, "y": 0} },
{"date_sold": "December 1, 2007", "price_adj": 5.7, "year_published": 2006, "period": "p5", "author": "J. K. Rowling", "author": "J. K. Rowling", "title": "The Tales of Beedle the Bard", "ratio": {"x": 1, "y": 1.5}, "img": "wikirawupload://upload.wikimedia.org/wikipedia/en/thumb/2/25/The_Tales_of_Beedle_the_Bard.jpg/190px-The_Tales_of_Beedle_the_Bard.jpg"},
{"date_sold": "October 1, 2006", "price_adj": 5.3, "year_published": 1477, "period": "p2", "author": "Ptolemy", "Ptolemy": "other", "title": "Geographia Cosmographia", "ratio": {"x": 0, "y": 0} },
{"date_sold": "August 1, 2014", "price_adj": 4.1, "year_published": 1477, "period": "p2", "author": "Jerry Siegel", "author": "Jerry Siegel, Joe Shuster", "title": "Action Comics 1", "ratio": {"x": 0, "y": 0} },
{"date_sold": "April 1, 1999", "price_adj": 4.6, "year_published": 1794, "period": "p3", "author": "William Blake", "author": "William Blake", "title": "The First Book of Urizen", "ratio": {"x": 0, "y": 0} },
{"date_sold": "January 1, 2005", "price_adj": 3.7, "year_published": 1650, "period": "p3", "author": "Unknown", "author": "unknown", "title": "Doria Atlas", "ratio": {"x": 0, "y": 0} },
{"date_sold": "January 1, 1987", "price_adj": 5.9, "year_published": 1465, "period": "p2", "author": "Unknown", "author": "unknown", "title": "Biblia pauperum", "ratio": {"x": 1, "y": 1.5}, "img": "wikirawupload://upload.wikimedia.org/wikipedia/commons/thumb/4/41/BibliaPauperum.jpg/190px-BibliaPauperum.jpg"},
{"date_sold": "January 1, 1991", "price_adj": 4.9, "year_published": 1776, "period": "p3", "author": "Other", "author": "other", "title": "United States Declaration of Independence", "ratio": {"x": 1, "y": 1.5}, "img": "wikirawupload://upload.wikimedia.org/wikipedia/commons/thumb/8/8f/United_States_Declaration_of_Independence.jpg/190px-United_States_Declaration_of_Independence.jpg"},
{"date_sold": "January 1, 1998", "price_adj": 3.6, "year_published": 1543, "period": "p2", "author": "Nicolaus Copernicus", "author": "Nicolaus Copernicus", "title": "De revolutionibus orbium coelestium", "ratio": {"x": 1, "y": 1.5}, "img": "wikirawupload://upload.wikimedia.org/wikipedia/commons/thumb/6/6d/Nicolai_Copernici_torinensis_De_revolutionibus_orbium_coelestium.djvu/page1-190px-Nicolai_Copernici_torinensis_De_revolutionibus_orbium_coelestium.djvu.jpg"},
{"date_sold": "January 1, 1998", "price_adj": 3.4, "year_published": 1850, "period": "p4", "author": "John Gould", "author": "John Gould", "title": "Complete Folio of Birds", "ratio": {"x": 0, "y": 0} },
{"date_sold": "January 1, 1989", "price_adj": 3.7, "year_published": 1610, "period": "p3", "author": "Miguel de Cervantes", "author": "Miguel de Cervantes", "title": "Don Quixote", "ratio": {"x": 1, "y": 1.5}, "img": "wikirawupload://upload.wikimedia.org/wikipedia/commons/thumb/6/69/Cervantes_Don_Quixote_1605.gif/190px-Cervantes_Don_Quixote_1605.gif"},
{"date_sold": "January 1, 1998", "price_adj": 2.8, "year_published": 1543, "period": "p2", "author": "Andreas Vesalius", "author": "Andreas Vesalius", "title": "De humani corporis fabrica", "ratio": {"x": 1, "y": 1.5}, "img": "wikirawupload://upload.wikimedia.org/wikipedia/commons/thumb/e/ee/Vesalius_Fabrica_fronticepiece.jpg/190px-Vesalius_Fabrica_fronticepiece.jpg"},
{"date_sold": "January 1, 1998", "price_adj": 2.6, "year_published": 1865, "period": "p4", "author": "Lewis Carroll", "author": "Lewis Carroll", "title": "Alice's Adventures in Wonderland", "ratio": {"x": 1, "y": 1.5}, "img": "wikirawupload://upload.wikimedia.org/wikipedia/commons/thumb/a/af/AlicesAdventuresInWonderlandTitlePage.jpg/190px-AlicesAdventuresInWonderlandTitlePage.jpg"},
{"date_sold": "January 1, 1990", "price_adj": 3, "year_published": 1788, "period": "p3", "author": "Alexander Hamilton, John Jay, James Madison", "author": "other", "title": "The Federalist", "ratio": {"x": 1, "y": 1.5}, "img": "wikirawupload://upload.wikimedia.org/wikipedia/commons/thumb/c/c7/The_Federalist_%281st_ed%2C_1788%2C_vol_I%2C_title_page%29_-_02.jpg/190px-The_Federalist_%281st_ed%2C_1788%2C_vol_I%2C_title_page%29_-_02.jpg"}
]
},
{
"name": "date_min_max",
"format": {"type": "json", "parse": {"min_max": "date"} },
"values": [
{"min_max": "1980"},
{"min_max": "2015"}
]
},
{
// Specify the names (corresponding to author in table) that should appear in the author legend.
"name": "popular_authors",
"values": [
{"name": "Da Vinci"}, {"name": "Audubon"}, {"name": "unknown"}, {"name": "other"}
]
},
{
// Filter the reference point from the dataset
// This point is not included in the wikipedia table, but corresponds to data from the 'Background' section
"name": "old_record",
"source": "table",
"transform": [{
"type": "filter",
"test": "datum.title == 'Gospels of Henry the Lion'"
}]
},
{
// Specify the values corresponding to the period attribute in the table.
"name": "periods",
"values": ["p1", "p2", "p3", "p4", "p5"]
},
{
// Helper dataset for drawing images. Filtering this dataset based on the availability of an image ensures
// that the image is drawn correctly and does not throw a 404 error. See transforms of this dataset for
// more information on how it is used.
"name": "drawImage",
"values": [0]
}
],
"signals": [
{
// Tooltip signal: extract the data for the hovered point and provide an empty value.
"name": "tooltip",
"init": {"title": "Sale Dates of Most Expensive Books", "ratio": {"x": 0, "y":0} },
"streams": [
{"type": "@points:mouseover", "expr": "datum"},
{"type": "@points:mouseout", "expr": "{title: 'Sale Dates of Most Expensive Books', ratio:{x: 0, y:0} }"}
]
},
{
// Define the selected author (background select for none, point or legend for author)
"name": "author",
"init": "",
"streams": [
{"type": "click", "expr": "''"},
{"type": "symbol:click", "expr": "datum.author"},
{"type": "@author_legend:click", "expr": "datum.name"}
]
},
{
// Define the selected period (background select for none or legend data)
"name": "period",
"init": "",
"streams": [
{"type": "click", "expr": "''"},
{"type": "@period_legend_text:click", "expr": "datum.data"}
]
},
{
// Scale the tooltip image ratio to the desired size
"name": "image_size",
"init": {"width":0, "height":0},
"streams": [
{"type": "tooltip", "expr": "{width:tooltip.ratio.x * 100, height:tooltip.ratio.y * 100}"}
]
},
{
// Determine the x position of the tooltip
"name": "xPosition",
"init": {},
"streams": [
{"type": "tooltip", "expr": "tooltip.date_sold", "scale": {"name": "scale_date"} }
]
},
{
// Determine the y position of the tooltip
"name": "yPosition",
"init": {},
"streams": [
{"type": "tooltip", "expr": "tooltip.price_adj", "scale": {"name": "scale_price"} }
]
}
],
"predicates": [
{
"name": "no_image",
"type": "==",
"operands": [{"arg": "img"}, {"value": null}]
},
{
// True if the tooltip point corresponds to the (annotated) reference point
"name": "record",
"type": "==",
"operands": [{"signal": "tooltip.title"}, {"value": "Gospels of Henry the Lion"}]
},
{
// True if the input point corresponds to the selected author.
"name": "author_selected",
"type": "==",
"operands": [{"signal": "author"}, {"arg": "author_name"}]
},
{
// True if there is no author selected.
"name": "no_author_selected",
"type": "==",
"operands": [{"signal": "author"}, {"value": ""}]
},
{
// True if no author is selected or if the input point corresponds to the selected author.
"name": "author_visible",
"type": "or",
"arg": "author_name",
"operands": [{"predicate": "no_author_selected"}, {"predicate": "author_selected", "author_name": "author_name"}]
},
{
// True if the input point corresponds to the selected period.
"name": "period_selected",
"type": "==",
"operands": [{"signal": "period"}, {"arg": "period_name"}]
},
{
// True if there is no period selected.
"name": "no_period_selected",
"type": "==",
"operands": [{"signal": "period"}, {"value": ""}]
},
{
// True if no period is selected or if the input point corresponds to the selected period.
"name": "period_visible",
"type": "or",
"arg": "period_name",
"operands": [{"predicate": "no_period_selected"}, {"predicate": "period_selected", "period_name": "period_name"}]
},
{
// True if nothing is currently selected.
"name": "none_selected",
"type": "and",
"operands": [{"predicate": "no_period_selected"}, {"predicate": "no_author_selected"}]
},
{
// True if the xPosition of the tooltip is in the left half of the scatterplot.
"name": "left_offset",
"type": "<",
"operands": [{"signal": "xPosition"}, {"value": 550}]
},
{
// True if the yPosition of the tooltip is in the bottom section of the scatterplot.
"name": "bottom_offset",
"type": ">",
"operands": [{"signal": "yPosition"}, {"value": 150}]
}
],
"scales": [
{
"name": "scale_date",
"type": "time",
"domain": {"data": "date_min_max", "field": "min_max"},
"range": "width",
"nice": "year"
},
{
"name": "scale_price",
"type": "linear",
"domain": {"data": "table", "field": "price_adj"},
"range": "height",
"nice": true
},
{
"name": "scale_period_colour",
"type": "ordinal",
"domain": {"data": "periods", "field": "data"},
"range": ["#bbaadd", "#ffaa33", "#dd7722", "#cc3366", "#ee1188"]
},
{
"name": "scale_period_text",
"type": "ordinal",
"domain": {"data": "periods", "field": "data"},
"range": ["before 1450", "1450–1600", "1600–1800", "1800-1950", "since 1950"]
},
{
// Scale to position the labels for the period legend.
"name": "scale_period_position",
"type": "ordinal",
"domain": {"data": "periods", "field": "data"},
"range": [15, 75]
},
{
// Scale to position the labels for the author legend.
"name": "scale_author_position",
"type": "ordinal",
"domain": {"data": "popular_authors", "field": "name"},
"range": [15, 75]
}
],
"axes": [
{
"type": "x",
"scale": "scale_date",
"title": "Date of sale",
"tickSizeEnd": 0,
"subdivide": 4
},
{
"type": "y",
"scale": "scale_price",
"title": "Adjusted price (in $ millions)",
"subdivide": 4,
"grid": true,
"layer": "back",
}
],
"marks": [
{
// The 'symbol' mark specifies the points visible in the scatterplot.
"name": "points",
"type": "symbol",
"from": {
"data": "table",
"transform": [{"type": "sort", "by": "-year_published"}]
},
"properties": {
"enter": {
"x": {"scale": "scale_date", "field": "date_sold"},
"y": {"scale": "scale_price", "field": "price_adj"},
"fill": {"scale": "scale_period_colour", "field": "period"},
"size": {"value": 150},
"shape": {
"rule": [
{"predicate": {"name": "no_image", "img": {"field": "img"} }, "value": "square"},
{"value": "circle"}
]
}
},
"update": {
"opacity": {
// If the data point corresponds to the selected author, selected period, or if nothing is selected,
// it should be completely visible. Otherwise, it should become transparent.
"rule": [
{"predicate": {"name": "author_selected", "author_name": {"field": "author"} }, "value": 1},
{"predicate": {"name": "period_selected", "period_name": {"field": "period"} }, "value": 1},
{"predicate": {"name": "none_selected"}, "value": 1},
{"value": 0.25}
]
},
"stroke": {"value": "white"},
"strokeWidth": {"value": 1}
},
"hover": {
"stroke": {"value": "black"},
"strokeWidth": {"value": 2}
}
}
},
{
// The tooltip consists of two lines of text 'No image available'
"name": "tooltip",
"from": {
// Only draw the tooltip when there is no image available (and mousing over a point).
// If there is an image associated with the tooltip point or the default title is set,
// the filter will remove all data points and this group will not be drawn.
"data": "drawImage",
"transform": [{"type": "filter", "test": "tooltip.img == null && tooltip.title != 'Sale Dates of Most Expensive Books'"}]
},
"type": "group",
"properties": {
// Specify properties of the entire tooltip (background, fill, position, etc.)
"update": {
"width": {"value": 115},
"height": {"value": 33},
"opacity": {"value": 0.75},
"fill": {
"rule": [
{"predicate": {"name": "record"}, "value": "white"},
{"value": "black"}
]
},
"x": {
"rule": [
// Specify the xPosition of the text tooltip based on the point position to prevent the tooltip from
// being drawn outside the visible region (e.g. draw it to the left if the point is near the right edge).
{"predicate": {"name": "left_offset"}, "scale": "scale_date", "signal": "tooltip.date_sold", "offset": 7},
{"scale": "scale_date", "signal": "tooltip.date_sold", "offset": -122}
]
},
"y": {
"rule": [
// Specify the yPosition of the text tooltip based on the point position to prevent the tooltip from
// being drawn outside the visible region (e.g. draw it below the point if the point is near the top).
{"predicate": {"name": "bottom_offset"}, "scale": "scale_price", "signal": "tooltip.price_adj", "offset": -40},
{"scale": "scale_price", "signal": "tooltip.price_adj", "offset": -60}
]
}
}
},
"marks": [
{
// Text: 'No image available'
"type": "text",
"properties": {
"enter": {
"align": {"value": "left"},
"baseline": {"value": "top"},
"text": {"value": "No image available"},
"fill": {"value": "white"},
"x": {"value": 9},
"y": {"value": 3},
"opacity": {"value": 1}
}
}
}
]
},
{
// Draw a white background behind the title and legend to hide the gridlines.
"name": "title_background",
"type": "rect",
"properties": {
"enter": {
"fill": {"value": "white"},
"x": {"value": 2},
"x2": {"value": 285},
"y": {"value": 2},
"y2": {"value": 125}
}
}
},
{
// Update the book title when a point has been moused over.
"name": "book_title",
"type": "text",
"properties": {
"enter": {
"align": {"value": "left"},
"fill": {"value": "black"},
"fontSize": {"value": 18},
"fontStyle": {"value": "bold"},
"text": {"signal": "tooltip.title"}
},
"update": {
"x": {"value": 20},
"y": {"value": 20},
"text": {"signal": "tooltip.title"}
}
}
},
{
// Update the book author when a point has been moused over.
"name": "book_author",
"type": "text",
"properties": {
"enter": {
"align": {"value": "left"},
"fill": {"value": "gray"},
"fontSize": {"value": 14},
"x": {"value": 20},
"y": {"value": 40},
"fontStyle": {"value": "italic"}
},
"update": {
"text": {"signal": "tooltip.author"}
}
}
},
{
// Manually create the author legend to support interaction.
// Selecting text in the legend updates the opacity of the points.
"type": "group",
"properties": {
"enter": {
"x": {"value": 125},
"y": {"value": 55}
}
},
"marks": [
{
// Add a text mark for each author specified in "popular_authors"
"name": "author_legend",
"type": "text",
"from": {"data": "popular_authors"},
"properties": {
"enter": {
"align": {"value": "left"},
"fill": {"value": "black"},
"x": {"value": 0},
"y": {"scale": "scale_author_position", "field": "name"},
"fontSize": {"value": 12},
"text": {"field": "name"}
},
"update": {
"opacity": {
"rule": [
{"predicate": {"name": "author_selected","author_name": {"field": "name"} }, "value": 1},
{"predicate": {"name": "none_selected"}, "value": 1},
{"value": 0.15}
]
}
}
}
},
{
// Add a text mark for the legend title.
"type": "text",
"properties": {
"enter": {
"align": {"value": "left"},
"fill": {"value": "black"},
"x": {"value": 0},
"y": {"value": 0},
"fontSize": {"value": 12},
"fontStyle": {"value": "bold"},
"text": {"value": "Most Represented Authors"}
}
}
}
]
},
{
// Manually create the period legend to support interaction.
// Selecting text in the legend updates the opacity of the points.
"name": "period_legend",
"type": "group",
"properties": {
"enter": {
"x": {"value": 20},
"y": {"value": 55}
}
},
"marks": [
{
// Add a text mark for each period specified in "periods"
"name": "period_legend_text",
"type": "text",
"from": {"data": "periods"},
"properties": {
"enter": {
"align": {"value": "left"},
"fill": {"value": "black"},
"x": {"value": 15},
"y": {"scale": "scale_period_position", "field": "data"},
"fontSize": {"value": 12},
"text": {"scale": "scale_period_text", "field": "data"}
},
"update": {
"opacity": {
"rule": [
{
"predicate": {
"name": "period_selected",
"period_name": {"field": "data"}
},
"value": 1
},
{
"predicate": {
"name": "none_selected"
},
"value": 1
},
{"value": 0.15}
]
}
}
}
},
{
// Add a text mark for the legend title.
"type": "text",
"properties": {
"enter": {
"align": {"value": "left"},
"fill": {"value": "black"},
"x": {"value": 0},
"y": {"value": 0},
"fontSize": {"value": 12},
"fontStyle": {"value": "bold"},
"text": {"value": "Periods"}
}
}
},
{
// Add a filled circle for each text mark in the legend to specify the point color.
"name": "period_legend_symbol",
"type": "symbol",
"from": {"data": "periods"},
"properties": {
"enter": {
"size": {"value": 75},
"fill": {"scale": "scale_period_colour", "field": "data"},
"x": {"value": 5},
"y": {"scale": "scale_period_position", "field": "data", "offset": -5},
}
}
}
]
},
{
// Add a text mark for the annotation of the reference point.
"name": "record_annotation",
"type": "text",
"from": {"data": "old_record"},
"properties": {
"enter": {
"align": {"value": "left"},
"fill": {"value": "grey"},
"x": {"scale": "scale_date", "field": "date_sold", "offset": 9},
"y": {"scale": "scale_price", "field": "price_adj", "offset": 3},
"fontSize": {"value": 10},
"fontStyle": {"value": "italic"},
"text": {"value": "Record sale price prior to first listed book."}
},
"update": {
"opacity": {
"rule": [
// Update the opacity of the text based on whether or not the author, period, or nothing is selected.
{"predicate": {"name": "author_selected","author_name": {"field": "author"} }, "value": 1},
{"predicate": {"name": "period_selected","period_name": {"field": "period"} }, "value": 1},
{"predicate": {"name": "none_selected" }, "value": 1},
{"value": 0.25}
]
}
}
}
},
{
// The book image tooltip.
"type": "image",
"from": {
// Only draw the tooltip image when there is an image available.
// If there is an image associated with the tooltip point the filter will keep the only element and
// draw the image. Otherwise the value will be removed and nothing will not be drawn.
"data": "drawImage",
"transform": [{"type": "filter", "test": "tooltip.img != null"}]
},
"properties": {
"update": {
"url": {"signal": "tooltip.img"},
"width": {"signal": "image_size.width"},
"height": {"signal": "image_size.height"},
// Align, baseline, x, and y all use the offset predicates to account for the position to update
// the image location so that the image is not drawn out of the visible range of the scatterplot.
"align": {
"rule": [
// Specify the alignment based on the x position.
// If the point is in the right half of the scatterplot, draw it to the left.
{"predicate": {"name": "left_offset"}, "value": "left"},
{"value": "right"}
]
},
"baseline": {
"rule": [
// Specify the baseline based on the y position.
// If the point is near the bottom, display the image above the point.
{"predicate": {"name": "bottom_offset"}, "value": "bottom"},
{"value": "top"}
]
},
"x": {
"rule": [
// Update the offset of the x position based on whether or not
// the point is displayed to the left or right.
{"predicate": {"name": "left_offset"}, "scale": "scale_date", "signal": "tooltip.date_sold", "offset": 7},
{"scale": "scale_date", "signal": "tooltip.date_sold", "offset": -7}
]
},
"y": {
"rule": [
// Update the offset of the y position based on whether or not
// the point is displayed to the bottom or top.
{"predicate": {"name": "bottom_offset"}, "scale": "scale_price", "signal": "tooltip.price_adj", "offset": -7},
{"scale": "scale_price", "signal": "tooltip.price_adj", "offset": 7}
]
}
}
}
}
]
}
</graph>