我已成功读取目录中的数据,并绘制了我需要的内容。但是,我还需要一件事。我想通过“半光半径”将不同的“standard_deviation”值与“number”对应。在所示的图表中,“数字”不是图表上的轴,但是,在这种情况下,例如将是10“数字9”。我想用一种方法将这些相同编号的点的点与某种线相匹配,如下图所示(我只是随机画线以便让你了解我想要的东西)。
在此示例中,假设每个点中的一个绘制线具有相同的“数字”。 “数字”的点将具有十个不同的“standard_deviation”值,1到10,以及十个不同的“half_light radius”值,这些值是我想要匹配的值。我在下面粘贴了我的阅读/情节代码。我该怎么做?
newvid = asciitable.read('user4.cat')
n_new = newvid['n']
re_new = newvid['re']
number = newvid['number']
standard_deviation = newvid['standard_deviation']
plt.title('sersic parameter vs. standard deviation distribution of noise')
plt.xlabel('standard deviation')
plt.ylabel('sersic parameter')
plt.xlim(0,12)
plt.ylim(0,5)
plt.scatter(standard_deviation, n_new)
plt.show()
plt.title('half-light radius vs. standard deviation distribution of noise')
plt.xlabel('standard deviation')
plt.ylabel('half-light radius')
plt.xlim(0,12)
plt.ylim(-2,15)
plt.scatter(standard_deviation,re_new)
plt.show()
答案 0 :(得分:2)
要执行我认为您想要的操作,您必须使用plot
函数而不是scatter
才能连接这些行。根据数据的排列方式,您可能需要对数据进行拆分或排序,以便您可以一次性绘制每个数字的所有点,并按标准差进行排序。
试试这个:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
newvid = asciitable.read('user4.cat')
n_new = newvid['n']
re_new = newvid['re']
number = newvid['number']
std_dev = newvid['standard_deviation']
n_max = float(number.max()) # for coloring later
plt.figure()
plt.title('sersic parameter vs. standard deviation distribution of noise')
plt.xlabel('standard deviation')
plt.ylabel('sersic parameter')
plt.xlim(0,12)
plt.ylim(0,5)
for n in np.unique(number):
n_mask = number == n # pick out just where n_new is the current n
order = np.argsort(std_dev[n_mask]) # sort by std_dev, so line doesn't zig zag
plt.plot(std_dev[n_mask][order], n_new[n_mask][order],
label=str(n), color=cm.jet(n/n_max)) # label and color by n
plt.legend()
plt.show()
plt.figure()
plt.title('half-light radius vs. standard deviation distribution of noise')
plt.xlabel('standard deviation')
plt.ylabel('half-light radius')
plt.xlim(0,12)
plt.ylim(-2,15)
# do one plot per number
for n in np.unique(number):
n_mask = number == n # pick out just where n_new is the current n
order = np.argsort(std_dev[n_mask]) # sort by std_dev, so line doesn't zig zag
plt.plot(std_dev[n_mask][order], re_new[n_mask][order],
label=str(n), color=cm.jet(n/n_max)) # label and color by n
plt.legend()
plt.show()
随机数据:
要使用颜色栏而不是图例:
m = cm.ScalarMappable(cmap=cm.jet)
m.set_array(number)
plt.colorbar(m)