Tähtitiede

Kuinka piirrän galaktiset koordinaatit käyttämällä matplotlibiä ja astropiaa pythonissa?

Kuinka piirrän galaktiset koordinaatit käyttämällä matplotlibiä ja astropiaa pythonissa?

Haluan tehdä millisekunnin pulssien projektion galaktiselle tasolle, aivan kuten tämä Sala et ai. 2004:

Olen kokeillut useita menetelmiä, enkä ole päässyt mihinkään. Tämä on nykyinen koodi, samoin kuin mitä se tuottaa:

tuoda matematiikkaa m tuonti numpy kuin np tuonti csv tuonti matplotlib.pyplot plt tuonti pandoja pd tuonti astropy.koordinaatit koordinaattien tuonti astropy.units as u astropy.io tuoda ascii astropy.coordinates tuoda SkyCoord data = pd.read_csv ( 'galacticwperiod.csv') xarr = np.array (data.iloc [:, 0]) yarr = np.array (data.iloc [:, 1]) eq = SkyCoord (xarr [:], yarr [:], yksikkö = u.deg) gal = eq.galaktinen # tulosta (xarr) #xarr = np.array (df.iloc [:, 0]) #yarr = np.array (df.iloc [:, 1]) #zarr = np.array (df.iloc [:, 2]) #ra = koordinaatti. Kulma (xarr [:], yksikkö = u. tunti) # ra.degree #ra = ra.wrap_at (180 * u.degree) # dec = coord.Angle (yarr [:], unit = u.deg) #print (ra) plt.figure (figsize = (6,5)) fig = plt.figure () ax = kuva add_subplot (111, projektio = "aitoff") plt.plot (gal.l.wrap_at (180 * u.deg), gal.b.wrap_at (180 * u.deg), linestyle = "Ei mitään") ax.scatter (gal.l, gal .b, linestyle = "Ei mitään") # ax.set_facecolor ('xkcd: taistelulaiva harmaa') # fig.patch.set_facecolor ('valkoinen') # ax.tick_params (akseli = 'molemmat', mikä = "major", etiketin koko = 10) # ax.grid (väri = 'b', linestyle = "solid") fig.show () # plt.savefig ('millisecondcoloraitoff.png ">

Olen melkein varma, että tämä on väärin, koska ne eivät ole jakautuneet pitkin galaktista tasoa, minkä niiden pitäisi olla. Käyttämäni tiedot ovat peräisin ATNF Pulsar -luettelosta.

Nämä ovat sivustoja, joita olen jo tarkastellut viitteenä:

https://stackoverflow.com/questions/33105898/astropy-matplotlib-and-plot-galactic-coordinates https://astropy4scipy2014.readthedocs.io/_static/notebooks/06_Celestial_Coordinates_solutions.html

Kaikenlainen apua tässä asiassa olisi erittäin arvostettu.


Tämä koodi lukee koordinaatit päiväntasaajan (ra, dec) ja muuntaa ne galaktiseksi (l, b):

eq = SkyCoord (xarr [:], yarr [:], yksikkö = u.deg) gal = ekv. galaktinen

Tiedoston 'galacticwperiod.csv' sisältö on jo galaktisissa koordinaateissa, eikä sitä pitäisi muuttaa. Jotain tällaista voi antaa parempia tuloksia:

gal = SkyCoord (xarr [:], yarr [:], kehys = "galaktinen", yksikkö = u.deg)

Toinen asia on, että pyplotin maantieteelliset ennusteet näyttävät odottavan kulmia radiaaneina. Tämä koodi:

plt.subplot (111, projektio = "aitoff") plt.grid (True) plt.sironta (gal.l.wrap_at ('180d'). radian, gal.b. radian)

tuottaa tämän juoni:


osoitteesta astropy.io tuonti sopii tähystimestä tuonti wcs tuonti matplotlib.pyplot muodossa plt x = fit.open ('f160w_noopt_drz.fits') ['SCI'] y = wcs.WCS (x.header) plt.subplots (figsize = ( 8, 8), subplot_kw = {'projektio': y}) plt.imshow (xdata, cmap = "viridis", alkuperä = "alempi", vmin = 0, vmax = 10) plt.show ()

Tarkastellessani juoni sinulla huomaa, että "pylväissä" on pisteitä. Pitoisuuden tulisi olla päiväntasaajaa pitkin ja etenkin kohti galaksin keskustaa.

Luulen, että sinulla on akselisi vaihdettu, joten galaktisen päiväntasaajan pisteitä piirretään pystysuoraa "päämeridiaania" pitkin.


Tähtitiede Pythonissa¶

Tähtitiede Pythonissa on johdanto tähtitieteellisen tiedon käsittelemisen työkaluihin ja käytäntöihin. Käsiteltyjä aiheita ovat:

Kirjoitetaan kyselyitä, jotka valitsevat ja lataavat tietoja tietokannasta.

Astropy-taulukkoon tai Pandas DataFrameen tallennettujen tietojen käyttäminen.

Työskentely koordinaattien ja muiden määrien kanssa yksiköillä.

Tietojen tallentaminen eri muodoissa.

Suoritetaan tietokantaliittotoimintoja, jotka yhdistävät useiden taulukoiden tietoja.

Tietojen visualisointi ja julkaisun laatulukujen valmistelu.

Jatkuvana esimerkkinä toistamme osan analyysistä tuoreessa artikkelissa Adrian M. Price-Whelanin ja Ana Bonacan "Off the beated path: Gaia paljastaa GD-1-tähdet päävirran ulkopuolella".

Tämä materiaali on kehitetty yhteistyössä The Carpentriesin ja tähtitieteen opetussuunnitelman kehittämiskomitean kanssa, ja sitä tuetaan American Institute of Physics -rahoituksella American Astronomical Societyn kautta.

Olen kiitollinen valiokunnan jäsenten - Azalee Bostroemin, Rodolfo Montezin ja Phil Rosenfieldin - sekä Erin Beckerin, Brett Morrisin ja Adrian Price-Whelanin panoksesta.

Tämän materiaalin alkuperäinen muoto on sarja Jupyter-muistikirjoja. Alla olevien linkkien avulla voit lukea muistikirjat NBViewerissä tai käyttää niitä Colabissa. Jos haluat käyttää muistikirjoja omassa ympäristössäsi, voit ladata ne tästä arkistosta ja asentaa ympäristösi noudattamalla alla olevia ohjeita.

