PLOTCON NYC: Domain Specific Visualization

45
NOVEMBER 15-18, 2016 #plotcon 1

Transcript of PLOTCON NYC: Domain Specific Visualization

Page 1: PLOTCON NYC: Domain Specific Visualization

NOVEMBER 15-18, 2016

#plotcon

1

Page 2: PLOTCON NYC: Domain Specific Visualization

Domain Specific Visualization

Nathan GoldbaumMoore Data Fellow_________ @njgoldbaum @yt_astrohttps://dxl.ncsa.illinois.edu/

Page 3: PLOTCON NYC: Domain Specific Visualization

Generic Plotting Libraries are Powerful

John Hunter Plotting Contest Entries: http://scipy2016.scipy.org/ehome/115969/276538/

Page 4: PLOTCON NYC: Domain Specific Visualization

Creative Power Implies API Complexity

4

I’m picking on matplotlib here, but the same is true of any generic plotting library

Page 5: PLOTCON NYC: Domain Specific Visualization

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

Page 6: PLOTCON NYC: Domain Specific Visualization

6

Alternate approach: make assumptions for users

APLpyAstronomical Data

https://aplpy.github.io

CartopyGeographic Data

http://scitools.org.uk/cartopy/

Page 7: PLOTCON NYC: Domain Specific Visualization

yt: 3D Data Analysis

7

Ingest Data Analysis/Visualization

yt-project.org

Ramses

Gadget

Page 8: PLOTCON NYC: Domain Specific Visualization

Ingestion

Page 9: PLOTCON NYC: Domain Specific Visualization

Ingestion Representation

Page 10: PLOTCON NYC: Domain Specific Visualization

Ingestion Representation Analysis

Page 11: PLOTCON NYC: Domain Specific Visualization

Ingestion Representation Analysis Visualization

Page 12: PLOTCON NYC: Domain Specific Visualization

12

Ingestion Representation Analysis Visualization

Science

Page 13: PLOTCON NYC: Domain Specific Visualization

13

Ingestion Representation Analysis Visualization

Community

Science

Page 14: PLOTCON NYC: Domain Specific Visualization

Ingestion Representation Analysis Visualization

Community

Science

The ice cream sandwich of open research software

Page 15: PLOTCON NYC: Domain Specific Visualization

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 SoGabriel Altay Nicholas Earl Allyson Julian Yuan Li Mark Richardson Casey W. StarkKenza Arraki Hilary Egan Christian Karch Alex Lindsay Sherwood Richers Antoine StrugarekKirk Barrow Daniel Fenn Max Katz Chris Malone Thomas Robitaille Elizabeth TaskerRicarda Beckmann John Forbes BW Keller Jonah Miller Anna Rosen Ben ThompsonElliott Biondo Enrico Garaldi Ji-hoon Kim Joshua Moloney Chuck Rozhon Robert ThompsonAlex Bogert Sam Geen Chang-Goo Kim Christopher Moody Douglas Rudd Joseph TomlinsonRobert Bradshaw Austin Gilbert Steffen Klemer Stuart Mumford Hsi-Yu Schive Stephanie TonnesenAndre Bubel Adam Ginsburg Fabian Koller Andrew Myers Anthony Scopatz Matt TurkCorentin Cadiou Nathan Goldbaum Kacper Kowalik Jill Naiman Noel Scudder Miguel de Val-BorroYi-Hao Chen William Gray Mark Krumholz Desika Narayanan Patrick Shriwise Rick WagnerPengfei Chen Markus Haider Michael Kuhlen Kaylea Nelson Devin Silvia Mike WarrenDavid Collins Eric Hallman Meagan Lang Brian O'Shea Sam Skillman Charlie WatsonBrian Crosby David Hannasch Erwin Lau J.S. Oishi Stephen Skory Andrew WetzelWeiguang Cui Cameron Hummels Eve Lee JC Passy Aaron Smith John WiseAndrew 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

Page 16: PLOTCON NYC: Domain Specific Visualization

16

yt: A Community of Practice

