SlideShare ist ein Scribd-Unternehmen logo
1 von 45
Downloaden Sie, um offline zu lesen
NOVEMBER 15-18, 2016
#plotcon
1
Domain Specific Visualization
Nathan Goldbaum
Moore Data Fellow
_________
@njgoldbaum
@yt_astro
https://dxl.ncsa.illinois.edu/
Generic Plotting Libraries are Powerful
John Hunter Plotting Contest Entries: http://scipy2016.scipy.org/ehome/115969/276538/
Creative Power Implies API Complexity
4
I’m picking on matplotlib here, but the
same is true of any generic plotting library
5
● Declarative Visualization
Libraries
○ Vega-lite, ggplot, altair
● Documentation by example
○ Users create plots by
cargo-culting examples
● Provide shortcuts in high-level
API
○ “Easy mode” can’t cover all
use cases
Managing API Complexity
6
Alternate approach: make assumptions for users
APLpy
Astronomical Data
https://aplpy.github.io
Cartopy
Geographic Data
http://scitools.org.uk/cartopy/
yt: 3D Data Analysis
7
Ingest Data
Analysis/
Visualization
yt-project.org
Ramses
Gadget
Ingestion
Ingestion Representation
Ingestion Representation Analysis
Ingestion Representation Analysis Visualization
12
Ingestion Representation Analysis Visualization
Science
13
Ingestion Representation Analysis Visualization
Community
Science
Ingestion Representation Analysis Visualization
Community
Science
The ice cream sandwich of open research software
15
yt: A Community of Practice
>100 Contributors as of yt 3.3.2 (Oct 2016)
Tom Abel Bili Dong Suoqing Ji Sam Leitner John Regan Geoffrey So
Gabriel Altay Nicholas Earl Allyson Julian Yuan Li Mark Richardson Casey W. Stark
Kenza Arraki Hilary Egan Christian Karch Alex Lindsay Sherwood Richers Antoine Strugarek
Kirk Barrow Daniel Fenn Max Katz Chris Malone Thomas Robitaille Elizabeth Tasker
Ricarda Beckmann John Forbes BW Keller Jonah Miller Anna Rosen Ben Thompson
Elliott Biondo Enrico Garaldi Ji-hoon Kim Joshua Moloney Chuck Rozhon Robert Thompson
Alex Bogert Sam Geen Chang-Goo Kim Christopher Moody Douglas Rudd Joseph Tomlinson
Robert Bradshaw Austin Gilbert Steffen Klemer Stuart Mumford Hsi-Yu Schive Stephanie Tonnesen
Andre Bubel Adam Ginsburg Fabian Koller Andrew Myers Anthony Scopatz Matt Turk
Corentin Cadiou Nathan Goldbaum Kacper Kowalik Jill Naiman Noel Scudder Miguel de Val-Borro
Yi-Hao Chen William Gray Mark Krumholz Desika Narayanan Patrick Shriwise Rick Wagner
Pengfei Chen Markus Haider Michael Kuhlen Kaylea Nelson Devin Silvia Mike Warren
David Collins Eric Hallman Meagan Lang Brian O'Shea Sam Skillman Charlie Watson
Brian Crosby David Hannasch Erwin Lau J.S. Oishi Stephen Skory Andrew Wetzel
Weiguang Cui Cameron Hummels Eve Lee JC Passy Aaron Smith John Wise
Andrew Cunningham Anni Järvenpää Doris Lee Rafael Ruggiero Britton Smith Michael Zingale
“Scaling a code in the human dimension”: https://arxiv.org/abs/1301.7064
16
yt: A Community of Practice
Tom Abel Bili Dong Suoqing Ji Sam Leitner John Regan Geoffrey So
Gabriel Altay Nicholas Earl Allyson Julian Yuan Li Mark Richardson Casey W. Stark
Kenza Arraki Hilary Egan Christian Karch Alex Lindsay Sherwood Richers Antoine Strugarek
Kirk Barrow Daniel Fenn Max Katz Chris Malone Thomas Robitaille Elizabeth Tasker
Ricarda Beckmann John Forbes BW Keller Jonah Miller Anna Rosen Ben Thompson
Elliott Biondo Enrico Garaldi Ji-hoon Kim Joshua Moloney Chuck Rozhon Robert Thompson
Alex Bogert Sam Geen Chang-Goo Kim Christopher Moody Douglas Rudd Joseph Tomlinson
Robert Bradshaw Austin Gilbert Steffen Klemer Stuart Mumford Hsi-Yu Schive Stephanie Tonnesen
Andre Bubel Adam Ginsburg Fabian Koller Andrew Myers Anthony Scopatz Matt Turk
Corentin Cadiou Nathan Goldbaum Kacper Kowalik Jill Naiman Noel Scudder Miguel de Val-Borro
Yi-Hao Chen William Gray Mark Krumholz Desika Narayanan Patrick Shriwise Rick Wagner
Pengfei Chen Markus Haider Michael Kuhlen Kaylea Nelson Devin Silvia Mike Warren
David Collins Eric Hallman Meagan Lang Brian O'Shea Sam Skillman Charlie Watson
Brian Crosby David Hannasch Erwin Lau J.S. Oishi Stephen Skory Andrew Wetzel
Weiguang Cui Cameron Hummels Eve Lee JC Passy Aaron Smith John Wise
Andrew Cunningham Anni Järvenpää Doris Lee Rafael Ruggiero Britton Smith Michael Zingale
>100 Contributors as of yt 3.3.2 (Oct 2016)
“Scaling a code in the human dimension”: https://arxiv.org/abs/1301.7064
What is yt?
17
18
Data on disk has no physical meaning
19
With yt you can think about data using a
physically motivated interface
20
Allowing you to forget about what the data look
like as a file format
21
And select only the data you want to select
22
And only the data you want to select
23
It understands multiresolution data as a
first-class citizen
24
25
26
PlotWindow plotting system
27
import yt
import yt.units as u
ds = yt.load('DD0600/DD0600')
prj = yt.ProjectionPlot(
ds, 'z', 'density', width=15*u.kpc)
prj.save()
http://yt-project.org/doc/visualizing/plots.html
28
29http://paste.yt-project.org/show/6913/
import yt
import yt.units as u
ds = yt.load('DD0600/DD0600')
prj = yt.ProjectionPlot(
ds, 'z', 'density', width=15*u.kpc)
prj.save()
Short but powerful scripts
● Register namespace
● Set up unit metadata for further
use later
30
import yt
import yt.units as u
ds = yt.load('DD0600/DD0600')
prj = yt.ProjectionPlot(
ds, 'z', 'density', width=15*u.kpc)
prj.save()
Short but powerful scripts
● Automagically determine data
format
● Parse parameters
● Initialize IO and data selection
interface
31
import yt
import yt.units as u
ds = yt.load('DD0600/DD0600')
prj = yt.ProjectionPlot(
ds, 'z', 'density', width=15*u.kpc)
prj.save()
Short but powerful scripts
● Set up in-memory mesh
● Determine available fields to plot
● Chunked IO
● Mask out overlapping data
● Convert to data CGS units
● Perform projection
● Pixelize from multi-resolution
projection
● Initialize plot object
32
import yt
import yt.units as u
ds = yt.load('DD0600/DD0600')
prj = yt.ProjectionPlot(
ds, 'z', 'density', width=15*u.kpc)
prj.save()
Short but powerful scripts
● Calculate positioning and
metadata for matplotlib plot
● Create and customize matplotlib
Figure and Axes objects
● Call imshow() with appropriate
keyword arguments
● Save plot to disk
33
Generic plotting libraries can’t make assumptions
34
import matplotlib.pyplot as plt
plt.imshow(image_data)
plt.savefig('plot.png')
Customizing plots increases complexity
import matplotlib
import matplotlib.pyplot as plt
plt.imshow(image_data, norm=matplotlib.colors.LogNorm(),
origin='lower', cmap='viridis',
extent=[-7.5, 7.5, -7.5, 7.5])
cb = plt.colorbar()
cb.set_label(r'Projected Density $(rm{g}/rm{cm}^2)$')
plt.xlabel('x (kpc)')
plt.ylabel('y (kpc)')
plt.savefig('plot.png', bbox_inches='tight')
35
36
37
Ingestion Representation Analysis Visualization
Community
Science
Build new libraries for your use cases
Add new plotting tasks to libraries that already exist
Design Tips for Plotting Libraries
38
Provide sane defaults
39
import yt
ds = yt.load('DD0600/DD0600')
prj = yt.ProjectionPlot(ds, 'z', 'density')
prj.save('./frames/0000.png')
for i in range(150):
prj.zoom(1.03)
prj.save('./frames/%04d.png' % (i+1))
import yt
ds = yt.load('DD0600/DD0600')
prj = yt.ProjectionPlot(ds, 'z', 'density')
prj.set_zlim('density', 8e-6, 3e-1)
prj.save('./frames/0000.png')
for i in range(150):
prj.zoom(1.03)
prj.save('./frames/%04d.png' % (i+1))
Customize via properties/setters, not keyword arguments
40
Don’t overcomplicate for niche use cases
import yt
import yt.units as u
ds = yt.load('DD0600/DD0600')
fields = ['density', 'temperature',
'Velocity_divergence', 'grid_level']
slc = yt.SlicePlot(ds, 'z', fields)
slc.set_width(15*kpc)
slc.set_log('grid_level', False)
slc.set_unit('velocity_divergence', 'km/s/kpc')
slc.set_unit('density', 'Msun/pc**3')
slc.save()
4
1
Expose base plotting library primitives
slc = yt.SlicePlot(ds, 'z', 'density')
plot = slc.plots['density']
# matplotlib.figure.Figure
plot.figure
# matplotlib.axes.Axes
plot.axes
# matlotlib.colorbar.Colorbar
plot.cb
# matplotlib.image.AxesImage
plot.image
42http://yt-project.org/docs/dev/cookbook/simple_plots.html#matplotlib-primitives
Only perform expensive actions as needed
43
def invalidate_plot(f):
@functools.wraps(f)
def newfunc(*args, **kwargs):
rv = f(*args, **kwargs)
args[0]._plot_valid = False
return rv
return newfunc
def validate_plot(f):
@wraps(f)
def newfunc(*args, **kwargs):
if not args[0]._plot_valid:
args[0]._setup_plots()
rv = f(*args, **kwargs)
return rv
return newfunc
class SlicePlot:
def _setup_plots(self):
# make plots using matplotlib primitives
@invalidate_plot
def set_axes_unit(self, unit_name):
self._axes_unit_names = (unit_name, unit_name)
@validate_plot
def save(self):
for field in self.plots:
self.plots[field].save()
44
Thank you for your attention!
45
Questions? Concerns? Comments?

