[yt-users] Creating image from FITS data
John ZuHone
jzuhone at gmail.com
Wed Sep 20 08:17:18 PDT 2017
Hi Tazkera,
Sorry for the delayed reply. You can annotate circles on slice plots like this:
http://yt-project.org/doc/visualizing/callbacks.html#overplot-a-circle-on-a-plot <http://yt-project.org/doc/visualizing/callbacks.html#overplot-a-circle-on-a-plot>
Best,
John
> On Sep 11, 2017, at 6:03 PM, tazkera haque <h.tazkera at gmail.com> wrote:
>
> HI John,
>
> Just a little update from my part. I could do the same thing with creating a sphere of 400 arcmin and separating out the desired value and and drawing a circle around it with some numpy and matplotlib functions. I am basically interested to see what function in yt can do these same things for me. I have also attached the resulted plot.
>
> My code looks like the following:
>
> from astropy.io <http://astropy.io/> import fits
> import matplotlib.pyplot as plt
> %matplotlib inline
> import matplotlib.image as mpimg
> import numpy as np
>
> hdulist = fits.open('signal_wfilt_sn.fits')
> scidata = hdulist[0].data
> scidata
>
> h = 1629
> w = 1629
> center = [815, 815]
> radius = 400
> def createCircularMask(h, w, center=center, radius=radius):
>
> Y, X = np.ogrid[:h, :w]
> dist_from_center = np.sqrt((X - center[0])**2 + (Y-center[1])**2)
>
> mask = dist_from_center <= radius
> return mask
>
> img = scidata
> h, w = img.shape[:2]
> mask = createCircularMask(h, w)
> masked_img = img.copy()
> masked_img[~mask] = 0
>
> imgplot = plt.imshow(masked_img)
> hot = np.where(masked_img>4.5)
> imgplot
> c=plt.colorbar()
> c.set_label('s/n')
>
> plt.scatter(hot[0], hot[1],alpha=0.05, facecolor = "none", edgecolor='yellow')
> plt.show()
>
> Best
> Tazkera
>
> On Sun, Sep 10, 2017 at 8:46 PM, tazkera haque <h.tazkera at gmail.com <mailto:h.tazkera at gmail.com>> wrote:
> Hi John,
>
> Thanks so much for all the help. I just need one more clarification from you. I needed to identify values greater than 4.5 and draw a circle around them. I used the masking function in yt to figure out the array which contains those certain values. But Can you please show me how do I draw circles around them in the same 2d plot?
>
> hot = dd["image_0"].in_units('dimensionless') > 4.5
> print('Temperature of all data: dd["image_0"] = \n%s' % dd["image_0"])
> print("Boolean Mask: hot = \n%s" % hot)
> print('Temperature of "hot" data: dd["image_0"][hot] = \n%s' %
> dd['image_0'][hot])
> q = dd['image_0'][hot]
> print q
>
> Thanks a lot
>
> Tazkera
>
>
> On Sun, Sep 10, 2017 at 12:22 PM, John ZuHone <jzuhone at gmail.com <mailto:jzuhone at gmail.com>> wrote:
> Hi Tazkera,
>
> The issue here is that sp[“image_0”] is a 1-D array of the points in the sphere. If you want to make plots using yt, I would suggest checking out the plotting documentation:
>
> http://yt-project.org/doc/visualizing/plots.html <http://yt-project.org/doc/visualizing/plots.html>
>
> Specifically, since you have a 2D fits file, it’d probably be simplest to use plot_2d:
>
> http://yt-project.org/doc/visualizing/plots.html#plots-of-2d-datasets <http://yt-project.org/doc/visualizing/plots.html#plots-of-2d-datasets>
>
> If you want to cut out the data that isn’t in your sphere object, you can try passing the sphere object in as the data_source argument to plot_2d:
>
> p = yt.plot_2d(ds, “image_0”, data_source=sp)
> p.save()
>
> That should give you a head start.
>
> Best,
>
> John
>
>> On Sep 9, 2017, at 8:02 PM, tazkera haque <h.tazkera at gmail.com <mailto:h.tazkera at gmail.com>> wrote:
>>
>> Hi People,
>>
>> I am trying to play around with FITS file format. I want to create an image from this file which will include data from center to 20 arc minutes. each pixel is 3x3 arc sec.
>>
>> import yt
>> ds = yt.load("signal_wfilt_sn.fits")
>> ds.print_stats()
>> ds.field_list
>> ds.domain_width
>> ds.derived_field_list
>> dd = ds.all_data()
>> dd
>> sp = ds.sphere(ds.domain_center, (400, 'code_length')) # create sphere of 20 arcminutes with 3x3 pixel size
>> sp[("fits", "image_0")] # check array of data within the sphere
>> #plot 1D histogram of data over pixel
>> pplot = yt.ProfilePlot(sp, "image_0", ["pixel"], weight_field=None, n_bins=1024,
>> plot_spec=dict(color='red', linestyle="--"), y_log={'pixel':False})
>> pplot.show()
>> # convert data to numpy array
>> import numpy as np
>> image = np.array(sp['image_0'])
>>
>> # create image?
>> imgplot = plt.imshow(image)
>>
>> imgplot
>> plt.show()
>> image
>>
>> The code is failing at this point with error:
>> ---------------------------------------------------------------------------
>> TypeError Traceback (most recent call last)
>> <ipython-input-21-6a83e68fbbf2> in <module>()
>> ----> 1 imgplot = plt.imshow(image)
>> 2
>> 3 imgplot
>> 4 plt.show()
>>
>> /home/trina/anaconda2/lib/python2.7/site-packages/matplotlib/pyplot.pyc in imshow(X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, shape, filternorm, filterrad, imlim, resample, url, hold, data, **kwargs)
>> 3155 filternorm=filternorm, filterrad=filterrad,
>> 3156 imlim=imlim, resample=resample, url=url, data=data,
>> -> 3157 **kwargs)
>> 3158 finally:
>> 3159 ax._hold = washold
>>
>> /home/trina/anaconda2/lib/python2.7/site-packages/matplotlib/__init__.pyc in inner(ax, *args, **kwargs)
>> 1896 warnings.warn(msg % (label_namer, func.__name__),
>> 1897 RuntimeWarning, stacklevel=2)
>> -> 1898 return func(ax, *args, **kwargs)
>> 1899 pre_doc = inner.__doc__
>> 1900 if pre_doc is None:
>>
>> /home/trina/anaconda2/lib/python2.7/site-packages/matplotlib/axes/_axes.pyc in imshow(self, X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, shape, filternorm, filterrad, imlim, resample, url, **kwargs)
>> 5122 resample=resample, **kwargs)
>> 5123
>> -> 5124 im.set_data(X)
>> 5125 im.set_alpha(alpha)
>> 5126 if im.get_clip_path() is None:
>>
>> /home/trina/anaconda2/lib/python2.7/site-packages/matplotlib/image.pyc in set_data(self, A)
>> 598 if (self._A.ndim not in (2, 3) or
>> 599 (self._A.ndim == 3 and self._A.shape[-1] not in (3, 4))):
>> --> 600 raise TypeError("Invalid dimensions for image data")
>> 601
>> 602 self._imcache = None
>>
>> TypeError: Invalid dimensions for image data
>>
>> I am completely new to image processing, so I am interested to know how you create image for this type of data in yt. Your help is very appreciated. I also provided a link to the dataset:
>>
>> https://www.dropbox.com/s/bftuihqcoun8tny/signal_wfilt_sn.fits?dl=0 <https://www.dropbox.com/s/bftuihqcoun8tny/signal_wfilt_sn.fits?dl=0>
>> Thanks a lot
>> Tazkera haque
>> _______________________________________________
>> yt-users mailing list
>> yt-users at lists.spacepope.org <mailto:yt-users at lists.spacepope.org>
>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org <http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org>
>
>
> _______________________________________________
> yt-users mailing list
> yt-users at lists.spacepope.org <mailto:yt-users at lists.spacepope.org>
> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org <http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org>
>
>
>
> <image.png>_______________________________________________
> yt-users mailing list
> yt-users at lists.spacepope.org <mailto:yt-users at lists.spacepope.org>
> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org <http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.spacepope.org/pipermail/yt-users-spacepope.org/attachments/20170920/21f68be2/attachment.html>
More information about the yt-users
mailing list