Tom Abel Bili Dong Suoqing Ji Sam Leitner John Regan Geoffrey SoGabriel Altay Nicholas Earl Allyson Julian Yuan Li Mark Richardson Casey W. StarkKenza Arraki Hilary Egan Christian Karch Alex Lindsay Sherwood Richers Antoine StrugarekKirk Barrow Daniel Fenn Max Katz Chris Malone Thomas Robitaille Elizabeth TaskerRicarda Beckmann John Forbes BW Keller Jonah Miller Anna Rosen Ben ThompsonElliott Biondo Enrico Garaldi Ji-hoon Kim Joshua Moloney Chuck Rozhon Robert ThompsonAlex Bogert Sam Geen Chang-Goo Kim Christopher Moody Douglas Rudd Joseph TomlinsonRobert Bradshaw Austin Gilbert Steffen Klemer Stuart Mumford Hsi-Yu Schive Stephanie TonnesenAndre Bubel Adam Ginsburg Fabian Koller Andrew Myers Anthony Scopatz Matt TurkCorentin Cadiou Nathan Goldbaum Kacper Kowalik Jill Naiman Noel Scudder Miguel de Val-BorroYi-Hao Chen William Gray Mark Krumholz Desika Narayanan Patrick Shriwise Rick WagnerPengfei Chen Markus Haider Michael Kuhlen Kaylea Nelson Devin Silvia Mike WarrenDavid Collins Eric Hallman Meagan Lang Brian O'Shea Sam Skillman Charlie WatsonBrian Crosby David Hannasch Erwin Lau J.S. Oishi Stephen Skory Andrew WetzelWeiguang Cui Cameron Hummels Eve Lee JC Passy Aaron Smith John WiseAndrew 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

Page 17: PLOTCON NYC: Domain Specific Visualization

What is yt?

17

Page 18: PLOTCON NYC: Domain Specific Visualization

18Data on disk has no physical meaning

Page 19: PLOTCON NYC: Domain Specific Visualization

19

With yt you can think about data using a physically motivated interface

Page 20: PLOTCON NYC: Domain Specific Visualization

20

Allowing you to forget about what the data look like as a file format

Page 21: PLOTCON NYC: Domain Specific Visualization

21And select only the data you want to select

Page 22: PLOTCON NYC: Domain Specific Visualization

22And only the data you want to select

Page 23: PLOTCON NYC: Domain Specific Visualization

23

It understands multiresolution data as a first-class citizen

Page 24: PLOTCON NYC: Domain Specific Visualization

24

Page 25: PLOTCON NYC: Domain Specific Visualization

25

Page 26: PLOTCON NYC: Domain Specific Visualization

26

Page 27: PLOTCON NYC: Domain Specific Visualization

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

Page 28: PLOTCON NYC: Domain Specific Visualization

28

Page 29: PLOTCON NYC: Domain Specific Visualization

29http://paste.yt-project.org/show/6913/

Page 30: PLOTCON NYC: Domain Specific Visualization

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

Page 31: PLOTCON NYC: Domain Specific Visualization

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

Page 32: PLOTCON NYC: Domain Specific Visualization

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

Page 33: PLOTCON NYC: Domain Specific Visualization

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

Page 34: PLOTCON NYC: Domain Specific Visualization

Generic plotting libraries can’t make assumptions

34

import matplotlib.pyplot as plt

plt.imshow(image_data)

plt.savefig('plot.png')

Page 35: PLOTCON NYC: Domain Specific Visualization

Customizing plots increases complexityimport 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

Page 36: PLOTCON NYC: Domain Specific Visualization

36

Page 37: PLOTCON NYC: Domain Specific Visualization

37

Ingestion Representation Analysis Visualization

Community

Science

Build new libraries for your use cases

Add new plotting tasks to libraries that already exist

Page 38: PLOTCON NYC: Domain Specific Visualization

Design Tips for Plotting Libraries

38

Page 39: PLOTCON NYC: Domain Specific Visualization

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))

Page 40: PLOTCON NYC: Domain Specific Visualization

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

Page 41: PLOTCON NYC: Domain Specific Visualization

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()

41

Page 42: PLOTCON NYC: Domain Specific Visualization

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

Page 43: PLOTCON NYC: Domain Specific Visualization

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()

Page 45: PLOTCON NYC: Domain Specific Visualization

Thank you for your attention!

45

Questions? Concerns? Comments?