Weitere ähnliche Inhalte

Ähnlich wie PLOTCON NYC: Domain Specific Visualization

SciPy 1.0 and Beyond - a Story of Community and Code
SciPy 1.0 and Beyond - a Story of Community and CodeSciPy 1.0 and Beyond - a Story of Community and Code
SciPy 1.0 and Beyond - a Story of Community and CodeRalf Gommers
 
Science in the Open - Science Commons Pacific Northwest
Science in the Open - Science Commons Pacific NorthwestScience in the Open - Science Commons Pacific Northwest
Science in the Open - Science Commons Pacific NorthwestCameron Neylon
 
IIT 2020 - Sean DuBois Pion
IIT 2020 - Sean DuBois PionIIT 2020 - Sean DuBois Pion
IIT 2020 - Sean DuBois PionSeanDuBois3
 
An Introduction to Game Programming with Flash: An Introduction to Flash and ...
An Introduction to Game Programming with Flash: An Introduction to Flash and ...An Introduction to Game Programming with Flash: An Introduction to Flash and ...
An Introduction to Game Programming with Flash: An Introduction to Flash and ...Krzysztof Opałka
 
Deep Learning Representations for All - Xavier Giro-i-Nieto - IRI Barcelona 2020
Deep Learning Representations for All - Xavier Giro-i-Nieto - IRI Barcelona 2020Deep Learning Representations for All - Xavier Giro-i-Nieto - IRI Barcelona 2020
Deep Learning Representations for All - Xavier Giro-i-Nieto - IRI Barcelona 2020Universitat Politècnica de Catalunya
 