Tämä materiaali on saatavana myös kirvesmiehen oppituntien muodossa, mutta sinun on tiedettävä, että nämä versiot saattavat poiketa toisistaan ​​tulevaisuudessa.

Edellytykset

Tämän materiaalin pitäisi olla saatavilla Pythonin peruskokemusta tuntevien ihmisten saatavilla, mutta ei välttämättä käyttämiämme kirjastoja, kuten Astropy tai Pandas. Jos tiedät Python-luettelot ja sanakirjat ja osaat kirjoittaa funktion, joka ottaa parametrit ja palauttaa arvon, sen pitäisi riittää.

Oletamme, että olet perehtynyt tähtitieteeseen perustutkinnon suorittaneilla, mutta emme oleta erikoistietoa käyttämistämme aineistoista tai analyysimenetelmistä.

Tämä muistikirja osoittaa seuraavat vaiheet:

Yhteyden muodostaminen Gaia-palvelimeen,

Tietokannan ja sen sisältämien taulukoiden tietojen tutkiminen

Kyselyn kirjoittaminen ja lähettäminen palvelimelle ja lopuksi

Vastauksen lataaminen palvelimelta Astropy-taulukkona.

Tämä muistikirja alkaa esimerkillä, joka tekee "kartion haun", eli se valitsee tähdet, jotka näkyvät taivaan pyöreällä alueella.

Sitten valitsemme tähtiä GD-1: n läheisyydessä:

Käytä Määrä-objekteja edustamaan mittauksia yksiköillä.

Muunna koordinaatit kehyksestä toiseen Gala-kirjastolla.

Käytä ADQL-avainsanoja POLYGON, CONTAINS ja POINT valitaksesi tähtiä, jotka kuuluvat monikulmaiseen alueeseen.

Lähetä kysely ja lataa tulokset.

Tallenna tulokset FITS-tiedostoon.

Tässä ovat tämän muistikirjan vaiheet:

Luemme takaisin edellisen muistikirjan tulokset, jotka tallensimme FITS-tiedostoon.

Sitten muunnamme koordinaatit ja oikean liiketiedon ICRS: stä takaisin GD-1: n koordinaattikehykseen.

Laitamme nämä tulokset Pandas DataFrame -kehykseen, jota käytämme valitsemaan tähtiä lähellä GD-1: n keskiviivaa.

Piirrämme näiden tähtien oikean liikkeen, tunnistamme oikean liikkeen alueen tähdille, jotka todennäköisesti ovat GD-1: ssä.

Lopuksi valitsemme ja piirrämme tähdet, joiden oikea liike on kyseisellä alueella.

Tässä ovat tämän muistikirjan vaiheet:

Käyttämällä edellisen muistikirjan tietoja tunnistamme oikean liikkeen arvot tähdille, jotka todennäköisesti ovat GD-1: ssä.

Sitten laadimme ADQL-kyselyn, joka valitsee tähdet oikean liikkeen perusteella, jotta voimme ladata vain tarvitsemamme tiedot.

Näemme myös, kuinka tulokset kirjoitetaan CSV-tiedostoon.

Tämä mahdollistaa suuremman taivaan alueen hakemisen yhdellä kyselyllä.

Tässä ovat tämän muistikirjan vaiheet:

Lataamme uudelleen ehdokkaat, jotka tunnistimme edellisessä muistikirjassa.

Sitten suoritamme kyselyn Gaia-palvelimella, joka lataa ehdokastaulukon ja valitsee JOIN-toiminnon avulla tähtitieteen fotometriatiedot.

Kirjoitamme tulokset tiedostoon käytettäväksi seuraavassa muistikirjassa.

Tässä ovat tämän muistikirjan vaiheet:

Ladataan tiedot edellisestä muistikirjasta ja laaditaan väri-suuruuskaavio.

Sitten määritämme kaaviossa polygonin, joka sisältää tähtiä odotetulla fotometrialla.

Sitten yhdistämme fotometriatiedot ehdokas tähtien luetteloon ja tallennamme tuloksen Pandas DataFrame-kehykseen.

Tässä ovat tämän muistikirjan vaiheet:

Aloitamme edellisen muistikirjan kuvasta ja lisäämme merkintöjä tulosten esittämiseksi selkeämmin.

Näemme useita tapoja muokata lukuja houkuttelevammiksi ja tehokkaammiksi.

Lopuksi näemme, kuinka tehdä kuvio, jossa on useita paneeleja tai alakohteita.

Asennusohjeet

Jos aiot käyttää näitä muistikirjoja Colabissa, sinun ei tarvitse asentaa mitään. Voit käyttää ja avata edellisen osan linkkejä. Jos haluat käyttää muistikirjoja omassa ympäristössäsi, sinun on ehkä tehtävä joitain asetuksia.

Sinun on asennettava Python, Jupyter ja joitain muita kirjastoja. Jos sinulla ei vielä ole Jupyteria, suosittelemme asentamaan Anacondan, joka on Python-jakelu, joka sisältää kaiken mitä tarvitset työpajakoodin suorittamiseen.
Se on helppo asentaa Windowsiin, Maciin ja Linuxiin, ja koska se suorittaa käyttäjätason asennuksen, se ei häiritse muita Python-asennuksia.

Jos valitset Python 2 tai 3, valitse Python 3.

Nyt on kaksi tapaa saada tarvitsemasi kirjastot:

Vaihtoehto 1: Voit asentaa ne olemassa olevaan Conda-ympäristöön.

Vaihtoehto 2: Voit luoda uuden Conda-ympäristön.

Kirjastojen asentaminen olemassa olevaan ympäristöön on yksinkertaisempaa, mutta jos käytät samaa ympäristöä monissa projekteissa, siitä tulee iso, monimutkainen ja altis pakettiristiriidoille.

Vaihtoehto 1: Kirjastojen asentaminen olemassa olevaan Conda-ympäristöön

Suurin osa tarvitsemistamme kirjastoista voidaan asentaa Condan avulla suorittamalla seuraavat komennot päätelaitteessa. Jos käytät Mac- tai Linux-konetta, sinun pitäisi pystyä käyttämään mitä tahansa päätelaitetta.
Jos käytössäsi on Windows, sinun on ehkä käytettävä Anaconda-kehotetta, jonka löydät Käynnistä-valikosta.

Vaihtoehto 2: Uuden Conda-ympäristön luominen

