我试图通过它们的相对大小来显示天空中星系团的可视化。所以我正在制作每个星系团的点图,然后试图在每个星系周围放一个圆圈。
到目前为止,这是我的代码:
import matplotlib.pyplot as plt
from pylab import *
import csv
with open("/Users/Olly/Documents/FINALVALUES/xPeak.csv", "rU") as x:
reader = csv.reader(x)
list1 = list(reader)
with open("/Users/Olly/Documents/FINALVALUES/yPeak.csv", "rU") as y:
reader = csv.reader(y)
list2 = list(reader)
with open("/Users/Olly/Documents/FINALVALUES/radius.csv", "rU") as r:
reader = csv.reader(r)
list3 = list(reader)
xList = []
yList = []
rList = []
for i in list1:
for j in i:
xList.append(int(j))
for i in list2:
for j in i:
yList.append(int(j))
for i in list3:
for j in i:
rList.append(int(j))
#At this point I have my 3 lists for plotting
plt.figure(1)
plt.rc('text', usetex = True)
plt.rc('font', family = 'serif')
plt.plot(xList, yList, marker = '.', color = 'k', linestyle = 'None')
plt.title('W1 galaxy cluster field')
plt.xlabel(r'$\vartheta$ (arcmins)')
plt.ylabel(r'$\vartheta$ (arcmins)')
for i in range(len(xList))
circle1 = plt.Circle((xList[i], yList[i]), rList[i], color = 'r')
fig, ax = plt.subplots()
ax.add_artist(circle1)
plt.show()
(xList和yList是星系团中心的(x,y)坐标,rList是聚类的半径。)
所以我首先创建我的点图。然后我遍历每个数据点,以便我可以为每个数据点设计一个单独的圆。
据我所知,编写'fig,ax'应该会将在该循环中创建的圆圈添加到预定义的图形(1)中。所以我不明白为什么每个圈子都会出现多个情节。
如何修改此设置,以便为所有354个数据点创建一个圆圈,并将它们全部放在同一个图表上?
(编辑:这对于堆叠上的其他问题是唯一的,因为其他问题不涉及导致多个图的循环。这里的问题不是如何绘制圆 - 如在其他问题中 - 而是如何在代码中需要循环时绘制多个圆圈。)
答案 0 :(得分:2)
据我所知,写'无花果,斧头'应该使该循环中创建的圆被添加到预定义的图形(1)。
如上所述,这实际上会为xList
中的每个索引生成一个新的数字和轴对。尝试替换该行:
plt.figure(1)
使用:
fig, ax = plt.subplots()
并将循环修改为:
for i in range(len(xList)):
circle1 = plt.Circle((xList[i], yList[i]), rList[i], color = 'r')
ax.add_artist(circle1)
这样就可以避免为每个索引创建新的图形实例,同时将图形对象的引用保持为fig
,将轴对象保持为ax
。
我无法使用您的实际数据对其进行测试,但我认为最终的代码段应为:
fig, ax = plt.subplots()
plt.rc('text', usetex = True)
plt.rc('font', family = 'serif')
plt.plot(xList, yList, marker = '.', color = 'k', linestyle = 'None')
plt.title('W1 galaxy cluster field')
plt.xlabel(r'$\vartheta$ (arcmins)')
plt.ylabel(r'$\vartheta$ (arcmins)')
for i in range(len(xList))
circle1 = plt.Circle((xList[i], yList[i]), rList[i], color = 'r')
ax.add_artist(circle1)
plt.show()
我希望这会有所帮助。