mirror of
https://github.com/aykhans/AzSuicideDataVisualization.git
synced 2025-04-22 10:28:02 +00:00
177 lines
5.4 KiB
Python
177 lines
5.4 KiB
Python
import json
|
|
import pytest
|
|
|
|
try:
|
|
from IPython import InteractiveShell
|
|
|
|
IPYTHON_AVAILABLE = True
|
|
except ImportError:
|
|
IPYTHON_AVAILABLE = False
|
|
pass
|
|
|
|
from altair.vegalite.v4 import VegaLite
|
|
from altair.vega.v5 import Vega
|
|
|
|
|
|
DATA_RECORDS = [
|
|
{"amount": 28, "category": "A"},
|
|
{"amount": 55, "category": "B"},
|
|
{"amount": 43, "category": "C"},
|
|
{"amount": 91, "category": "D"},
|
|
{"amount": 81, "category": "E"},
|
|
{"amount": 53, "category": "F"},
|
|
{"amount": 19, "category": "G"},
|
|
{"amount": 87, "category": "H"},
|
|
]
|
|
|
|
if IPYTHON_AVAILABLE:
|
|
_ipshell = InteractiveShell.instance()
|
|
_ipshell.run_cell("%load_ext altair")
|
|
_ipshell.run_cell(
|
|
"""
|
|
import pandas as pd
|
|
table = pd.DataFrame.from_records({})
|
|
the_data = table
|
|
""".format(
|
|
DATA_RECORDS
|
|
)
|
|
)
|
|
|
|
|
|
VEGA_SPEC = {
|
|
"$schema": "https://vega.github.io/schema/vega/v5.json",
|
|
"axes": [
|
|
{"orient": "bottom", "scale": "xscale"},
|
|
{"orient": "left", "scale": "yscale"},
|
|
],
|
|
"data": [{"name": "table", "values": DATA_RECORDS}],
|
|
"height": 200,
|
|
"marks": [
|
|
{
|
|
"encode": {
|
|
"enter": {
|
|
"width": {"band": 1, "scale": "xscale"},
|
|
"x": {"field": "category", "scale": "xscale"},
|
|
"y": {"field": "amount", "scale": "yscale"},
|
|
"y2": {"scale": "yscale", "value": 0},
|
|
},
|
|
"hover": {"fill": {"value": "red"}},
|
|
"update": {"fill": {"value": "steelblue"}},
|
|
},
|
|
"from": {"data": "table"},
|
|
"type": "rect",
|
|
},
|
|
{
|
|
"encode": {
|
|
"enter": {
|
|
"align": {"value": "center"},
|
|
"baseline": {"value": "bottom"},
|
|
"fill": {"value": "#333"},
|
|
},
|
|
"update": {
|
|
"fillOpacity": [
|
|
{"test": "datum === tooltip", "value": 0},
|
|
{"value": 1},
|
|
],
|
|
"text": {"signal": "tooltip.amount"},
|
|
"x": {"band": 0.5, "scale": "xscale", "signal": "tooltip.category"},
|
|
"y": {"offset": -2, "scale": "yscale", "signal": "tooltip.amount"},
|
|
},
|
|
},
|
|
"type": "text",
|
|
},
|
|
],
|
|
"padding": 5,
|
|
"scales": [
|
|
{
|
|
"domain": {"data": "table", "field": "category"},
|
|
"name": "xscale",
|
|
"padding": 0.05,
|
|
"range": "width",
|
|
"round": True,
|
|
"type": "band",
|
|
},
|
|
{
|
|
"domain": {"data": "table", "field": "amount"},
|
|
"name": "yscale",
|
|
"nice": True,
|
|
"range": "height",
|
|
},
|
|
],
|
|
"signals": [
|
|
{
|
|
"name": "tooltip",
|
|
"on": [
|
|
{"events": "rect:mouseover", "update": "datum"},
|
|
{"events": "rect:mouseout", "update": "{}"},
|
|
],
|
|
"value": {},
|
|
}
|
|
],
|
|
"width": 400,
|
|
}
|
|
|
|
|
|
VEGALITE_SPEC = {
|
|
"$schema": "https://vega.github.io/schema/vega-lite/v4.json",
|
|
"data": {"values": DATA_RECORDS},
|
|
"description": "A simple bar chart with embedded data.",
|
|
"encoding": {
|
|
"x": {"field": "category", "type": "ordinal"},
|
|
"y": {"field": "amount", "type": "quantitative"},
|
|
},
|
|
"mark": "bar",
|
|
}
|
|
|
|
|
|
@pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython")
|
|
def test_vegalite_magic_data_included():
|
|
result = _ipshell.run_cell("%%vegalite\n" + json.dumps(VEGALITE_SPEC))
|
|
assert isinstance(result.result, VegaLite)
|
|
assert VEGALITE_SPEC == result.result.spec
|
|
|
|
|
|
@pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython")
|
|
def test_vegalite_magic_json_flag():
|
|
result = _ipshell.run_cell("%%vegalite --json\n" + json.dumps(VEGALITE_SPEC))
|
|
assert isinstance(result.result, VegaLite)
|
|
assert VEGALITE_SPEC == result.result.spec
|
|
|
|
|
|
@pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython")
|
|
def test_vegalite_magic_pandas_data():
|
|
spec = {key: val for key, val in VEGALITE_SPEC.items() if key != "data"}
|
|
result = _ipshell.run_cell("%%vegalite table\n" + json.dumps(spec))
|
|
assert isinstance(result.result, VegaLite)
|
|
assert VEGALITE_SPEC == result.result.spec
|
|
|
|
|
|
@pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython")
|
|
def test_vega_magic_data_included():
|
|
result = _ipshell.run_cell("%%vega\n" + json.dumps(VEGA_SPEC))
|
|
assert isinstance(result.result, Vega)
|
|
assert VEGA_SPEC == result.result.spec
|
|
|
|
|
|
@pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython")
|
|
def test_vega_magic_json_flag():
|
|
result = _ipshell.run_cell("%%vega --json\n" + json.dumps(VEGA_SPEC))
|
|
assert isinstance(result.result, Vega)
|
|
assert VEGA_SPEC == result.result.spec
|
|
|
|
|
|
@pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython")
|
|
def test_vega_magic_pandas_data():
|
|
spec = {key: val for key, val in VEGA_SPEC.items() if key != "data"}
|
|
result = _ipshell.run_cell("%%vega table\n" + json.dumps(spec))
|
|
assert isinstance(result.result, Vega)
|
|
assert VEGA_SPEC == result.result.spec
|
|
|
|
|
|
@pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython")
|
|
def test_vega_magic_pandas_data_renamed():
|
|
spec = {key: val for key, val in VEGA_SPEC.items() if key != "data"}
|
|
result = _ipshell.run_cell("%%vega table:the_data\n" + json.dumps(spec))
|
|
assert isinstance(result.result, Vega)
|
|
assert VEGA_SPEC == result.result.spec
|