Uuden Conda-ympäristön luomiseksi sinun on ladattava ympäristötiedosto arkistostamme. Macissa tai Linuxissa voit ladata sen komentorivillä wget:

Varmista pääte- tai Jupyter-kehotteessa, että olet kansiossa, johon environment.yml on tallennettu, ja suorita:

Aktivoi sitten juuri luomasi ympäristö suorittamalla:

Suorita Jupyter

Jos et ole perehtynyt Jupyteriin, voit suorittaa opetusohjelman napsauttamalla tätä. Valitse sitten Kokeile Classic Notebookia. Se avaa muistikirjan, jossa on ohjeet aloittamiseen. Tai voit käyttää tätä johdantokirjaa Colabissa.

Ennen kuin käynnistät Jupyterin, lataa tämä muistikirja, joka sisältää koodia ympäristön testaamiseksi.

Tai voit ladata wget-komennon komentoriviltä seuraavasti:

Jupyterin pitäisi käynnistää oletusselain tai avata välilehti olemassa olevassa selainikkunassa. Jos ei, Jupyter-palvelimen tulisi tulostaa käyttämäsi URL-osoite. Esimerkiksi kun käynnistän Jupyterin, saan

Tässä esimerkissä URL on http: // localhost: 8888.
Kun käynnistät palvelimesi, saatat saada toisen URL-osoitteen. Mikä se on, jos liität sen selaimeen, sinun pitäisi nähdä kotisivu, jossa on luettelo hakemistoista.

Avaa nyt lataamasi muistikirja ja suorita tuontilausekkeita sisältävät solut. Jos ne toimivat ja et saa virheilmoituksia, olet kaikki asetettu.

Jos saat virheilmoituksia puuttuvista paketeista, voit asentaa tarvitsemasi paketit Condan tai pipin avulla.

Jos sinulla on ongelmia näiden ohjeiden kanssa, ilmoita siitä meille ja teemme korjaukset. Onnea!


Esimerkki koordinaattien piirtämisestä all-sky-kartalle # 1860

Olisi mukavaa lisätä dokumentaatioon esimerkki siitä, kuinka lähdeluettelo (astropy.coordinates-muodossa) piirretään taivaalle Matplotlib Aitoff -projektion avulla:

Tällä hetkellä tämä on hieman sekava, koska jos c on astropy.coordinates-koordinaattiobjekti, c.ra.radian palauttaa arvon välillä 0 - 2pi, mutta matplotlib haluaa -pi: n pi: ksi. Tämä tekee koodista hieman sekava:

Joten joko meidän pitäisi dokumentoida se, tai voimme yrittää löytää puhtaamman tavan tehdä tämä tai ehkä jopa molemmat :)

cc @mdboom (matplotlib-näkökulmasta)

Teksti päivitettiin onnistuneesti, mutta havaittiin näitä virheitä:

Emme voi muuttaa tehtävää ongelmaksi tällä hetkellä. Yritä uudelleen.

Ongelma luotiin onnistuneesti, mutta emme voi päivittää kommenttia tällä hetkellä.


Koordinaattien ja taulukon käyttäminen luetteloiden ja # 182 vastaavuuteen ja vertailuun

Viimeisen osan lopussa totesimme, että HCG7 on SDSS-kuvantamistutkimuksessa, joten se tarkoittaa, että voimme käyttää alla olevia soluja lataamaan luetteloita objekteista suoraan SDSS: stä. Myöhemmin sovitamme tämän luettelon toiseen luetteloon, joka kattaa saman kentän, jolloin voimme tehdä juonia käyttämällä kahden luettelon yhdistelmää.

Pääset SDSS SQL -tietokantaan käyttämällä astroquery-liitännäispakettia. Tämä vaatii Internet-yhteyden ja toimivan astroquery-asennuksen. Jos sinulla ei ole näitä, voit vain ohittaa kaksi solua, koska tiedostot toimitetaan arkiston mukana. Astroquery-versiostasi riippuen se voi myös antaa varoituksen, jonka sinun on voitava ohittaa turvallisesti.

astroquery-kyselyt antavat meille takaisin astropy.table.Table-objektin. Voisimme vain työskennellä tämän kanssa suoraan tallentamatta mitään levylle, jos haluaisimme. Mutta tässä käytetään kykyä kirjoittaa levylle. Tällä tavalla, jos lopetat istunnon ja palaat myöhemmin, sinun ei tarvitse suorittaa kyselyä toisen kerran.

(Huomaa, että tämä ei onnistu, jos ohitit viimeisen vaiheen. Älä huoli, voit vain siirtyä seuraavaan soluun Table.read-sovelluksella ja käyttää tämän taulukon opetusohjelmassa olevaa kopiota.)

Jos sinulla ei ole Internetiä, voit lukea taulukon pythoniksi suorittamalla alla olevan solun. Mutta jos teit astroquery-vaiheen yllä, voit ohittaa tämän, koska taulukko on jo muistissa sdss-muuttujana.

Ok, joten meillä on luettelo esineistä, jotka saimme SDSS: ltä. Oletetaan nyt, että sinulla on oma luettelo esineistä samalla kentällä, jonka haluat sovittaa tähän SDSS-luetteloon. Tässä tapauksessa käytämme 2MASS: sta otettua luetteloa. Ladataan ensin tämä luettelo pythoniin.

Tarvitsemme nyt SkyCoord-esineitä sovittamiseksi. Meidän on rakennettava nämä ladatuista taulukoista, mutta käy ilmi, että se on melko suoraviivaista: tartumme RA: n ja hajotamme sarakkeet taulukosta ja toimitamme ne SkyCoord-rakentajalle. Katsotaan ensin tarkastella taulukoita nähdäksesi, mitä kaikkea niissä on.

