我在python 2.7中有这段代码:
import numpy as np
from astropy.io import fits
import matplotlib.pyplot as plt
image_file='test.fits'
hdu_list = fits.open(image_file)
image_data = hdu_list[0].data
plt.imshow(image_data,cmap='gray')
plt.show()
所以我打开了一个FITS文件并将其数据保存到一个数组中。
到目前为止,没有任何问题。
现在我有两个问题。
我的第一个问题是: 现在我想在图像中的特定位置添加一个圆圈(或写一些文本)。我的数据是一个2048 x 2048浮点值的数组。
我的第二个问题是: 假设我将此图(在绘制/添加任何内容之前)保存为“test.png”。 保存为png图像后,现在我想在png图像中的特定位置添加一个圆圈(或写一些文本)。我该怎么做?
任何帮助将不胜感激。 感谢。
答案 0 :(得分:1)
如果您有以像素坐标给出的圆位置,则可以使用matplotlib中的scatter函数或Circle类。 (在这种情况下,绘图问题与天体无关,你应该将其标记为matplotlib)
如果您有以世界坐标(即天空中的经度和纬度)给出的圆圈位置,则可以使用aplpy或wcsaxes。
关于你的第二个问题:你可以使用matplotlib或scikit-image将png加载到一个numpy数组中然后再使用matplotlib来绘制圆圈(但请注意,轴坐标会有所不同......如果有的话,请尽量避免这种情况你可以或用一些代码展示一个你想要做什么的例子。
答案 1 :(得分:1)
尝试类似:
hmask,wmask= 0.3,0.3 #radius = 15 pix = 20 AU
m=Ellipse(xy=(0,0),height=hmask,width=wmask)
figure(1).add_subplot(111).add_artist(m)
m.set_color('k')
答案 2 :(得分:1)
我有一个类似的问题,并使用了早些时候回答的Jerome Pitogo de Leon的建议。对于我的情况,我有一个bmp图像,我保存到变量'img':
import matplotlib.pyplot as plt
img = mpimg.imread('img_name.bmp')
plt.show()
然后我检查了轴是什么样的,并根据坐标(我通过视觉检查确定)指定了我的圆圈
# Define circles
c1 = plt.Circle((100, 600), 50, color=(0, 0, 1))
c2 = plt.Circle((300, 400), 50, color=(1, 0, 0))
c3 = plt.Circle((500, 200), 50, color=(0, 1, 0))
# Open new figure
fig = plt.figure()
# In figure, Image as background
plt.imshow(img)
# Add the circles to figure as subplots
fig.add_subplot(111).add_artist(c1)
fig.add_subplot(111).add_artist(c2)
fig.add_subplot(111).add_artist(c3)
plt.show()