From Data to Visualization, what happens in between?
From Data to Visualization, what happens in between?From Data to Visualization, what happens in between?
From Data to Visualization, what happens in between?Krist Wongsuphasawat
 
Intro to data oriented design
Intro to data oriented designIntro to data oriented design
Intro to data oriented designStoyan Nikolov
 
Minecraft in 500 lines with Pyglet - PyCon UK
Minecraft in 500 lines with Pyglet - PyCon UKMinecraft in 500 lines with Pyglet - PyCon UK
Minecraft in 500 lines with Pyglet - PyCon UKRichard Donkin
 
yt: Growing and Engaging a Community of Practice
yt: Growing and Engaging a Community of Practiceyt: Growing and Engaging a Community of Practice
yt: Growing and Engaging a Community of Practicematthewturk
 
A Random Forest using a Multi-valued Decision Diagram on an FPGa
A Random Forest using a Multi-valued Decision Diagram on an FPGaA Random Forest using a Multi-valued Decision Diagram on an FPGa
A Random Forest using a Multi-valued Decision Diagram on an FPGaHiroki Nakahara
 
Agents In An Exponential World Foster
Agents In An Exponential World FosterAgents In An Exponential World Foster
Agents In An Exponential World FosterIan Foster
 
Ludo: An Ontology to Create Linked Data Driven Serious Games
Ludo: An Ontology to Create Linked Data Driven Serious GamesLudo: An Ontology to Create Linked Data Driven Serious Games
Ludo: An Ontology to Create Linked Data Driven Serious GamesOscar Rodríguez Rocha
 
JavaScript Everywhere! Creating a 100% JavaScript web stack
JavaScript Everywhere! Creating a 100% JavaScript web stackJavaScript Everywhere! Creating a 100% JavaScript web stack
JavaScript Everywhere! Creating a 100% JavaScript web stackTom Croucher
 
