STILTS-PLOT2SKY(1)
π¦ NAME π¦
stilts-plot2sky β she draws a sky plot. That's the whole job description, and she does it gorgeously. (It's part of the Stilts commands, and it lives in section 1, for anyone checking receipts. π
)
β¨ SYNOPSIS β¨
okay so the whole invocation looks like this, and yes it's giving long, but that's just because she has options:
stilts plot2sky [xpix=<int-value>] [ypix=<int-value>]
[insets=<top>,<left>,<bottom>,<right>]
[omode=swing|out|cgi|discard|auto]
[storage=simple|memory|disk|policy|cache|basic-cache|persistent|parallel]
[seq=<suffix>[,...]]
[legend=true|false|null] [legborder=true|false]
[legopaque=true|false] [legseq=<suffix>[,...]]
[legpos=<xfrac,yfrac>] [title=<value>] [auxmap=<map-name>|<color>-<color>[-<color>...]]
[auxclip=<lo>,<hi>]
[auxflip=true|false] [auxquant=<number>]
[auxfunc=log|linear|histogram|...] [auxmin=<number>]
[auxmax=<number>] [auxlabel=<text>] [auxcrowd=<factor>]
[auxwidth=<pixels>] [auxvisible=true|false|null]
[forcebitmap=true|false] [compositor=0..1]
[animate=<table>] [afmt=<in-format>]
[astream=true|false] [acmd=<cmds>] [parallel=<int-value>]
[projection=sin|aitoff|aitoff0|car|car0]
[viewsys=equatorial|galactic|supergalactic|ecliptic]
[reflectlon=true|false] [grid=true|false]
[scalebar=true|false]
[labelpos=Auto|External|Internal|...] [sex=true|false]
[crowd=<number>] [gridcolor=<rrggbb>|red|blue|...]
[gridtrans=0..1] [labelcolor=<rrggbb>|red|blue|...]
[gridaa=true|false] [texttype=plain|antialias|latex]
[fontsize=<int-value>] [fontstyle=standard|serif|mono]
[fontweight=plain|bold|italic|bold_italic]
[clon=<degrees>] [clat=<degrees>] [radius=<degrees>]
[zoomfactor=<number>] [leglabelN=<text>] [layerN=<layer-type> <layerN-specific-params>]
[datasysN=equatorial|galactic|supergalactic|ecliptic]
π DESCRIPTION π
So plot2sky draws plots on the celestial sphere. The way that sphere shows up on your screen is controlled by the projection parameter. By default you get a view of a rotatable sphere seen from the outside β which, for small regions of sky, approximates a tangent projection β but no cap, Hammer-Aitoff and Plate CarΓ©e projections are also available. She also ships with a bunch of options for drawing and labelling the coordinate grid, so your sky plot can actually tell you where you are. π
Positional coordinates are given as lon,lat pairs β longitude and latitude in decimal degrees. By default those get represented in the output in the same coordinate system, unlabelled. That's the chill default. But babe, she can also transform between different coordinate systems if you specify the per-plot view system with the viewsys parameter and the per-layer data system with the datasysN parameter, like:
plot2sky viewsys=galactic layer1=mark in1=cat.fits lon1=RA2000 lat1=DEC2000 datasys1=equatorial
Content gets added to the plot by specifying one or more plot layers with the layerN parameter. The N part is a suffix applied to every parameter affecting that layer, and literally any suffix is fair game (including the empty string, iconic behaviour honestly). The available layers for this plot type are:
mark, size, sizexy, skyvector, skyellipse, skycorr, link2, mark2, poly4, mark4, polygon, area, central, label, arealabel, contour, skydensity, healpix, skygrid.
π OPTIONS π
xpix=<int-value>β Size of the output image in the X direction, in pixels. This includes space for any axis labels, padding, and other decoration outside the plot area itself. See alsoinsets. β¨ypix=<int-value>β Size of the output image in the Y direction, in pixels. Same deal: this includes space for axis labels, padding, and other decoration outside the actual plot area. See alsoinsets.insets=<top>,<left>,<bottom>,<right>β Defines how much space, in pixels, goes around the actual plotting area. That space is for axis labels and other decorations, and whatever's left over becomes an empty border.
The size and position of the actual plotting area is determined by this parameter together with xpix and ypix.
The value is 4 comma-separated integers: <top>,<left>,<bottom>,<right>. Any or all of these values can be left blank, and then the corresponding margin gets calculated automatically based on how much space is required. π«Ά
omode=swing|out|cgi|discard|autoβ Determines how the drawn plot gets output. See SUN/256.swing: The plot is displayed in a window on the screen. This plot is "live" β it can be resized and (except for old-style plots) navigated around with mouse actions the same way you'd do it with plots in TOPCAT. π₯out: The plot is written to a file given byout, using the graphics format given byofmt.cgi: The plot is written in a way suitable for CGI use straight from a web server. The output is in the graphics format given byofmt, preceded by a suitable "Content-type" declaration.discard: The plot is drawn, but discarded. There is no output. (Not me drawing a whole plot and then throwing it away π)auto: Behaves asswingoroutmode depending on the presence of theoutparameter.
storage=simple|memory|disk|policy|cache|basic-cache|persistent|parallelβ Determines the way data is accessed when the plot is being constructed. There are two main vibes here: cached or not cached.
If no caching is used, rows are read sequentially from the specified input table(s) every single time they're required. That generally means a small resource footprint (though that can depend on how the table is specified), and it makes sense if the data only needs to be scanned once β or maybe if the table is, like, very large. If caching is used, the required data is read once from the specified input table(s), then prepared and cached before any plotting happens, and the plots are done using that cached data. Fair warning: this can eat a significant amount of storage for large tables, but it's usually more sensible (read: faster) if the data will need to be scanned multiple times. There are various options for cache storage.
The options are:
simple: no caching, data read directly from the input tablememory: cached to memory;OutOfMemoryErrorpossible for very large plots πdisk: cached to diskpolicy: cached using the application-wide default storage policy, which is usually adaptive (a memory/disk hybrid)persistent: cached to persistent files on disk, in the system temporary directory (defined by the system propertyjava.io.tmpdir). If this is used, plot data is stored on disk in a way that means it can be re-used between STILTS invocations, so data preparation can be avoided on subsequent runs. Note however that it can leave potentially large files in your temporary directory. πcache: synonym formemory(backward compatibility)basic-cache: a dumber version ofmemory(no optimisation for constant-valued columns)parallel: experimental version of the memory-based cache that reads into the cache in parallel for large files. This makes the plot faster to prepare, but interaction is a bit slower and sequence-dependent attributes of the plot may not come out right. This experimental option may be withdrawn or modified in future releases.
The default value is memory if a live plot is being generated (omode=swing), since in that case the plot needs to be redrawn every time the user does plot navigation actions or resizes the window, or if animations are being produced. Otherwise (e.g. output to a graphics file) the default is simple.
seq=<suffix>[,...]β Contains a comma-separated list of layer suffixes that determines the order in which layers are drawn on the plot. This can affect which symbols get plotted on top of β and therefore potentially obscure β which other ones. π
When specifying a plot, multiple layers may be specified, each introduced by a parameter layer<N>, where <N> is a different (arbitrary) suffix labelling the layer, and it gets appended to all the parameters specific to defining that layer.
By default the layers are drawn on the plot in the order the layer* parameters appear on the command line. But if this parameter is specified, each comma-separated element is interpreted as a layer suffix, giving the ordered list of layers to plot. Every element of the list must be a suffix with a corresponding layer parameter, but missing or repeated elements are allowed. Slay.
legend=true|false|nullβ Whether to draw a legend or not. If no value is supplied, the decision is made automatically: a legend is drawn only if it would have more than one entry.legborder=true|falseβ Iftrue, a line border is drawn around the legend.legopaque=true|falseβ Iftrue, the background of the legend is opaque, and the legend obscures any plot components behind it. Otherwise, it's transparent.legseq=<suffix>[,...]β Determines which layers are represented in the legend (if present) and in which order they appear. The legend has a line for each layer label (as determined by theleglabelNparameter). If multiple layers have the same label, they contribute to the same entry in the legend, with style icons plotted over each other. The value of this parameter is a comma-separated sequence of layer suffixes, which determines the order in which the legend entries appear. Layers whose suffixes are missing from this list do not show up in the legend at all. π
If no value is supplied (the default), the sequence is the same as the layer plotting sequence (see seq).
legpos=<xfrac,yfrac>β Determines the internal position of the legend on the plot. The value is a comma-separated pair giving the X and Y positions of the legend within the plotting bounds β so for instance"0.5,0.5"will put the legend right in the middle of the plot. If no value is supplied, the legend will appear outside the plot boundary. πtitle=<value>β the text that gets slapped at the top of your plot π. If it's null (which is the default, bestie), no title shows up at all and you get more room for the graphics. Extra pixels, zero regrets β¨auxmap=<map-name>|<color>-<color>[-<color>...]β the colour map used for Aux axis shading π¨
SUN/256 has a whole mixed bag of colour ramps, and they're all listed right here: inferno, magma, plasma, viridis, cividis, cubehelix, sron, rainbow, rainbow2, rainbow3, pastel, cosmic, ember, gothic, rainforest, voltage, bubblegum, gem, chroma, sunset, neon, tropical, accent, gnuplot, gnuplot2, specxby, set1, paired, hotcold, guppy, iceburn, redshift, pride, rdbu, piyg, brbg, cyan-magenta, red-blue, brg, heat, cold, light, greyscale, colour, standard, bugn, bupu, orrd, pubu, purd, painbow, huecl, infinity, hue, intensity, rgb_red, rgb_green, rgb_blue, hsv_h, hsv_s, hsv_v, yuv_y, yuv_u, yuv_v, scale_hsv_s, scale_hsv_v, scale_yuv_y, mask, blacker, whiter, transparency.
ngl, a LOT of these β including the rainbow-ish ones β get side-eye from the visualisation community π be warned, bestie.
You can also build your own custom colour map by handing over a sequence of colour names separated by minus sign (-) characters π In that case the ramp is a linear interpolation between each pair of colours you named, using the same syntax as when you specify a colour value. So for example "yellow-hotpink-#0000ff" would shade from yellow via hot pink to blue. Obsessed with that actually.
auxclip=<lo>,<hi>β defines a subrange of the colour ramp for Aux shading βοΈ You give it a (low,high) comma-separated pair of two numbers between0and1.
If you use the full range 0,1 the whole range of colours specified by the selected shader gets used. But if you hand it something like 0,0.5, only those colours at the left hand end of the ramp show up.
If you pick the null (default) value, a default clip is used π
It generally covers most or all of the range 0-1, but for colour maps that fade to white, a small proportion of the lower end may be excluded, so that all the colours are visually distinguishable from a white background. This default is usually a good idea if the colour map is being used with something like a scatter plot, where markers are plotted against a white background π«Ά But for something like a density map, where the whole plotting area is tiled with colours from the map, it may be better to supply the whole range 0,1 explicitly, fr fr.
auxflip=true|falseβ iftrue, the colour map on the Aux axis gets reversed π mirror moment.auxquant=<number>β lets the colour map used for the Aux axis be quantised β¨ If you pick an integer value N, the colour map gets viewed as N discrete evenly-spaced levels, so only N different colours show up in the plot. This can generate a contour-like effect and may make it easier to trace the boundaries of regions of interest by eye π
If you leave it blank, the colour map is nominally continuous (though in practice it may be quantised to a medium-sized number like 256).
auxfunc=log|linear|histogram|...β defines the way values in the Aux range get mapped to the selected colour ramp π§
The available options are:
log: Logarithmic scaling, positive values onlylinear: Linear scalinghistogram: Scaling follows data distribution, with linear axishistolog: Scaling follows data distribution, with logarithmic axis, positive values onlyasinh: Asinh scaling, wide dynamic range for both positive and negative valuessqrt: Square root scalingsquare: Square scalingacos: Inverse cosine Scalingcos: Cosine Scaling
For all these options the full range of valid data values is used, and displayed on the colour bar if applicable π Heads up though: the logarithmic-based options Log and HistoLog will ignore non-positive values. The Linear, Log, Square and Sqrt options just apply the named function to the full data range. The histogram options are different β they use a scaling function that corresponds to the actual distribution of the data, so there are about the same number of points (or pixels, or whatever's being scaled) of each colour π The histogram options are somewhat more expensive, but they can be a good choice if you're exploring data whose distribution is unknown or not well-behaved over its min-max range. Histogram and HistoLog both assign the colours in the same way, but they display the colour ramp with linear or logarithmic annotation respectively; HistoLog also ignores non-positive values π
auxmin=<number>β minimum value of the data coordinate on the Aux axis π This sets the value before any subranging is applied. If you don't supply it, the value is determined from the plotted data.auxmax=<number>β maximum value of the data coordinate on the Aux axis π This sets the value before any subranging is applied. If you don't supply it, the value is determined from the plotted data.auxlabel=<text>β sets the label used to annotate the aux axis, if it's visible π·οΈauxcrowd=<factor>β determines how closely the tick marks are spaced on the Aux axis, if visible π― The default value is1, meaning normal crowding. Larger values = more ticks, smaller values = fewer ticks. Tick marks will not however be spaced so closely that the labels overlap each other, so to get very closely spaced marks you may need to reduce the font size as well. iykyk.auxwidth=<pixels>β determines the lateral size of the aux colour ramp, if visible, in pixels πauxvisible=true|false|nullβ determines whether the aux axis colour ramp is displayed alongside the plot ποΈ
If not supplied (the default), the aux axis will be visible when aux shading is used in any of the plotted layers.
forcebitmap=true|falseβ affects whether rendering of the data contents of a plot (though not axis labels etc) is always done to an intermediate bitmap rather than, where possible, being painted using graphics primitives πΌοΈ This is a rather arcane setting that may nevertheless have noticeable effects on the appearance and size of an output graphics file, as well as plotting time. For some types of plot (e.g.shadingN=autoorshadingN=density) it will have no effect, since this kind of rendering happens in any case. Not me warning you it's arcane π
When writing to vector graphics formats (PDF and PostScript), setting it true will force the data contents to be bitmapped π This may make the output less beautiful (round markers will no longer be perfectly round), but it may result in a much smaller file if there are very many data points. Trade-offs, bestie.
When writing to bitmapped output formats (PNG, GIF, JPEG, ...), it fixes shapes to be the same as seen on the screen rather than be rendered at the mercy of the graphics system, which sometimes introduces small distortions π
compositor=0..1β defines how multiple overplotted partially transparent pixels get combined to form a resulting colour πΈ The way this is used depends on the details of the specified plot.
Currently this parameter takes a "boost" value in the range 0..1. If the value is zero, saturation semantics are used: RGB colours are added in proporition to their associated alpha value until the total alpha is saturated (reaches 1), after which additional pixels have no further effect. For larger boost values, the effect is similar, but any non-zero alpha in the output is boosted to the given minimum value β¨ The effect of this is that even very slightly populated pixels can be visually distinguished from unpopulated ones, which may not be the case for saturation composition. Main character pixels only π
animate=<table>β if not null, this parameter makes the command create a sequence of plots instead of just one π¬ The parameter value is a table with one row for each frame to be produced. Columns in the table are interpreted as parameters which may take different values for each frame; the column name is the parameter name, and the value for a given frame is its value from that row. Animating like this is considerably more efficient than invoking the STILTS command in a loop. Slay.
The location of the animation control table. This may take one of the following forms:
- A filename.
- A URL.
- The special value
-, meaning standard input. In this case the input format must be given explicitly using theafmtparameter. Note that not all formats can be streamed in this way. - A scheme specification of the form
:<scheme-name>:<scheme-args>. - A system command line with either a
"<"character at the start, or a"|"character at the end ("<syscmd"or"syscmd|"). This executes the given pipeline and reads from its standard output. This will probably only work on unix-like systems π§
In any case, compressed data in one of the supported compression formats (gzip, Unix compress or bzip2) will be decompressed transparently π¦
afmt=<in-format>β specifies the format of the animation control table as specified by parameteranimateπ The known formats are listed in SUN/256. This flag can be used if you know what format your table is in. If it has the special value(auto)(the default), then an attempt will be made to detect the format of the table automatically π€ This cannot always be done correctly however, in which case the program will exit with an error explaining which formats were attempted. This parameter is ignored for scheme-specified tables. Periodt.astream=true|falseβ ok so if you set this true, that animation control table you named withanimategets read as a stream π. Heads up though: you must also hand over theafmtparameter in that case, no exceptions. Depending on what operations you're running and which processing mode you're in, this can make the read fail β sometimes the table genuinely has to be read more than once and streaming just won't allow it. π Normally you do not need to set this flag, because in most cases the data gets streamed automatically the moment that's the best move. But every now and then it means less resource usage when you're crunching big files in certain formats (VOTable, looking at you π). Also β this parameter is completely ignored for scheme-specified tables. Periodt.acmd=<cmds>β this one tells stilts what processing to do on the animation control table named byanimate, and it happens before anything else gets processed. The value is one or more of those filter commands described inSUN/256β¨. Give it more than one? Separate them with semicolon characters (";"). And you can repeat this parameter as many times as you want on the same command line to stack up a whole list of processing steps β the sequence you build that way is the processing pipeline that runs on the table, no cap.
You can also drop your commands into an external file instead, using the indirection character '@'. So a value of "@filename" makes the file filename get read for a list of filter commands to execute π. Inside that file, commands can be separated by newline characters and/or semicolons, and any lines that are blank or that start with a '#' character are ignored. A backslash character '\fR' at the end of a line joins it with the following line β like a lil glue stick for your syntax π
.
parallel=<int-value>β decides how many threads run in parallel when animation output is being produced π§΅. Only used if you actually supplied theanimateparameter β otherwise it's just vibing. The default value is the number of processors apparently available to the JVM.projection=sin|aitoff|aitoff0|car|car0β the sky projection used to display the plot π.
The available options are:
sin: rotatable sphereaitoff: Hammer-Aitoff projection with lon=0 at centeraitoff0: Hammer-Aitoff projection with lon=180 at centercar: Plate Carree projection (lon/lat on Cartesian axes) with lon=0 at centercar0: Plate Carree Projection (lon/lat on Cartesian axes) with lon=180 at center
Real talk, for historical reasons the projections named "aitoff" actually denote the equal-area Hammer-Aitoff projection and not the Aitoff projection itself. So don't come for me. π
The Hammer-Aitoff projection is defined as:
x = [2sqrt(2)/sqrt(1+cos(lat)cos(lon/2))]cos(lat)sin(lon/2)y = [sqrt(2)/sqrt(1+cos(lat)cos(lon/2))]sin(lat)
viewsys=equatorial|galactic|supergalactic|eclipticβ the sky coordinate system used for the generated plot π.
Choosing this value goes hand in hand with the data coordinate system you might specify for plot layers. If you leave it unspecified, a generic longitude/latitude system is used, and all the lon/lat coordinates in your plotted data layers are assumed to be in that same system. But if you do supply a value here, then a sky system must be supplied for each data layer with the datasys parameter, and the coordinates get converted from data to view system before being plotted. β¨
The available options are:
equatorial: J2000 equatorial systemgalactic: IAU 1958 galactic systemsupergalactic: De Vaucouleurs supergalactic systemecliptic: ecliptic system based on conversion at 2000.0
reflectlon=true|falseβ whether to invert the celestial sphere by displaying the longitude axis increasing right-to-left instead of left-to-right πͺ. Displaying the celestial sphere this way is conventional because that's literally what it looks like from the earth π, so the default istrue. Set itfalseif you wanna see the sphere from the outside, looking in. Main character energy either way.grid=true|falseβ iftrue, sky coordinate grid lines get drawn on the plot π. Iffalse, they're simply not there. Gone. Absent. πscalebar=true|falseβ iftrue, a small bar is drawn near the bottom left of the plot, annotated with a distance in degrees, arc minutes or arc seconds, so you can eyeball the size of features on the plot π. It's giving helpful little ruler.labelpos=Auto|External|Internal|...β controls whether and where the numeric annotations of the lon/lat axes show up π·οΈ. The default optionAutousually does the sensible thing, but the other options exist so you can force labelling internally or externally to the plot region, or yeet the numeric labels entirely.
The available options are:
Auto: Uses External or Internal policy according to whether the sky fills the plot bounds or notExternal: Labels are drawn outside the plot boundsInternal: Labels are drawn inside the plot boundsBasic: Labels are drawn somewhere near the grid lineHybrid: Grid lines are labelled outside the plot bounds where possible, but inside if they would otherwise be invisibleNone: Axes are not labelledExternalSys: Like External, but the axes are also labelled with coordinate system axis namesInternalSys: Like Internal, but the axes are also labelled with coordinate system axis names
TheExternalSysandInternalSysoptions use axis descriptions appropriate to the View coordinate system for the current plot; these options may not work well for plots which are all-sky or show a substantial proportion of the sky. So like, careful bestie π«Ά
sex=true|falseβ iftrue, grid line labels are written in sexagesimal notation β±οΈ; iffalse, in decimal degrees. That's it, that's the whole thing.crowd=<number>β determines how closely sky grid lines are spaced π. The default value is1, meaning normal crowding. Bigger values = more grid lines. Smaller values = fewer grid lines. Pick your density, diva β¨.gridcolor=<rrggbb>|red|blue|...β the color of the plot grid π¨, given by name or as a hexadecimal RGB value.
The standard plotting colour names are red, blue, green, grey, magenta, cyan, orange, pink, yellow, black, light_grey, white. However, many other common colour names are also understood β too many to list here, lowkey. The list currently contains those colour names understood by most web browsers, from AliceBlue to YellowGreen, listed e.g. in the Extended color keywords section of the CSS3 standard. π
Alternatively, a six-digit hexadecimal number RRGGBB may be supplied, optionally prefixed by "#" or "0x", giving red, green and blue intensities β e.g. "ff00ff", "#ff00ff" or "0xff00ff" for magenta. π
gridtrans=0..1β transparency of grid lines that may be drawn over the plot π». The range is0(opaque) to1(invisible). This value is1-alpha. So yeah, invisible grid lines are a vibe, I guess β¨.labelcolor=<rrggbb>|red|blue|...β the color of axis labels and other plot annotations π·οΈ, given by name or as a hexadecimal RGB value.
The standard plotting colour names are red, blue, green, grey, magenta, cyan, orange, pink, yellow, black, light_grey, white. However, many other common colour names are also understood β too many to list here tbh. The list currently contains those colour names understood by most web browsers, from AliceBlue to YellowGreen, listed e.g. in the Extended color keywords section of the CSS3 standard. πΈ
Alternatively, a six-digit hexadecimal number RRGGBB may be supplied, optionally prefixed by "#" or "0x", giving red, green and blue intensities β e.g. "ff00ff", "#ff00ff" or "0xff00ff" for magenta. π
gridaa=true|falseβ iftrue, grid lines are drawn with antialiasing β¨. Antialiased lines look smoother, but may take perceptibly longer to draw. Only has any effect for bitmapped output formats. Trade-off city, bestie.texttype=plain|antialias|latexβ determines how to turn label text into characters on the plot π.PlainandAntialiasboth take the text at face value, butAntialiassmooths the characters.LaTeXinterprets the text as LaTeX source code and typesets it accordingly β full math-mode diva behavior π
When you're not using LaTeX, antialiased text usually looks nicer, but can be perceptibly slower to plot. At time of writing, on MacOS antialiased text seems to be required to stop the writing coming out upside-down for non-horizontal text (MacOS java bug). Not us fighting a java bug in the year of our lord π
fontsize=<int-value>β size of the text font in points π€.fontstyle=standard|serif|monoβ font style for text, the main character selection screen π .
The available options are:
standardserifmono
fontweight=plain|bold|italic|bold_italicβ font weight for text π«Ά.
The available options are:
plainbolditalicbold_italic
clon=<degrees>β longitude of the central position of the plot in decimal degrees π. Use it withclatandradius. If the center is not specified, the field of view gets determined from the data. So like, it'll figure itself out.clat=<degrees>β latitude of the central position of the plot in decimal degrees π. Use it withclonandradius. If the center is not specified, the field of view gets determined from the data. Same deal, bestie.radius=<degrees>β approximate radius of the plot field of view in degrees π. Only used ifclonandclatare also specified. It's a package deal, no solo runs.zoomfactor=<number>β sets the amount by which the plot view zooms in or out for each unit of mouse wheel movement π±οΈ. A value of1means mouse wheel zooming has no effect. A higher value means the mouse wheel zooms faster, and a value nearer1means it zooms slower. Values below1are not permitted. That's the law π«leglabelN=<text>β sets the presentation label for the layer with a given suffix π·οΈ. This is the text displayed in the legend, if there is one. Multiple layers may use the same label β in which case they get combined to form a single legend entry. Slay, unified branding β¨
If no value is supplied (which is the default), the suffix itself is used as the label. Convenient π
π
layerN=<layer-type> <layerN-specific-params>
okay bestie listen up, this one is literally the whole point of the command β¨ It picks which kind of plot type you want for layer N. So a plot is made of a plotting surface (that's set up with all those unsuffixed parameters of the plotting command) plus zero or more plot layers. Every layer gets introduced by a parameter named layer<N>, where that "<N>" suffix is a little label that IDs the layer, and it gets tacked onto all the parameter names that configure that layer. And the suffix? Can be ANY string. Even the empty string. Yes, truly, the audacity π
This parameter takes one of these values, and there's more detail in SUN/256 if you want the deep lore:
marksizesizexyskyvectorskyellipseskycorrlink2mark2poly4mark4polygonareacentrallabelarealabelcontourskydensityhealpixskygrid
And every single one of these layer types brings its own list of type-specific parameters to define the deets of that layer, covering some or all of these groups:
- input table parameters (like
inN,icmdN) - coordinate params that refer to input table columns (like
xN,yN) - layer style parameters (like
shadingN,colorN)
Here's the cute part πΈ Every parameter notionally carries that same suffix N β but if the suffix isn't there, the application will go look for a parameter with the same name and no suffix instead. So if a bunch of your layers share a value for some parameter (input table, say), you can just supply it once with an unsuffixed parameter and save yourself from typing the same thing over and over with different suffixes. Living smart, not hard. Periodt π
πͺ datasysN=equatorial|galactic|supergalactic|ecliptic
This sets the sky system used to interpret the data longitude and latitude coordinate values you hand in, for one specific plot layer.
Choosing this value goes hand in hand with viewsys, which sets the view sky system for the entire plot, mmkay. So: if you don't specify either the view system or the data system, plotting happens in a generic sky system that's assumed to be the same for the data and the view. But β and this is important, bestie, don't skip it π β if ANY layer has a supplied data sky system, then there must be an explicitly or implicitly supplied view sky system, because your data input coordinates are getting transformed into it. And if you don't supply it explicitly, the data system just defaults to the same value as the view system. Easy.
The options on the menu are:
equatorial: J2000 equatorial system πgalactic: IAU 1958 galactic system πsupergalactic: De Vaucouleurs supergalactic system β¨ecliptic: ecliptic system based on conversion at 2000.0 π
π«Ά SEE ALSO
stilts(1)β the main character, go read it
If you've got the stilts-doc package installed, the full documentation SUN/256 is sitting right there in HTML format, no cap:
file:///usr/share/doc/stilts/sun256/index.html
π VERSION
STILTS version 3.5.4-debian
Heads up babes: this is the Debian version of Stilts, and it's lowkey missing support for some file formats and network protocols π For the differences, go look at:
file:///usr/share/doc/stilts/README.Debian
π AUTHOR
Mark Taylor (Bristol University) β an absolute legend, fr fr π
and that's the whole page, bestie π this one's from Mar 2017, from the STILTS 3.5.4-debian era, so go forth and plot those skies. slay β¨π
π¦ where this page comes from
- ubuntu stonking: stilts 3.5.4-1 Β· LGPL-2.1-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms