将y轴点匹配在一起

时间:2013-11-13 04:47:32

标签: python graph matplotlib

我已成功读取目录中的数据,并绘制了我需要的内容。但是,我还需要一件事。我想通过“半光半径”将不同的“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()

Example Graph

1 个答案:

答案 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()

随机数据:
lines

要使用颜色栏而不是图例:

m = cm.ScalarMappable(cmap=cm.jet)
m.set_array(number)
plt.colorbar(m)

colorbar