gpt4 book ai didi

python - 使用文本文件中的数据在同一图形上绘制多个椭圆

转载 作者:行者123 更新时间:2023-12-01 03:57:34 25 4
gpt4 key购买 nike

我是Python新手,所以如果这太微不足道,我很抱歉。

这是文本文件前两行的示例。

ra dec major_axis minor_axis position_angle

149.20562 2.29594 0.00418 0.00310 83.40

文件的每一行都有 5 个参数,需要绘制一个椭圆。前两列用于中心。接下来的 3 列分别是长轴、短轴和位置角。该文件是一个包含许多行的庞大目录的一部分。我想将所有这些省略号绘制在一张图中。

这是我尝试过的。

import matplotlib.pyplot as plt
import numpy as np
import astropy.io.ascii as asciitable
from matplotlib.patches import Ellipse


path=/users/vishnu/Desktop/
fw=open(path + 'data_plot.txt', 'r')
table = asciitable.read(path+ "data_plot.txt")
ra_degrees=[table['ra']]
dec_degrees=[table['dec']]
major_axis_deg=[table['major_axis']]
minor_axis_deg=[table['minor_axis']]
position_angle_deg=[table['position_angle']]



for ra, dec, w, h, angle in zip(ra_degrees,
dec_degrees,major_axis_deg, minor_axis_deg, position_angle_deg):
ellipse = Ellipse(xy=(ra, dec), width=w, height=h, angle=angle)
ax.add_patch(ellipse)
plt.axis('scaled')
plt.show()
fw.close()

这是错误日志。

  runfile('/users/vishnu/.spyder2-py3/radio_sources.py', wdir='/users/vishnu/.spyder2-py3')
Traceback (most recent call last):

File "<ipython-input-299-a0011c0326f5>", line 1, in <module>
runfile('/users/vishnu/.spyder2-py3/radio_sources.py', wdir='/users/vishnu/.spyder2-py3')

File "/users/vishnu/anaconda3/lib/python3.5/site-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 699, in runfile
execfile(filename, namespace)

File "/users/vishnu/anaconda3/lib/python3.5/site-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 88, in execfile
exec(compile(open(filename, 'rb').read(), filename, 'exec'), namespace)

File "/users/vishnu/.spyder2-py3/radio_sources.py", line 63, in <module>
ax.add_patch(ellipse)

File "/users/vishnu/anaconda3/lib/python3.5/site-packages/matplotlib/axes/_base.py", line 1783, in add_patch
self._update_patch_limits(p)

File "/users/vishnu/anaconda3/lib/python3.5/site-packages/matplotlib/axes/_base.py", line 1803, in _update_patch_limits
xys = patch.get_patch_transform().transform(vertices)

File "/users/vishnu/anaconda3/lib/python3.5/site-packages/matplotlib/patches.py", line 1409, in get_patch_transform
self._recompute_transform()

File "/users/vishnu/anaconda3/lib/python3.5/site-packages/matplotlib/patches.py", line 1398, in _recompute_transform
.scale(width * 0.5, height * 0.5) \

File "/users/vishnu/anaconda3/lib/python3.5/site-packages/matplotlib/transforms.py", line 1965, in scale
np.float_)

ValueError: setting an array element with a sequence.

还请让我知道是否有更智能的方法来执行此操作,而无需创建数组。

最佳答案

我猜问题是你在 ra_ Degrees 等上有太多的嵌套级别。

也就是说,如果你打印 table['ra'] 你可能会发现它已经是一个数组了。当您将其括在方括号中时, [table['ra']] 将是长度为 1 的列表。 zip 函数一次从每个序列中获取一个项目,因此在 for 循环中,ra 将在循环中第一次也是唯一一次被分配给 table['ra']。

另一个问题是您打开文件两次。您将文件名传递给 asciitable.read,但实际上从未使用过 fw。

下面的代码可能会更好。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
import astropy.io.ascii as asciitable

path=/users/vishnu/Desktop/
table = asciitable.read(path + "data_plot.txt")

ra_degrees = table['ra']
dec_degrees = table['dec']
major_axis_deg = table['major_axis']
minor_axis_deg = table['minor_axis']
position_angle_deg = table['position_angle']

for ra, dec, w, h, angle in zip(ra_degrees, dec_degrees,
major_axis_deg, minor_axis_deg, position_angle_deg):
ellipse = Ellipse(xy=(ra, dec), width=w, height=h, angle=angle)
ax.add_patch(ellipse)
plt.axis('scaled')
plt.show()

如果 asciitable 使用打开的文件而不是文件名,则使用以下内容:

with open(path + "data_plot.txt") as fw:
table = asciitable.read(fw)

这可以确保即使 asciitable.read 中存在导致引发异常的错误,文件也会被关闭。不过,鉴于上述错误,您似乎已经读取了数据。

关于python - 使用文本文件中的数据在同一图形上绘制多个椭圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37175035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com