Closing, Course Offer 17/18 & Homework (D5 2017 UPC Deep Learning for Compute...
Closing, Course Offer 17/18 & Homework (D5 2017 UPC Deep Learning for Compute...Closing, Course Offer 17/18 & Homework (D5 2017 UPC Deep Learning for Compute...
Closing, Course Offer 17/18 & Homework (D5 2017 UPC Deep Learning for Compute...Universitat Politècnica de Catalunya
 
Monitoring Big Data Systems - "The Simple Way"
Monitoring Big Data Systems - "The Simple Way"Monitoring Big Data Systems - "The Simple Way"
Monitoring Big Data Systems - "The Simple Way"Demi Ben-Ari
 
SQL is Dead; Long Live SQL: Lightweight Query Services for Long Tail Science
SQL is Dead; Long Live SQL: Lightweight Query Services for Long Tail ScienceSQL is Dead; Long Live SQL: Lightweight Query Services for Long Tail Science
SQL is Dead; Long Live SQL: Lightweight Query Services for Long Tail ScienceUniversity of Washington
 
Introduction to three.js & Leap Motion
Introduction to three.js & Leap MotionIntroduction to three.js & Leap Motion
Introduction to three.js & Leap MotionLee Trout
 

Ähnlich wie PLOTCON NYC: Domain Specific Visualization (20)

SciPy 1.0 and Beyond - a Story of Community and Code
SciPy 1.0 and Beyond - a Story of Community and CodeSciPy 1.0 and Beyond - a Story of Community and Code
SciPy 1.0 and Beyond - a Story of Community and Code
 
Science in the Open - Science Commons Pacific Northwest
Science in the Open - Science Commons Pacific NorthwestScience in the Open - Science Commons Pacific Northwest
Science in the Open - Science Commons Pacific Northwest
 
IIT 2020 - Sean DuBois Pion
IIT 2020 - Sean DuBois PionIIT 2020 - Sean DuBois Pion
IIT 2020 - Sean DuBois Pion
 
An Introduction to Game Programming with Flash: An Introduction to Flash and ...
An Introduction to Game Programming with Flash: An Introduction to Flash and ...An Introduction to Game Programming with Flash: An Introduction to Flash and ...
An Introduction to Game Programming with Flash: An Introduction to Flash and ...
 
Deep Learning Representations for All - Xavier Giro-i-Nieto - IRI Barcelona 2020
Deep Learning Representations for All - Xavier Giro-i-Nieto - IRI Barcelona 2020Deep Learning Representations for All - Xavier Giro-i-Nieto - IRI Barcelona 2020
Deep Learning Representations for All - Xavier Giro-i-Nieto - IRI Barcelona 2020
 
Coding serbia
Coding serbiaCoding serbia
Coding serbia
 
From Data to Visualization, what happens in between?
From Data to Visualization, what happens in between?From Data to Visualization, what happens in between?
From Data to Visualization, what happens in between?
 
Intro to data oriented design
Intro to data oriented designIntro to data oriented design
Intro to data oriented design
 
Minecraft in 500 lines with Pyglet - PyCon UK
Minecraft in 500 lines with Pyglet - PyCon UKMinecraft in 500 lines with Pyglet - PyCon UK
Minecraft in 500 lines with Pyglet - PyCon UK
 
yt: Growing and Engaging a Community of Practice
yt: Growing and Engaging a Community of Practiceyt: Growing and Engaging a Community of Practice
yt: Growing and Engaging a Community of Practice
 
A Random Forest using a Multi-valued Decision Diagram on an FPGa
A Random Forest using a Multi-valued Decision Diagram on an FPGaA Random Forest using a Multi-valued Decision Diagram on an FPGa
A Random Forest using a Multi-valued Decision Diagram on an FPGa
 
Agents In An Exponential World Foster
Agents In An Exponential World FosterAgents In An Exponential World Foster
Agents In An Exponential World Foster
 
Ludo: An Ontology to Create Linked Data Driven Serious Games
Ludo: An Ontology to Create Linked Data Driven Serious GamesLudo: An Ontology to Create Linked Data Driven Serious Games
Ludo: An Ontology to Create Linked Data Driven Serious Games
 
JavaScript Everywhere! Creating a 100% JavaScript web stack
JavaScript Everywhere! Creating a 100% JavaScript web stackJavaScript Everywhere! Creating a 100% JavaScript web stack
JavaScript Everywhere! Creating a 100% JavaScript web stack
 
Closing, Course Offer 17/18 & Homework (D5 2017 UPC Deep Learning for Compute...
Closing, Course Offer 17/18 & Homework (D5 2017 UPC Deep Learning for Compute...Closing, Course Offer 17/18 & Homework (D5 2017 UPC Deep Learning for Compute...
Closing, Course Offer 17/18 & Homework (D5 2017 UPC Deep Learning for Compute...
 
Monitoring Big Data Systems - "The Simple Way"
Monitoring Big Data Systems - "The Simple Way"Monitoring Big Data Systems - "The Simple Way"
Monitoring Big Data Systems - "The Simple Way"
 
Deep Learning Representations for All (a.ka. the AI hype)
Deep Learning Representations for All (a.ka. the AI hype)Deep Learning Representations for All (a.ka. the AI hype)
Deep Learning Representations for All (a.ka. the AI hype)
 
SQL is Dead; Long Live SQL: Lightweight Query Services for Long Tail Science
SQL is Dead; Long Live SQL: Lightweight Query Services for Long Tail ScienceSQL is Dead; Long Live SQL: Lightweight Query Services for Long Tail Science
SQL is Dead; Long Live SQL: Lightweight Query Services for Long Tail Science
 
Introduction to three.js & Leap Motion
Introduction to three.js & Leap MotionIntroduction to three.js & Leap Motion
Introduction to three.js & Leap Motion
 
Mini-Training: DataViz, data-driven documents and D3.js
Mini-Training: DataViz, data-driven documents and D3.jsMini-Training: DataViz, data-driven documents and D3.js
Mini-Training: DataViz, data-driven documents and D3.js
 

Mehr von Plotly

PLOTCON NYC: New Open Viz in R
PLOTCON NYC: New Open Viz in RPLOTCON NYC: New Open Viz in R
PLOTCON NYC: New Open Viz in RPlotly
 
PLOTCON NYC: Behind Every Great Plot There's a Great Deal of Wrangling
PLOTCON NYC: Behind Every Great Plot There's a Great Deal of WranglingPLOTCON NYC: Behind Every Great Plot There's a Great Deal of Wrangling
PLOTCON NYC: Behind Every Great Plot There's a Great Deal of WranglingPlotly
 
PLOTCON NYC: PlotlyJS.jl: Interactive plotting in Julia
PLOTCON NYC: PlotlyJS.jl: Interactive plotting in JuliaPLOTCON NYC: PlotlyJS.jl: Interactive plotting in Julia
PLOTCON NYC: PlotlyJS.jl: Interactive plotting in JuliaPlotly
 
PLOTCON NYC: Custom Colormaps for Your Field
PLOTCON NYC: Custom Colormaps for Your FieldPLOTCON NYC: Custom Colormaps for Your Field
PLOTCON NYC: Custom Colormaps for Your FieldPlotly
 
PLOTCON NYC: Interactive Visual Statistics on Massive Datasets
PLOTCON NYC: Interactive Visual Statistics on Massive DatasetsPLOTCON NYC: Interactive Visual Statistics on Massive Datasets
PLOTCON NYC: Interactive Visual Statistics on Massive DatasetsPlotly
 
PLOTCON NYC: The Architecture of Jupyter: Protocols for Interactive Data Expl...
PLOTCON NYC: The Architecture of Jupyter: Protocols for Interactive Data Expl...PLOTCON NYC: The Architecture of Jupyter: Protocols for Interactive Data Expl...
PLOTCON NYC: The Architecture of Jupyter: Protocols for Interactive Data Expl...Plotly
 
PLOTCON NYC: Building a Flexible Analytics Stack
PLOTCON NYC: Building a Flexible Analytics StackPLOTCON NYC: Building a Flexible Analytics Stack
PLOTCON NYC: Building a Flexible Analytics StackPlotly
 
PLOTCON NYC: Data Science in the Enterprise From Concept to Execution
PLOTCON NYC: Data Science in the Enterprise From Concept to ExecutionPLOTCON NYC: Data Science in the Enterprise From Concept to Execution
PLOTCON NYC: Data Science in the Enterprise From Concept to ExecutionPlotly
 
PLOTCON NYC: Get Your Point Across: The Art of Choosing the Right Visualizati...
PLOTCON NYC: Get Your Point Across: The Art of Choosing the Right Visualizati...PLOTCON NYC: Get Your Point Across: The Art of Choosing the Right Visualizati...
PLOTCON NYC: Get Your Point Across: The Art of Choosing the Right Visualizati...Plotly
 
PLOTCON NYC: Building Products Out of Data
PLOTCON NYC:  Building Products Out of DataPLOTCON NYC:  Building Products Out of Data
PLOTCON NYC: Building Products Out of DataPlotly
 
PLOTCON NYC: Mapping Networked Attention: What We Learn from Social Data
PLOTCON NYC: Mapping Networked Attention: What We Learn from Social DataPLOTCON NYC: Mapping Networked Attention: What We Learn from Social Data
PLOTCON NYC: Mapping Networked Attention: What We Learn from Social DataPlotly
 
PLOTCON NYC: Enterprise Dataviz' Unicorn Problem
PLOTCON NYC: Enterprise Dataviz' Unicorn ProblemPLOTCON NYC: Enterprise Dataviz' Unicorn Problem
PLOTCON NYC: Enterprise Dataviz' Unicorn ProblemPlotly
 
PLOTCON NYC: The Future of Business Intelligence: Data Visualization
PLOTCON NYC:  The Future of Business Intelligence: Data VisualizationPLOTCON NYC:  The Future of Business Intelligence: Data Visualization
PLOTCON NYC: The Future of Business Intelligence: Data VisualizationPlotly
 
PLOTCON NYC: New Data Viz in Data Journalism
PLOTCON NYC: New Data Viz in Data JournalismPLOTCON NYC: New Data Viz in Data Journalism
PLOTCON NYC: New Data Viz in Data JournalismPlotly
 
PLOTCON NYC: Text is data! Analysis and Visualization Methods
PLOTCON NYC: Text is data! Analysis and Visualization MethodsPLOTCON NYC: Text is data! Analysis and Visualization Methods
PLOTCON NYC: Text is data! Analysis and Visualization MethodsPlotly
 

Mehr von Plotly (15)

PLOTCON NYC: New Open Viz in R
PLOTCON NYC: New Open Viz in RPLOTCON NYC: New Open Viz in R
PLOTCON NYC: New Open Viz in R
 
PLOTCON NYC: Behind Every Great Plot There's a Great Deal of Wrangling
PLOTCON NYC: Behind Every Great Plot There's a Great Deal of WranglingPLOTCON NYC: Behind Every Great Plot There's a Great Deal of Wrangling
PLOTCON NYC: Behind Every Great Plot There's a Great Deal of Wrangling
 
PLOTCON NYC: PlotlyJS.jl: Interactive plotting in Julia
PLOTCON NYC: PlotlyJS.jl: Interactive plotting in JuliaPLOTCON NYC: PlotlyJS.jl: Interactive plotting in Julia
PLOTCON NYC: PlotlyJS.jl: Interactive plotting in Julia
 
PLOTCON NYC: Custom Colormaps for Your Field
PLOTCON NYC: Custom Colormaps for Your FieldPLOTCON NYC: Custom Colormaps for Your Field
PLOTCON NYC: Custom Colormaps for Your Field
 
PLOTCON NYC: Interactive Visual Statistics on Massive Datasets
PLOTCON NYC: Interactive Visual Statistics on Massive DatasetsPLOTCON NYC: Interactive Visual Statistics on Massive Datasets
PLOTCON NYC: Interactive Visual Statistics on Massive Datasets
 
PLOTCON NYC: The Architecture of Jupyter: Protocols for Interactive Data Expl...
PLOTCON NYC: The Architecture of Jupyter: Protocols for Interactive Data Expl...PLOTCON NYC: The Architecture of Jupyter: Protocols for Interactive Data Expl...
PLOTCON NYC: The Architecture of Jupyter: Protocols for Interactive Data Expl...
 
PLOTCON NYC: Building a Flexible Analytics Stack
PLOTCON NYC: Building a Flexible Analytics StackPLOTCON NYC: Building a Flexible Analytics Stack
PLOTCON NYC: Building a Flexible Analytics Stack
 
PLOTCON NYC: Data Science in the Enterprise From Concept to Execution
PLOTCON NYC: Data Science in the Enterprise From Concept to ExecutionPLOTCON NYC: Data Science in the Enterprise From Concept to Execution
PLOTCON NYC: Data Science in the Enterprise From Concept to Execution
 
PLOTCON NYC: Get Your Point Across: The Art of Choosing the Right Visualizati...
PLOTCON NYC: Get Your Point Across: The Art of Choosing the Right Visualizati...PLOTCON NYC: Get Your Point Across: The Art of Choosing the Right Visualizati...
PLOTCON NYC: Get Your Point Across: The Art of Choosing the Right Visualizati...
 
PLOTCON NYC: Building Products Out of Data
PLOTCON NYC:  Building Products Out of DataPLOTCON NYC:  Building Products Out of Data
PLOTCON NYC: Building Products Out of Data
 
PLOTCON NYC: Mapping Networked Attention: What We Learn from Social Data
PLOTCON NYC: Mapping Networked Attention: What We Learn from Social DataPLOTCON NYC: Mapping Networked Attention: What We Learn from Social Data
PLOTCON NYC: Mapping Networked Attention: What We Learn from Social Data
 
PLOTCON NYC: Enterprise Dataviz' Unicorn Problem
PLOTCON NYC: Enterprise Dataviz' Unicorn ProblemPLOTCON NYC: Enterprise Dataviz' Unicorn Problem
PLOTCON NYC: Enterprise Dataviz' Unicorn Problem
 
PLOTCON NYC: The Future of Business Intelligence: Data Visualization
PLOTCON NYC:  The Future of Business Intelligence: Data VisualizationPLOTCON NYC:  The Future of Business Intelligence: Data Visualization
PLOTCON NYC: The Future of Business Intelligence: Data Visualization
 
PLOTCON NYC: New Data Viz in Data Journalism
PLOTCON NYC: New Data Viz in Data JournalismPLOTCON NYC: New Data Viz in Data Journalism
PLOTCON NYC: New Data Viz in Data Journalism
 
PLOTCON NYC: Text is data! Analysis and Visualization Methods
PLOTCON NYC: Text is data! Analysis and Visualization MethodsPLOTCON NYC: Text is data! Analysis and Visualization Methods
PLOTCON NYC: Text is data! Analysis and Visualization Methods
 

Kürzlich hochgeladen

Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...amitlee9823
 
Call Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night StandCall Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night Standamitlee9823
 
Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...only4webmaster01
 
Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...amitlee9823
 
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service BangaloreCall Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangaloreamitlee9823
 
Detecting Credit Card Fraud: A Machine Learning Approach
Detecting Credit Card Fraud: A Machine Learning ApproachDetecting Credit Card Fraud: A Machine Learning Approach
Detecting Credit Card Fraud: A Machine Learning ApproachBoston Institute of Analytics
 
Chintamani Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore ...
Chintamani Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore ...Chintamani Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore ...
Chintamani Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore ...amitlee9823
 
VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...
VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...
VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...SUHANI PANDEY
 
➥🔝 7737669865 🔝▻ malwa Call-girls in Women Seeking Men 🔝malwa🔝 Escorts Ser...
➥🔝 7737669865 🔝▻ malwa Call-girls in Women Seeking Men  🔝malwa🔝   Escorts Ser...➥🔝 7737669865 🔝▻ malwa Call-girls in Women Seeking Men  🔝malwa🔝   Escorts Ser...
➥🔝 7737669865 🔝▻ malwa Call-girls in Women Seeking Men 🔝malwa🔝 Escorts Ser...amitlee9823
 
SAC 25 Final National, Regional & Local Angel Group Investing Insights 2024 0...
SAC 25 Final National, Regional & Local Angel Group Investing Insights 2024 0...SAC 25 Final National, Regional & Local Angel Group Investing Insights 2024 0...
SAC 25 Final National, Regional & Local Angel Group Investing Insights 2024 0...Elaine Werffeli
 
Call Girls In Shivaji Nagar ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Shivaji Nagar ☎ 7737669865 🥵 Book Your One night StandCall Girls In Shivaji Nagar ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Shivaji Nagar ☎ 7737669865 🥵 Book Your One night Standamitlee9823
 
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...gajnagarg
 
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men 🔝Bangalore🔝 Esc...
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men  🔝Bangalore🔝   Esc...➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men  🔝Bangalore🔝   Esc...
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men 🔝Bangalore🔝 Esc...amitlee9823
 
➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men 🔝Mathura🔝 Escorts...
➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men  🔝Mathura🔝   Escorts...➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men  🔝Mathura🔝   Escorts...
➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men 🔝Mathura🔝 Escorts...amitlee9823
 
5CL-ADBA,5cladba, Chinese supplier, safety is guaranteed
5CL-ADBA,5cladba, Chinese supplier, safety is guaranteed5CL-ADBA,5cladba, Chinese supplier, safety is guaranteed
5CL-ADBA,5cladba, Chinese supplier, safety is guaranteedamy56318795
 
Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...amitlee9823
 
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...amitlee9823
 
Just Call Vip call girls kakinada Escorts ☎️9352988975 Two shot with one girl...
Just Call Vip call girls kakinada Escorts ☎️9352988975 Two shot with one girl...Just Call Vip call girls kakinada Escorts ☎️9352988975 Two shot with one girl...
Just Call Vip call girls kakinada Escorts ☎️9352988975 Two shot with one girl...gajnagarg
 
➥🔝 7737669865 🔝▻ mahisagar Call-girls in Women Seeking Men 🔝mahisagar🔝 Esc...
➥🔝 7737669865 🔝▻ mahisagar Call-girls in Women Seeking Men  🔝mahisagar🔝   Esc...➥🔝 7737669865 🔝▻ mahisagar Call-girls in Women Seeking Men  🔝mahisagar🔝   Esc...
➥🔝 7737669865 🔝▻ mahisagar Call-girls in Women Seeking Men 🔝mahisagar🔝 Esc...amitlee9823
 

Kürzlich hochgeladen (20)

Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...
 
Call Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night StandCall Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night Stand
 
Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...
 
Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
 
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service BangaloreCall Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
 
Detecting Credit Card Fraud: A Machine Learning Approach
Detecting Credit Card Fraud: A Machine Learning ApproachDetecting Credit Card Fraud: A Machine Learning Approach
Detecting Credit Card Fraud: A Machine Learning Approach
 
Chintamani Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore ...
Chintamani Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore ...Chintamani Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore ...
Chintamani Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore ...
 
VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...
VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...
VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...
 
CHEAP Call Girls in Rabindra Nagar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Rabindra Nagar  (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Rabindra Nagar  (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Rabindra Nagar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
➥🔝 7737669865 🔝▻ malwa Call-girls in Women Seeking Men 🔝malwa🔝 Escorts Ser...
➥🔝 7737669865 🔝▻ malwa Call-girls in Women Seeking Men  🔝malwa🔝   Escorts Ser...➥🔝 7737669865 🔝▻ malwa Call-girls in Women Seeking Men  🔝malwa🔝   Escorts Ser...
➥🔝 7737669865 🔝▻ malwa Call-girls in Women Seeking Men 🔝malwa🔝 Escorts Ser...
 
SAC 25 Final National, Regional & Local Angel Group Investing Insights 2024 0...
SAC 25 Final National, Regional & Local Angel Group Investing Insights 2024 0...SAC 25 Final National, Regional & Local Angel Group Investing Insights 2024 0...
SAC 25 Final National, Regional & Local Angel Group Investing Insights 2024 0...
 
Call Girls In Shivaji Nagar ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Shivaji Nagar ☎ 7737669865 🥵 Book Your One night StandCall Girls In Shivaji Nagar ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Shivaji Nagar ☎ 7737669865 🥵 Book Your One night Stand
 
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
 
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men 🔝Bangalore🔝 Esc...
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men  🔝Bangalore🔝   Esc...➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men  🔝Bangalore🔝   Esc...
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men 🔝Bangalore🔝 Esc...
 
➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men 🔝Mathura🔝 Escorts...
➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men  🔝Mathura🔝   Escorts...➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men  🔝Mathura🔝   Escorts...
➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men 🔝Mathura🔝 Escorts...
 
5CL-ADBA,5cladba, Chinese supplier, safety is guaranteed
5CL-ADBA,5cladba, Chinese supplier, safety is guaranteed5CL-ADBA,5cladba, Chinese supplier, safety is guaranteed
5CL-ADBA,5cladba, Chinese supplier, safety is guaranteed
 
Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...
 
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
 
Just Call Vip call girls kakinada Escorts ☎️9352988975 Two shot with one girl...
Just Call Vip call girls kakinada Escorts ☎️9352988975 Two shot with one girl...Just Call Vip call girls kakinada Escorts ☎️9352988975 Two shot with one girl...
Just Call Vip call girls kakinada Escorts ☎️9352988975 Two shot with one girl...
 
➥🔝 7737669865 🔝▻ mahisagar Call-girls in Women Seeking Men 🔝mahisagar🔝 Esc...
➥🔝 7737669865 🔝▻ mahisagar Call-girls in Women Seeking Men  🔝mahisagar🔝   Esc...➥🔝 7737669865 🔝▻ mahisagar Call-girls in Women Seeking Men  🔝mahisagar🔝   Esc...
➥🔝 7737669865 🔝▻ mahisagar Call-girls in Women Seeking Men 🔝mahisagar🔝 Esc...
 

PLOTCON NYC: Domain Specific Visualization

  • 2. Domain Specific Visualization Nathan Goldbaum Moore Data Fellow _________ @njgoldbaum @yt_astro https://dxl.ncsa.illinois.edu/
  • 3. Generic Plotting Libraries are Powerful John Hunter Plotting Contest Entries: http://scipy2016.scipy.org/ehome/115969/276538/
  • 4. Creative Power Implies API Complexity 4 I’m picking on matplotlib here, but the same is true of any generic plotting library
  • 5. 5 ● Declarative Visualization Libraries ○ Vega-lite, ggplot, altair ● Documentation by example ○ Users create plots by cargo-culting examples ● Provide shortcuts in high-level API ○ “Easy mode” can’t cover all use cases Managing API Complexity
  • 6. 6 Alternate approach: make assumptions for users APLpy Astronomical Data https://aplpy.github.io Cartopy Geographic Data http://scitools.org.uk/cartopy/
  • 7. yt: 3D Data Analysis 7 Ingest Data Analysis/ Visualization yt-project.org Ramses Gadget
  • 12. 12 Ingestion Representation Analysis Visualization Science
  • 13. 13 Ingestion Representation Analysis Visualization Community Science
  • 14. Ingestion Representation Analysis Visualization Community Science The ice cream sandwich of open research software
  • 15. 15 yt: A Community of Practice >100 Contributors as of yt 3.3.2 (Oct 2016) Tom Abel Bili Dong Suoqing Ji Sam Leitner John Regan Geoffrey So Gabriel Altay Nicholas Earl Allyson Julian Yuan Li Mark Richardson Casey W. Stark Kenza Arraki Hilary Egan Christian Karch Alex Lindsay Sherwood Richers Antoine Strugarek Kirk Barrow Daniel Fenn Max Katz Chris Malone Thomas Robitaille Elizabeth Tasker Ricarda Beckmann John Forbes BW Keller Jonah Miller Anna Rosen Ben Thompson Elliott Biondo Enrico Garaldi Ji-hoon Kim Joshua Moloney Chuck Rozhon Robert Thompson Alex Bogert Sam Geen Chang-Goo Kim Christopher Moody Douglas Rudd Joseph Tomlinson Robert Bradshaw Austin Gilbert Steffen Klemer Stuart Mumford Hsi-Yu Schive Stephanie Tonnesen Andre Bubel Adam Ginsburg Fabian Koller Andrew Myers Anthony Scopatz Matt Turk Corentin Cadiou Nathan Goldbaum Kacper Kowalik Jill Naiman Noel Scudder Miguel de Val-Borro Yi-Hao Chen William Gray Mark Krumholz Desika Narayanan Patrick Shriwise Rick Wagner Pengfei Chen Markus Haider Michael Kuhlen Kaylea Nelson Devin Silvia Mike Warren David Collins Eric Hallman Meagan Lang Brian O'Shea Sam Skillman Charlie Watson Brian Crosby David Hannasch Erwin Lau J.S. Oishi Stephen Skory Andrew Wetzel Weiguang Cui Cameron Hummels Eve Lee JC Passy Aaron Smith John Wise Andrew Cunningham Anni Järvenpää Doris Lee Rafael Ruggiero Britton Smith Michael Zingale “Scaling a code in the human dimension”: https://arxiv.org/abs/1301.7064
  • 16. 16 yt: A Community of Practice Tom Abel Bili Dong Suoqing Ji Sam Leitner John Regan Geoffrey So Gabriel Altay Nicholas Earl Allyson Julian Yuan Li Mark Richardson Casey W. Stark Kenza Arraki Hilary Egan Christian Karch Alex Lindsay Sherwood Richers Antoine Strugarek Kirk Barrow Daniel Fenn Max Katz Chris Malone Thomas Robitaille Elizabeth Tasker Ricarda Beckmann John Forbes BW Keller Jonah Miller Anna Rosen Ben Thompson Elliott Biondo Enrico Garaldi Ji-hoon Kim Joshua Moloney Chuck Rozhon Robert Thompson Alex Bogert Sam Geen Chang-Goo Kim Christopher Moody Douglas Rudd Joseph Tomlinson Robert Bradshaw Austin Gilbert Steffen Klemer Stuart Mumford Hsi-Yu Schive Stephanie Tonnesen Andre Bubel Adam Ginsburg Fabian Koller Andrew Myers Anthony Scopatz Matt Turk Corentin Cadiou Nathan Goldbaum Kacper Kowalik Jill Naiman Noel Scudder Miguel de Val-Borro Yi-Hao Chen William Gray Mark Krumholz Desika Narayanan Patrick Shriwise Rick Wagner Pengfei Chen Markus Haider Michael Kuhlen Kaylea Nelson Devin Silvia Mike Warren David Collins Eric Hallman Meagan Lang Brian O'Shea Sam Skillman Charlie Watson Brian Crosby David Hannasch Erwin Lau J.S. Oishi Stephen Skory Andrew Wetzel Weiguang Cui Cameron Hummels Eve Lee JC Passy Aaron Smith John Wise Andrew Cunningham Anni Järvenpää Doris Lee Rafael Ruggiero Britton Smith Michael Zingale >100 Contributors as of yt 3.3.2 (Oct 2016) “Scaling a code in the human dimension”: https://arxiv.org/abs/1301.7064
  • 18. 18 Data on disk has no physical meaning
  • 19. 19 With yt you can think about data using a physically motivated interface
  • 20. 20 Allowing you to forget about what the data look like as a file format
  • 21. 21 And select only the data you want to select
  • 22. 22 And only the data you want to select
  • 23. 23 It understands multiresolution data as a first-class citizen
  • 24. 24
  • 25. 25
  • 26. 26
  • 27. PlotWindow plotting system 27 import yt import yt.units as u ds = yt.load('DD0600/DD0600') prj = yt.ProjectionPlot( ds, 'z', 'density', width=15*u.kpc) prj.save() http://yt-project.org/doc/visualizing/plots.html
  • 28. 28
  • 30. import yt import yt.units as u ds = yt.load('DD0600/DD0600') prj = yt.ProjectionPlot( ds, 'z', 'density', width=15*u.kpc) prj.save() Short but powerful scripts ● Register namespace ● Set up unit metadata for further use later 30
  • 31. import yt import yt.units as u ds = yt.load('DD0600/DD0600') prj = yt.ProjectionPlot( ds, 'z', 'density', width=15*u.kpc) prj.save() Short but powerful scripts ● Automagically determine data format ● Parse parameters ● Initialize IO and data selection interface 31
  • 32. import yt import yt.units as u ds = yt.load('DD0600/DD0600') prj = yt.ProjectionPlot( ds, 'z', 'density', width=15*u.kpc) prj.save() Short but powerful scripts ● Set up in-memory mesh ● Determine available fields to plot ● Chunked IO ● Mask out overlapping data ● Convert to data CGS units ● Perform projection ● Pixelize from multi-resolution projection ● Initialize plot object 32
  • 33. import yt import yt.units as u ds = yt.load('DD0600/DD0600') prj = yt.ProjectionPlot( ds, 'z', 'density', width=15*u.kpc) prj.save() Short but powerful scripts ● Calculate positioning and metadata for matplotlib plot ● Create and customize matplotlib Figure and Axes objects ● Call imshow() with appropriate keyword arguments ● Save plot to disk 33
  • 34. Generic plotting libraries can’t make assumptions 34 import matplotlib.pyplot as plt plt.imshow(image_data) plt.savefig('plot.png')
  • 35. Customizing plots increases complexity import matplotlib import matplotlib.pyplot as plt plt.imshow(image_data, norm=matplotlib.colors.LogNorm(), origin='lower', cmap='viridis', extent=[-7.5, 7.5, -7.5, 7.5]) cb = plt.colorbar() cb.set_label(r'Projected Density $(rm{g}/rm{cm}^2)$') plt.xlabel('x (kpc)') plt.ylabel('y (kpc)') plt.savefig('plot.png', bbox_inches='tight') 35
  • 36. 36
  • 37. 37 Ingestion Representation Analysis Visualization Community Science Build new libraries for your use cases Add new plotting tasks to libraries that already exist
  • 38. Design Tips for Plotting Libraries 38
  • 39. Provide sane defaults 39 import yt ds = yt.load('DD0600/DD0600') prj = yt.ProjectionPlot(ds, 'z', 'density') prj.save('./frames/0000.png') for i in range(150): prj.zoom(1.03) prj.save('./frames/%04d.png' % (i+1))
  • 40. import yt ds = yt.load('DD0600/DD0600') prj = yt.ProjectionPlot(ds, 'z', 'density') prj.set_zlim('density', 8e-6, 3e-1) prj.save('./frames/0000.png') for i in range(150): prj.zoom(1.03) prj.save('./frames/%04d.png' % (i+1)) Customize via properties/setters, not keyword arguments 40
  • 41. Don’t overcomplicate for niche use cases import yt import yt.units as u ds = yt.load('DD0600/DD0600') fields = ['density', 'temperature', 'Velocity_divergence', 'grid_level'] slc = yt.SlicePlot(ds, 'z', fields) slc.set_width(15*kpc) slc.set_log('grid_level', False) slc.set_unit('velocity_divergence', 'km/s/kpc') slc.set_unit('density', 'Msun/pc**3') slc.save() 4 1
  • 42. Expose base plotting library primitives slc = yt.SlicePlot(ds, 'z', 'density') plot = slc.plots['density'] # matplotlib.figure.Figure plot.figure # matplotlib.axes.Axes plot.axes # matlotlib.colorbar.Colorbar plot.cb # matplotlib.image.AxesImage plot.image 42http://yt-project.org/docs/dev/cookbook/simple_plots.html#matplotlib-primitives
  • 43. Only perform expensive actions as needed 43 def invalidate_plot(f): @functools.wraps(f) def newfunc(*args, **kwargs): rv = f(*args, **kwargs) args[0]._plot_valid = False return rv return newfunc def validate_plot(f): @wraps(f) def newfunc(*args, **kwargs): if not args[0]._plot_valid: args[0]._setup_plots() rv = f(*args, **kwargs) return rv return newfunc class SlicePlot: def _setup_plots(self): # make plots using matplotlib primitives @invalidate_plot def set_axes_unit(self, unit_name): self._axes_unit_names = (unit_name, unit_name) @validate_plot def save(self): for field in self.plots: self.plots[field].save()
  • 44. 44
  • 45. Thank you for your attention! 45 Questions? Concerns? Comments?