[AstroPy] Visibility plot with the list of coords

Evert Rol evert.rol at gmail.com
Mon Jul 27 16:16:31 EDT 2015


> I'd like to plot observability curves for list of the objects of my
> interest. Following this example
> https://astropy.readthedocs.org/en/v1.0.3/coordinates/observing-example.html
> I created coords list using SkyCoord:
> 
>>>> coords = SkyCoord(data[:,2], data[:,3], unit=(u.deg,u.deg))
> 
> which contains more than 300 objects.
> 
> And then, when I'm trying to transform equatorial coords to horizontal I get:
> 
>>>> from astropy.coordinates import get_sun
>>>> delta_midnight = np.linspace(-12, 12, 1000)*u.hour
>>>> times = midnight + delta_midnight
>>>> altazframe = AltAz(obstime=times, location=bta_location)
>>>> sunaltazs = get_sun(times).transform_to(altazframe)
>>>> coordaltazs = coords.transform_to(altazframe)
> 
> Traceback (most recent call last):
>  File "testing", line 38, in <module>
>    corraaltazs = coords.transform_to(altazframe)
>  File "/usr/lib/python2.7/dist-packages/astropy/coordinates/sky_coordinate.py",
> line 348, in transform_to
>    new_coord = trans(self.frame, generic_frame)
>  File "/usr/lib/python2.7/dist-packages/astropy/coordinates/transformations.py",
> line 920, in __call__
>    curr_coord = t(curr_coord, curr_toframe)
>  File "/usr/lib/python2.7/dist-packages/astropy/coordinates/transformations.py",
> line 708, in __call__
>    res = self.func(fromcoord, toframe)
>  File "/usr/lib/python2.7/dist-packages/astropy/coordinates/builtin_frames/icrs_cirs_transforms.py",
> line 41, in icrs_to_cirs
>    cirs_ra, cirs_dec = erfa.atciq(i_ra, i_dec, 0, 0, px, 0, astrom)
>  File "/usr/lib/python2.7/dist-packages/astropy/_erfa/core.py", line
> 22306, in atciq
>    broadcast = numpy.broadcast(numpy.int32(0.0), numpy.int32(0.0),
> rc_in, dc_in, pr_in, pd_in, px_in, rv_in, astrom_in)
> ValueError: shape mismatch: objects cannot be broadcast to a single shape

I guess this has more to do with the fact that both the times (and thus, in a way, the altazframe object) and the coords are both arrays; in the example in the docs, only times is an array. 
So you’ll need to work towards getting a 2D array as output for coordaltazs in this case. Perhaps this should be done under the hood, but possibly, this is not done/built-in out of the principle of least surprise (generally, using numpy, when 1D arrays are input, a 1D array is output, not a 2D array).
What seems to work for me is adding an extra dimension to the coords array:

    >>> coordaltazs = coords[:,np.newaxis].transform_to(altazframe)

which will give you 2D arrays for coordaltazs.alt and coordaltazs.az to be plotted
(depending on the plot you want to make, you may need to loop around pyplot.scatter).



> But when I use a single string from coords list (say, coords[20] )
> everything goes well.
> Looks like transform_to() waits for a single SkyCoord object but I
> have a list. Is there any way to convert and plot several objects on
> one plot?
> 
> Thanks for the any help!
> 
> -- 
> Cheers,
> Ilya
> _______________________________________________
> AstroPy mailing list
> AstroPy at scipy.org
> http://mail.scipy.org/mailman/listinfo/astropy




More information about the AstroPy mailing list