& ltTaulukon pituus = 679 & gt
radecugriz
kellua64kellua64kellua64kellua64kellua64kellua64kellua64
10.0792309541.0541062986519.8055719.0724318.9631818.6326118.71358
9.679464800650.581059933117.7473416.449815.8584815.5207515.25987
10.04669624690.90501301059821.4754218.9369517.4852916.4804515.94561
9.67805190790.97806309260519.8204518.1759817.2715216.8299216.47521
10.0015266450.98908101661120.9418818.5237117.4565117.0236316.76776
10.07770613490.72571170125821.8542719.2476617.715116.2682615.51393
10.07722027270.82920784869119.5477617.8546816.86116.3337715.94939
9.556627390350.95884456094425.0304422.2414420.8805220.5575220.3038
9.657111485210.76581206192718.8725717.9054617.5932717.3751817.22455
9.981369623150.88157591084421.6984420.3726419.3368518.9992318.58068
. . . . . . .
9.619023345680.57342017159222.6891921.5972320.6181219.8489419.4082
9.982895891030.82817364787317.5757616.4028415.9939815.8482615.80337
9.813967358081.0738000838922.4218521.8323721.523321.6585422.50206
9.924504270080.96474911896820.8800118.1742416.7539415.7606115.25564
9.565661520510.68928660991420.7467318.4721617.4608717.052916.8133
9.799633902060.86396947917730.6356716.5592615.6021215.3020815.59649
9.507353059051.1735186643619.6059318.4245517.9748817.8389517.74746
9.511934585960.83717629113222.0572919.7965518.2524117.5240117.07819
9.842099124840.59164736116117.5310516.0860915.7728215.4375315.38273
9.960580941941.0985373859122.8930620.9107619.4868518.8803518.52977
& ltTable masked = Todellinen pituus = 23 & gt
nimitysradecr_k20fej_m_k20fej_msig_k20fej_flg_k20feh_m_k20feh_msig_k20feh_flg_k20fek_m_k20fek_msig_k20fek_flg_k20fek_bak_phisup_basup_phir_seuraavaj_m_seuraavaj_msig_exth_m_exth_msig_extk_m_seuraavak_msig_extcc_flgdistkulma
degdegkaarimagmag magmag magmag deg degkaarimagmagmagmagmagmag kaarideg
str16kellua64kellua64kellua64kellua64kellua64int64kellua64kellua64int64kellua64kellua64int64kellua64int64kellua64int64kellua64kellua64kellua64kellua64kellua64kellua64kellua64str1kellua64kellua64
00402069+005250810.0862180.8807989.413.8350.068013.010.086012.5880.08900.8700.823518.6213.6320.08812.7440.10412.3980.1050972.12061191.538952
00395984+01035459.999351.0651412.912.9250.035012.1830.042011.890.06700.8350.74035.912.4690.04811.910.06611.5220.0870916.92763645.951861
00401849+004944810.0770620.829136.014.9180.086014.1130.107013.7140.10300.6-151.09011.3514.6310.12113.9530.16913.5250.1610962.489231102.73149
00395277+00571249.9699070.9534725.314.7020.049014.2480.069013.8990.09500.6-600.44-5010.5914.620.14414.150.29613.730.20601.13644466.93659
00401864+004724510.0777040.7901437.615.5850.134115.0030.18114.0490.14210.5300.463014.4814.9770.13814.8550.30313.6530.1801004.982128110.53147
00393485+00513559.8952190.85988239.311.4150.031310.7550.044310.5140.06830.6-300.7-6092.2911.4150.01810.1550.0549.9760.0850301.813395109.639102
00392964+01034959.8735261.06376910.914.4630.065013.6180.067013.2580.09100.4550.286020.3514.20.08613.3630.09113.1010.1330665.30141518.051526
00403343+004907910.1392930.8188655.015.4840.150------13.970.13701.0901.09010.0515.0350.18314.7250.013.6540.18901189.207905102.088788
00393319+00355059.8883050.59738111.513.1560.033012.5090.043012.0730.05900.6-550.52-4021.6413.0260.0412.2470.04611.9780.06501078.11027166.0785
. . . . . . . . . . . . . . . . . . . . . . . . . . .
00391798+00415889.8249360.6996876.115.6850.168014.890.191014.0030.15501.0901.09011.415.6770.31214.4150.22613.5680.190678.863209177.360117
00384796+00345729.6998580.5825785.114.9250.077014.2240.114013.5360.07901.0901.09010.214.8390.13314.1110.19213.4610.13701176.842625200.856597
00390392+00505799.7663450.8494195.014.8950.07014.2380.087013.8340.1101.0901.09010.0514.7060.10714.0330.13213.750.1870227.201453232.24689
00391339+00515089.8057970.86413552.810.3620.01409.6310.01709.3340.02400.3-150.4-1575.0210.2790.0159.5270.0169.2470.023093.990015203.598476
00391786+00544589.8244180.91274327.911.0820.016010.3840.022010.1470.03200.550.7542.7510.9140.01810.2510.02110.0310.03093.59655518.308033
00385879+00572699.7449710.9574785.015.5350.122014.7960.145014.2780.16501.0901.09010.0515.5350.12214.6230.22714.1470.2690358.163568314.246475
00391879+00533089.8283030.89190915.413.0440.047012.4120.063012.0770.09400.8600.746523.6212.7550.04812.2830.07211.7130.096045.54456272.287562
00391213+01024089.800551.0446915.015.5680.126015.0470.181014.3560.17601.0901.09010.0515.2950.18115.0470.18114.0670.250566.696375354.276982
00383990+01044429.6662681.0789685.315.2550.108014.2320.121013.8730.11301.0901.09010.4415.1510.1813.8120.14913.5520.1550873.946372321.851314
00384916+00502129.7048720.8392445.115.0750.088014.6510.17013.8040.10101.0901.09010.215.0530.15914.6510.1713.6820.1710437.740484246.331036

OK, näyttää siltä, ​​että heillä molemmilla on ra- ja dec-sarakkeet, joten meidän pitäisi pystyä käyttämään sitä SkyCoord s: n tekemiseen.

Saatat ensin ajatella, että sinun on luotava erillinen SkyCoord joka rivi taulukossa, kun otetaan huomioon, että tähän asti kaikki tekemämme SkyCoordit olivat vain yhtä pistettä. Voit tehdä tämän, mutta se tekee koodistasi paljon hitaamman. Sen sijaan SkyCoord tukee taulukot koordinaattiarvoista - välität vain taulukon kaltaisia ​​syötteitä (taulukon määrä s, merkkijonoluettelot, taulukon sarakkeet jne.), ja SkyCoord tekee kaikki toiminnot mielellään elementtiviisaasti.


FITS-tiedoston luominen tyhjästä¶

Jos haluat luoda FITS-tiedoston alusta alkaen, sinun on aloitettava luomalla HDU-objekti:

ja voit sitten täyttää tiedot ja otsikkomääritteet haluamallasi tiedolla:

Huomaa, että tietojen asettaminen täyttää otsikon automaattisesti perustiedoilla:

