Frage:
Wie zeichne ich galaktische Koordinaten mit Matplotlib und Astropie in Python?
Maria
2019-07-10 22:49:44 UTC
view on stackexchange narkive permalink

Ich möchte eine Projektion von Millisekundenpulsaren auf der galaktischen Ebene machen, ähnlich wie diese von Sala et al. 2004: From Josep Sala, "Feasibility Study for a Spacecraft Navigation System..."

Ich habe verschiedene Methoden ausprobiert und bin nirgendwo hingekommen. Dies ist mein aktueller Code, zusammen mit dem, was er produziert:

  importiere Mathematik als mimport numpy als npimport csvimport matplotlib.pyplot als pltimport pandas als pdimport astropy.koordinaten als coordimport astropy.units als ufrom astropy .io importieren asciifrom astropy.coordinates importieren SkyCoorddata = pd.read_csv ('galacticwperiod.csv') xarr = np.array (data.iloc [:, 0]) yarr = np.array (data.iloc [:, 1]) eq = SkyCoord (xarr [:], yarr [:], unit = u.deg) gal = eq.galactic # print (xarr) #xarr = np.array (df.iloc [:, 0]) # yarr = np .array (df.iloc [:, 1]) # zarr = np.array (df.iloc [:, 2]) # ra = coord.Angle (xarr [:], unit = u.hour) # 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 = fig.add_subplot (111, projection = "aitoff") plt.plot (gal.l.wrap_at (180 * u.deg), gal.b.wrap_at (180 * u.deg), linestyle = 'Keine') ax.scatter (gal.l, gal.b, linestyle = 'Keine') # ax.set_facecolor ('xkcd: Schlachtschiff grau') # fig.patch.set_facecolor ('weiß') # ax.tick_params (Achse = 'beide', w hich = 'major', labelize = 10) # ax.grid (color = 'b', linestyle = 'solid') fig.show () # plt.savefig ('millisecondcoloraitoff.png', dpi = 600)  

Hier einige Zeilen der Eingabedatei 'galacticwperiod.csv':

  Gl, Gb111.383, -54.849305.898, -44.888305.913, - 44.877  

Dies ist das Bild, das es erzeugt: My plot

Ich bin fast sicher, dass dies falsch ist, da sie nicht entlang der verteilt sind galaktische Ebene, die sie sein sollten. Die Daten, die ich verwende, stammen aus dem ATNF Pulsar Catalog.

Dies sind die Websites, die ich mir bereits als Referenz angesehen habe:

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

Jede Hilfe dabei wäre sehr dankbar.

Können Sie ein paar Beispielzeilen von `galacticwperiod.csv` bereitstellen? Was sind seine Felder?
111.383, -54.849 305.898, -44.888 305.913, -44.877 Sie stammen aus dem ATNF-Pulsarkatalog unter Verwendung eines Suchkriteriums von P0 <0,03. Dieser Kommentar zeigt es nicht an, aber sie befinden sich in Spalten, mit Gl (111,305 usw.) in der ersten Spalte und Gb (-54, -44 usw.) in der zweiten.
Drei antworten:
Mike G
2019-07-12 06:11:49 UTC
view on stackexchange narkive permalink

Dieser Code liest Koordinaten als äquatorial (ra, dec) und wandelt sie in galaktische (l, b) um:

  eq = SkyCoord (xarr [:], yarr [:], Einheit = u.deg) gal = eq.galactic  

Der Inhalt von 'galacticwperiod.csv' ist bereits in galaktischen Koordinaten angegeben und sollte nicht transformiert werden. So etwas kann zu besseren Ergebnissen führen:

  gal = SkyCoord (xarr [:], yarr [:], frame = 'galactic', unit = u.deg)  

Das andere Problem ist das Die geografischen Projektionen von pyplot scheinen Winkel im Bogenmaß zu erwarten. Dieser Code:

  plt.subplot (111, projection = 'aitoff') plt.grid (True) plt.scatter (gal.l.wrap_at ('180d'). Radian, gal.b.radian)  

erzeugt dieses Diagramm:

Successful plot in Aitoff projection

Ich bin damit einverstanden, dass ich meine Koordinaten nicht ändern sollte. Dies hat das Problem jedoch nicht behoben.
@Maria Aktualisiert.
Das hat funktioniert. Vielen Dank!
James K
2019-07-17 12:44:55 UTC
view on stackexchange narkive permalink

Wenn ich mir die Handlung ansehe, stelle ich fest, dass sich an den "Polen" eine Konzentration von Punkten befindet. Die Konzentration sollte entlang des Äquators und insbesondere in Richtung des Zentrums der Galaxie liegen.

Ich denke, Sie haben Ihre Achsen umgeschaltet, sodass Punkte entlang des galaktischen Äquators entlang des vertikalen "Nullmeridians" gezeichnet werden.

Kornpob Bhirombhakdi
2019-07-11 21:01:03 UTC
view on stackexchange narkive permalink
  aus astropy.io importieren passt aus astropy importieren wcs importieren matplotlib.pyplot als pltx = fit.open ('f160w_noopt_drz.fits') ['SCI'] y = wcs.WCS (x.header) plt. Unterzeichnungen (figsize = (8, 8), subplot_kw = {'Projektion': y}) plt.imshow (x.data, cmap = 'viridis', origin = 'lower', vmin = 0, vmax = 10) plt. show ()  
Können Sie erklären, was das OP falsch gemacht hat und was Ihr Code tut, um das Problem zu beheben?
Dieser Code verwirrt mich ein wenig - meine Daten befinden sich nicht in einer .fits-Datei. Außerdem kann ich meine Handlung farbig gestalten und so weiter. Es ist nur die Positionierung der Sterne in meiner Handlung, bei der ich nicht sicher bin, wie ich sie korrigieren soll. Gibt es eine Möglichkeit, von CSV in Passungen zu konvertieren?
Ja, aber es ist möglicherweise nicht einfach.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
Loading...