ja sinun ei koskaan tarvitse asettaa manuaalisesti otsikkoavainsanoja, kuten NAXIS, NAXIS1 ja niin edelleen. Voimme sitten asettaa ylätunnisteiden avainsanat:

ja voimme sitten kirjoittaa FITS-tiedoston levylle:

Jos tiedosto on jo olemassa, voit korvata sen seuraavasti:


Astropiaoppaat: Opi tekemään tavallisia astrotehtäviä astropian ja Pythonin avulla

Tämä on vieraileva viesti Adrian Price-Whelanilta (@adrianprw), joka on NSF: n jatko-opiskelija Columbian yliopistossa. Adrian työskentelee vuorovesivirroissa ja galaktisessa dynamiikassa, on avoimen lähdekoodin harrastaja, Python-kehittäjä ja soittaa bassoa kuolinsäde-arkkitehdille. Hän on myös ohjaaja SciCoder- ja Python-työpajoissa AAS-kokouksissa.

Astropy on yhteisössä kehitetty Python-paketti, jonka tarkoituksena on tarjota suuri osa tähtitieteen ja astrofysiikan tutkimukseen tarvittavista ydintoiminnoista ja yleisistä työkaluista (esim. IRAF, idlastro). Pakkausten ja alipakettien ominaisuuksien ja niiden vuorovaikutuksen esittelemiseksi julkistamme Astropy-oppaat. Nämä opetusohjelmat on tarkoitettu sellaisten ihmisten saataville, joilla on vähän tai ei lainkaan python-kokemusta, ja toivomme, että ne ovat hyödyllisiä harjoituksia niille, jotka ovat vasta aloittaneet ohjelmoinnin, Pythonin ja / tai Astropy-paketin. (Oppaat täydentävät Astropy-dokumentaatiota, joka tarjoaa yksityiskohtaisempia ja täydellisempiä tietoja paketin sisällöstä sekä lyhyitä esimerkkejä koodin käytöstä.)

Astropy-oppaat käyttävät astronomisessa datankäsittelyssä ja -analyysissä yleisiä ohjelmistotehtäviä. Esimerkiksi "Lue ja piirtää luettelotiedot tekstitiedostosta" -opetusohjelma osoittaa astropy.io.ascii-sovelluksen käyttämisen ASCII-tietojen, astropy.koordinaattien ja astropy.yksiköiden lukemiseen ja RA: n muuntamiseen desimaalilukuina, ja käyttää sitten matplotlibiä värin suuruuskaavion tekemiseen lähteen sijaintien taivaalle.

Useat opetusohjelmat osoittavat myös, kuinka matplotlibiä käytetään 2D-kuvien tekemiseen erilaisilla värikartoilla, venytyksillä ja väripalkkeilla.

Tähän mennessä olemme tehneet viisi opetusohjelmaa:

Olemme tyytyväisiä palautteeseen ja parannuksiin näihin oppaisiin Githubin Astropy Tutorials -julkaisun kautta. Jos löydät kirjoitusvirheen tai haluat selventää tekstiä, luo joko ongelma tai tee muutos itse ja lähetä vetopyyntö suoraan arkistoon. Opetusohjelmia koskevat kysymykset ja / tai kommentit ovat tervetulleita astropy-dev-postituslistalle.

Jos olet kiinnostunut lähettämään IPython-muistikirjan opetusohjelmaksi, tarkista README tai ota yhteyttä kehittäjien luetteloon. Lisäksi, jos sinulla on idea opetusohjelmasta tai opetuspyynnöstä, lähetä viesti kehittäjien luetteloon tai jätä kommentti alla. Jos haluat osallistua tähän pyrkimykseen, mutta tarvitset inspiraatiota, tutustu avoimiin kysymyksiin. Tämä on yhteistyö, ja etsimme vastauksia ja ideoita kaltaisiltasi käyttäjiltä!

Jos käytät Astropy-ohjelmaa suoraan tai riippuen toisesta paketista, muista sisällyttää seuraava kuittaus paperien loppuun:

Tässä tutkimuksessa hyödynnettiin Astropiaa, yhteisössä kehitettyä tähtitieteen Python-ydinpakettia (Astropy Collaboration, 2013).

missä “(Astropy Collaboration, 2013)” on Astropy-paperi.

Joskus tähtitiede katoaa koodiin & # 8230, esim. RA: n tulisi kasvaa vasemmalle ensimmäisessä ja kolmannessa luvussa. Olemme maailmankaikkeuden sisällä, emme ulkopuolella!

Linkki ensimmäiseen opetusohjelmaan on rikki, se viittaa sen sijaan 5. opetusohjelmaan.


Mw-juoni 0,9,0

mw-plot kätevä python-paketti piirtämiseen kasvot / reunat-maitotie / skymapille matplotlibillä (https://matplotlib.org/) staattisille juonille tai bokehille (https://bokeh.org/) interaktiivisille juoni (kehitettävä bokeh-moduuli).

Voit asettaa käyrän keskikohdan ja säteen mihin tahansa maitotien galaksikuvaan galaktisilla tai galaktosentrisillä koordinaateilla.

Molemmat MW_bg_annotate.jpg ja MW_bg_unannotate.jpg on muokannut kuvasta NASA / JPL-Caltech / R. Hurt (SSC / Caltech) Molemmat kuvat ovat 5600x5600px ja resoluutio 24,2 valovuotta pikseliä kohti.

MW_edgeon_edr3_unannotate.jpg muokkaa kuvasta ESA / Gaia / DPAC. Kuva on 6500x3250px, resoluutio 15,38 valovuotta per pikseli, jonka ESA Gaia eDR3 tuottaa.

mw_plot täyttää pikselit alueelle valmiiksi koottujen kuvien ulkopuolella. Ei kuittausta mw_plot vaaditaan, jos luot tontteja ei-kaupalliseen julkaisuusi, mutta sinä on kuitattava taustakuvien alkuperä edellä.


SkyCircleRegion-matplotlib-juoni # 76

Kuten # 74: ssä kerrotaan, on ongelma, aluetta ei piirretä oikein.
@Joleroi ja minä skripti näyttää hyvältä, joten emme tiedä mikä vikaa.

@astrofrog tai @larrybradley tai joku muu - jos voisit katsoa, ​​se olisi hienoa!

Teksti päivitettiin onnistuneesti, mutta havaittiin näitä virheitä:

Emme voi muuttaa tehtävää ongelmaksi tällä hetkellä. Yritä uudelleen.

Ongelma luotiin onnistuneesti, mutta emme voi päivittää kommenttia tällä hetkellä.

Larrybradley kommentoi 18. marraskuuta 2016

Piirtämiskripti näyttää myös minulle hyvältä, mutta juoni on väärä. Katsomalla koodia ja juoni tuloksia, minä ajatella ongelma on jossakin WCSAxes-koneiden muutoslaitteessa. Koska piirretyt alueet ovat liian pieniä, yritin muuttaa sädettä manuaalisesti, mutta tajusin nopeasti, että se ei toimi (huonot kohdat näkyvät myös muodossa). Näyttää siltä, ​​että vääristynyt / muunnettu alue koko ja muoto ovat väärässä. @strofrog?

Astrofrog kommentoi 21. marraskuuta 2016

Minun on tutkittava tätä - ei ole aikaa tänään, mutta näyttää heti

Adonath kommentoi 25. marraskuuta 2016 & # 8226

@cdeil @joleroi
Myös piirtokirjoituksessa on vika. Taivaan koordinaatit tulisi laskea käyttämällä esimerkkitietojoukon WCS: ää eikä uudesta säännöllisestä ruudukosta (katso täältä).

Kaaviosta voidaan nähdä, että alueet eivät ole enää ympyrän muotoisia, koska tietojoukon wcs: ssä on määritelty projektio. Oletan SkyCoord.from_pixel (. Wcs = wcs) -palvelun käyttämisen ja oikean WCS: n läpäisemisen pitäisi korjata ongelma alueella olevien tai ei sisällä olevien pikselien kanssa.

Cdeil kommentoi 26. marraskuuta 2016

@adonath - En usko. Minulle näyttää silti siltä, ​​että ympyrä on yksinkertaisesti piirretty väärin.

Kyllä, voisi luoda SkyCoordsin PixCoordsista, mutta se ei muuta SkyCirclen piirtämistä väärin.
Huomaa, että ympyrät ovat todella vääristyneitä outolla tavalla, mikä ei ole yhdenmukaista sen kanssa, että se on AIT-projektio, jonka vertailupiste on kuvan keskellä.

@adonath - Luuletko edelleen, että komentosarjassa on vika? Jos kyllä, voisitko korjata sen ja lähettää uuden version ja tulosteen juoni jonnekin, jotta voin ymmärtää tarkalleen, mikä oli vialla?

Joleroi kommentoi 26. marraskuuta 2016

@adonath ja minä keskustelimme käsikirjoituksesta perjantaina.

Kyllä, voisi luoda SkyCoordsin PixCoordsista, mutta se ei muuta SkyCirclen piirtämistä väärin.

Aivan, se ei muuta mitään. Ainoa ero on, että myös koordinaatit (kuvaajan pisteet) vääristyvät ja todellakin joitain pisteitä ei ole enää merkitty väärin.

Mikä todella korjaa ongelman, on muuttaa muutos galaktiseksi SkyCirclen as_patch-menetelmässä

En tiedä onko yleinen tapa käsitellä tätä muunnoksissa, mutta ehkä se ei ole välttämätöntä, koska @astrofrog korjasi ongelman # 77

Cdeil kommentoi 28. marraskuuta 2016

@joleroi - Kiitos huomautuksesta, että SkyCircleRegion.as_patch on kovakoodattu transform = ax.get_transform ('icrs'). Tämä tarkoittaa, että se on täysin rikki ja se voidaan korjata vaihtamalla muotoon ax.get_transform ('maailma')?

@astrofrog - Kohdassa # 77 sinulla on edelleen kovakoodattu transform = ax.get_transform ('icrs'). Mutta luulen, että siellä käytävä keskustelu on suunnattu SkyCircleRegion.as_patchin poistamiseen kokonaan?

Adonath kommentoi 28. marraskuuta 2016 & # 8226

@cdeil Kyllä, ehdottamani muutos ei korjaa vääristynyttä ympyrää, mutta se tekee piirretyt koordinaatit tasaamaan muunnoksen kanssa, johon ympyrät piirretään. Tämä korjaa ongelman väärin merkittyillä pisteillä.

Kovakoodatun muunnoksen = ax.get_transform ('icrs') vuoksi oletan, että ympyrä on itse asiassa piirretty oikein ja näkemämme vääristymä on galaktisen keskuksen icrs-järjestelmän 'luonnollinen' vääristymä.

Tässä on juoni havainnollistamiseksi:

Valkoinen viiva merkitsee galaktisen tason.

Joten aion poistaa as_patch () -metodit ja antaa käyttäjien määritellä matplotlib-korjaustiedostot.

Astrofrog kommentoi 28. marraskuuta 2016

Kovakoodattu ICRS ei ole ongelma btw: ssä, koska myös SkyCoord muunnetaan aina ensin ICRS: ksi.

Cdeil kommentoi 28. marraskuuta 2016

Kovakoodattu ICRS ei ole ongelma btw: ssä, koska myös SkyCoord muunnetaan aina ensin ICRS: ksi.

Uskon sen olevan!?
Se johtaa väärin vääristyneisiin piireihin, koska käytät väärää WCS: ää, eikö?

Adonath kommentoi 28. marraskuuta 2016

@astrofrog Pelkkä selvennykseni asiaan: Luulen, että jos piirrät ympyrän galaktiseen keskukseen icrs-koordinaattijärjestelmän avulla (tarkoitan paitsi ympyrän keskipisteen muuttamista), tulos on täsmälleen sellainen, jonka näimme osoitteessa http: / /astropy-regions.readthedocs.io/en/latest//plot_compound.png tai tekemäni juoni. Tulos vääristyy koordinaattijärjestelmän sisäisen vääristymisen takia. Joten vain kahden koordinaattijärjestelmän sekoitus johtaa odottamattomaan tulokseen.

Astrofrog kommentoi 28. marraskuuta 2016

@adonath - vain selvyyden vuoksi, minä ajatella juoni, jonka näytit edellisessä komennossasi, on oikeastaan ​​oikea (toisin kuin aiemmin nähty piirtokysymys). Jos muutat vetopyynnössäni olevan koodin, että sinulla on galaktinen ICRS: n sijasta, olen melko varma, että tulos on sama (näyttää siltä, ​​että käyttämäsi projektio ei ole keskitetty Galaktiseen keskukseen, joten sisäisiä pallomaisia ​​vääristymiä odotetaan riippumatta koordinaattijärjestelmästä?)

Adonath kommentoi 28. marraskuuta 2016

@astrofrog Tässä on koodi, jota käytin tuottamaan juoni:

Joten projektio on keskitetty galaktiseen keskukseen (annettu vain icrs-koordinaateina). Ja näyttää siltä, ​​että tämä on sellainen projektio, jonka ax.get_transform ('icrs') palauttaa?

Astrofrog kommentoi 28. marraskuuta 2016 & # 8226

@adonath - ah kyllä, koodi on väärä, anteeksi sekaannuksesta. Käytä SphericalCirclea ympyrän sijasta kuten kohdassa 77

Adonath kommentoi 28. marraskuuta 2016

@astrofrog Hm, mutta edellisessä kommentissani julkaisemani koodi antaa täsmälleen odotetun tuloksen. Ympyrän säde on 5 astetta ja se on vääristynyt (siinä asennossa) koordinaatistojärjestelmän mukaan, jota käytän piirtämiseen. Ja tämä on riippumatonta siitä, piirränkö ympyrän vai suorakulmion vai monikulmion, joten en ymmärrä kuinka SpericalCircle tekisi eron siinä tapauksessa.

Sama toimii päinvastoin: jos lisätään piirrokseeni ympyrä, joka on piirretty galaktiseen koordinaattijärjestelmään, ympyrä ei ole vääristynyt, kuten odotan koordinaatistosta tässä paikassa:

Galaktisella koordinaattimuunnoksella piirretyt ympyrät näytetään katkoviivoin.

Cdeil kommentoi 28. marraskuuta 2016

Olen aloittanut uuden PR: n # 85: ssä ja yritän saada sen valmiiksi nopeasti huomenna (ei paljon aikaa tällä viikolla).
Yritän tarkistaa kaikki keskustelut ja tehdä asiakirjoista esimerkkejä täällä lähetetyistä mukavista esimerkeistä (kuten viimeinen @adonathilta).

Cdeil kommentoi 30. marraskuuta 2016

Yhdistin juuri # 85, mikä korjaa tämän ongelman.

Täällä on paljon hyvää keskustelua ja esimerkkejä, joiden pitäisi johtaa muihin koodi- tai asiakirjaparannuksiin. Joten tästä syystä pidän asian avoimena ja siirrän sen 0,3 virstanpylvääseen.

Astrofrog kommentoi 1. joulukuuta 2016

Ympyrän säde on 5 astetta ja se on vääristynyt (siinä asennossa) koordinaatistojärjestelmän mukaan, jota käytän piirtämiseen. Ja tämä on riippumatonta siitä, piirränkö ympyrän vai suorakulmion vai monikulmion, joten en ymmärrä kuinka SpericalCircle tekisi eron siinä tapauksessa.

Sama toimii päinvastoin: jos lisätään piirrokseeni ympyrä, joka on piirretty galaktiseen koordinaattijärjestelmään, ympyrä ei ole vääristynyt, kuten odotan koordinaatistosta tässä paikassa:

Joten pääkysymys ympyrän / suorakulmion / monikulmion käytössä on, että Matplotlib kohtelee RA / Dec-järjestelmää euklidisena järjestelmänä eikä ota huomioon (ensimmäisen asteen likiarvon mukaan) cos (lat) -kerrointa. Siten napojen lähellä olevat muodot puristuvat hyvin pitkin pituutta. Syy, ettet näe tätä galaktisessa kehyksessä, on se, että olet lähellä galaktista tasoa.

SphericalCircle kiertää tämän piirtämällä todellisen pallomaisen ympyrän, joka on määritelty polygoniksi, jotta Matplotlibilla ei ole mahdollisuutta sekoittaa sitä. Onko sillä järkevämpää?

Cdeil kommentoi 1. joulukuuta 2016

SphericalCircle kiertää tämän piirtämällä todellisen pallomaisen ympyrän, joka on määritelty polygoniksi, jotta Matplotlibilla ei ole mahdollisuutta sekoittaa sitä.

Joten oikea pitkäaikainen ratkaisu on sanoa ihmisten käyttävän alueita ja lisätä as_poly-menetelmiä SkyRegioniin tai kaikkiin alueen kohteisiin?
Tämä voi jopa alkaa nyt, kun wcsaxes.SphericalCircle-koodi siirtyy alueille.SkyCircleRegion.as_poly?

Astrofrog kommentoi 1. joulukuuta 2016 & # 8226

Joten oikea pitkäaikainen ratkaisu on sanoa ihmisten käyttävän alueita ja lisätä as_poly-menetelmiä SkyRegioniin tai kaikkiin alueen kohteisiin?

Ei, to_pixel (mode = 'full') tekee muuntamisen monikulmioiksi, uutta menetelmää ei tarvita: # 91 (ja se toteuttaa SphericalCircle-koodin)

Cdeil kommentoi 1. joulukuuta 2016

Ei, to_pixel (mode = 'full') tekee muuntamisen monikulmioiksi, uutta menetelmää ei tarvita: # 91 (ja se toteuttaa SphericalCircle-koodin)

En usko, että se on hyvä API. Polygonisoinnin tulisi olla erillinen vaihe sky-pixel-muunnoksesta, ja sen tulisi näkyä erillisessä menetelmässä. Tietenkin voi olla hyödyllistä paljastaa se uudelleen yhdessä vaiheessa, mutta kahden perusvaiheen tulisi olla erikseen saatavilla.
Yritän löytää aikaa katsoa # 91 nähdäksesi mitä laitat.

Astrofrog kommentoi 1. joulukuuta 2016

@ceil - muuntaminen polygoniksi on kuitenkin välttämätön sivuvaikutus. Käyttäjän näkökulmasta on vain, että he muuttavat polygonin taivaalta pikselikoordinaatteihin paremmalla algoritmilla, joten to_pixel (mode = 'full') -sovellusliittymän kanssa se oli ajatus. Mutta olen samaa mieltä siitä, että sisäisesti meillä voisi olla erillinen as_poly-menetelmä polygonimuunnoksen tekemiseksi. Luulen vain, etten halua käyttäjien joutuvan tekemään reg.as_poly (). To_pixel ().

Adonath kommentoi 1. joulukuuta 2016

@astrofrog Valitettavasti sillä ei ole vieläkään järkeä minulle. Sikäli kuin voin sanoa, ympyrä on vedetty täysin oikein taivaan koordinaatistoon (kuten yllä olevien kuvien ruudukkoviivat osoittavat).


Nyt olemme valmiita kopioimaan yhden Price-Whelan- ja Bonaca-paperin kuvan 1 paneeleista, joka näyttää oikean liikkeen komponentit sirontakuviona:

Tässä kuvassa varjostettu alue tunnistaa tähdet, jotka todennäköisesti ovat GD-1: ssä, koska:

Vuorovirtojen luonteesta johtuen odotamme, että tähtien oikea liike GD-1: ssä on virtauksen akselia pitkin, eli odotamme liikkeen phi2: n suunnassa olevan lähellä nollaa.

Phi1: n suuntaan meillä ei ole ennakko-odotuksia oikeasta liikkeestä, paitsi että sen tulisi muodostaa klusteri nollasta poikkeavalla arvolla.

Piirtämällä oikea liike GD-1-kehykseen toivomme löytävän tämän klusterin. Sitten käytämme klusterin rajoja valitsemaan tähdet, jotka ovat todennäköisemmin GD-1: ssä.

Seuraava kuva on sirontakaavio oikeasta liikkeestä GD-1-kehyksessä tähdille tuloksissa_df.

Suurin osa oikeista liikkeistä on lähellä alkuperää, mutta on olemassa muutamia äärimmäisiä arvoja. Paperin esimerkin mukaisesti käytämme xlim ja ylim lähentämään lähdekohdan lähellä olevaa aluetta.

Lähellä (-7,5, 0) on vihje liian tiheästä alueesta, mutta jos et tiedä mistä etsiä, menetät sen.

Jotta klusteri näkyisi selkeämmin, tarvitsemme näytteen, joka sisältää suuremman osan tähdistä GD-1: ssä. Teemme sen valitsemalla tähtiä lähellä keskiviivaa.


Aukon naamarit¶

All PixelAperture objects have a to_mask() method that returns a list of ApertureMask objects, one for each aperture position. The ApertureMask object contains a cutout of the aperture mask and a BoundingBox object that provides the bounding box where the mask is to be applied. It also provides a to_image() method to obtain an image of the mask in a 2D array of the given shape, a cutout() method to create a cutout from the input data over the mask bounding box, and an multiply() method to multiply the aperture mask with the input data to create a mask-weighted data cutout. All of these methods properly handle the cases of partial or no overlap of the aperture mask with the data.

Let’s start by creating an aperture object:

Now let’s create a list of ApertureMask objects using the to_mask() method:

We can now create an image with of the first aperture mask at its position:

We can also create a cutout from a data image over the mask domain:

We can also create a mask-weighted cutout from the data. Here the circular aperture mask has been multiplied with the data:


Sky Charts¶

Many users planning an observation run will want to see the positions of targets with respect to their local horizon, as well as the positions of familiar stars or other objects to act as guides.

plot_sky allows you to plot the positions of targets at a single instance or over some window of time. You make this plot the following way:

plot_sky currently produces polar plots in altitude/azimuth coordinates only. Plots are centered on the observer’s zenith.

Making a plot for one instance in time¶

After constructing your Observer and FixedTarget objects, construct a time input using an array of length 1.

That is, either an Time object with an array containing one time value (e.g., Time(['2000-1-1']) ) or an array containing one scalar Time object (e.g., [Time('2000-1-1')] ).

Let’s say that you created FixedTarget objects for Polaris, Altair, Vega and Deneb. To plot a map of the sky:

Since plot_sky uses scatter (which gives the same color to different plots made on the same set of axes), you have to specify the color for each target via a style dictionary if you don’t want all targets to have the same color.

Showing movement over time¶

If you want to see how your targets move over time, you need to explicitly specify every instance in time.

Say I want to know how Altair moves in the sky over a 9-hour period:

For more examples on how to populate time objects, see Time documentation, or Specifying a time window .

Note that in the case of an object being under the horizon (or having negative altitude) at any of the times in your time input, plot_sky will warn you. Your object(s) will not show up on the plot for those particular times, but any positions above the horizon will still be plotted as normal.

Customizing your sky plot¶

astroplan plots use Matplotlib defaults, so you can customize your plots in much the same way you tweak any Matplotlib plot.

Setting style options¶

The default marker for plot_sky is a circle and the default label (should you choose to display a legend) is the name contained in the Target object. You can change the marker, väri-, label and other plotting properties by setting the style_kwargs option, in the same way shown for the time-dependent plots .

One situation in which this is particularly useful is the plotting of guide positions, such as a few familiar stars or any body used in calibrating your telescope. You can also use this feature to set apart different types of targets (e.g., high-priority, candidates for observing run, etc.).

See the Matplotlib documentation for information on plotting styles in scatter plots.

Changing coordinate defaults¶

As seen in the above examples, the default position of North is at the top of the plot, and South at the bottom, with azimuth increasing counter-clockwise (CCW), putting East to the left, and West to the right.

You can’t change the position of North or South (either in the actual plotting of the data, or the labels), but you can “flip” East/West by changing the direction in which azimuth increases via the north_to_east_ccw option:

Some observatories may need to offset or rotate the azimuth labels due to their particular telescope setup.

To do this, set az_label_offset equal to the number of degrees by which you wish to rotate the labels. By default, az_label_offset is set to 0 degrees. A positive offset is in the same direction as azimuth increase (see the north_to_east_ccw option):

az_label_offset option does not rotate the actual positions on the plot, but simply the theta grid labels (which are drawn regardless of gridline presence). Since labels are drawn with every call to plot_sky , we recommend you use the same az_label_offset argument for every target on the same plot.

It is not advised that most users change this option, as it may ilmestyy that your alt/az data does not coincide with the definition of altazimuth (local horizon) coordinate system.

You can turn off the grid lines by setting the grid option to False:

Since grids are redrawn with every call to plot_sky , you must set grid=False for every target in the same plot.

Other tweaks¶

You can easily change other plot attributes by acting on the returned matplotlib.axes.Axes object or via matplotlib.pyplot calls (e.g., plt.figure , plt.rc , etc.).

For instance, you can increase the size of your plot and its font:

Miscellaneous¶

The easiest way to reuse the Axes object that is the base of your plots is to just let astroplan ’s plotting functions take care of it in the background. You do, however, have the option of explicitly passing in a named axis, assuming that you have created the appropriate type for the particular plot you want.

We can explicitly give a name to the Axes object returned by plot_sky when plotting Polaris and reuse it to plot Altair:

We can also create a Axes object entirely outside of plot_sky , then pass it in: