2016-05-13 70 views
0

我有与下面创建一个lines对象:Matplotilb-需要找到源数据从一个类属性

junk = plt.plot([xxxx], [yyyy]) 
for x in junk: 
    print type(x) 

<class 'matplotlib.lines.Line2D'> 

我需要找到两个列表'xxxx''yyyy'的名字。我怎样才能从课堂属性中获得他们?

+0

这不是Python的工作原理。当您将对象作为输入传递给函数时,函数并不知道这些对象在函数调用范围之外绑定的变量名。就我们所知,同一个对象可能会绑定到多个不同的变量名称(例如'a = b = 1'),所以我们怎么才能知道哪个名称是'正确'的? –

回答

0

您可以使用dir来查看python中对象的内容,或者查看docs的类。我猜你正在寻找的对象是xdataydata(虽然我有点糊涂了,在您的文章你问列表的名称?)

In [27]: 

import numpy as np 
import matplotlib.pyplot as plt 
​ 
x = np.arange(0, 5, 0.1); 
y = np.sin(x) 
junk = plt.plot(x, y) 
for x in junk: 
    #print(dir(x)) 
    print(x.get_xdata()) 
    print(x.get_ydata()) 
[ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. 1.1 1.2 1.3 1.4 
    1.5 1.6 1.7 1.8 1.9 2. 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 
    3. 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4. 4.1 4.2 4.3 4.4 
    4.5 4.6 4.7 4.8 4.9] 
[ 0.   0.09983342 0.19866933 0.29552021 0.38941834 0.47942554 
    0.56464247 0.64421769 0.71735609 0.78332691 0.84147098 0.89120736 
    0.93203909 0.96355819 0.98544973 0.99749499 0.9995736 0.99166481 
    0.97384763 0.94630009 0.90929743 0.86320937 0.8084964 0.74570521 
    0.67546318 0.59847214 0.51550137 0.42737988 0.33498815 0.23924933 
    0.14112001 0.04158066 -0.05837414 -0.15774569 -0.2555411 -0.35078323 
-0.44252044 -0.52983614 -0.61185789 -0.68776616 -0.7568025 -0.81827711 
-0.87157577 -0.91616594 -0.95160207 -0.97753012 -0.993691 -0.99992326 
-0.99616461 -0.98245261] 

希望它能帮助。

+0

感谢您的回复。在你给出的例子中,xdata是一个叫做'x'的numpy数组。我希望能够在这种情况下使用'x'这个名字来表示别的东西。是否有可能获得输入数组的名称? – matt

+0

嗨。我怀疑这样的事情,但我想知道你为什么要这样做。看看[这个答案](http://stackoverflow.com/a/1538380/3519000)。祝你好运。 – lrnzcig

+0

嗨,再次感谢您的回复。我想要这个的原因是因为我使用了violinplot(),它使用列表列表并将每个列表绘制为小提琴(盒形图的变体)。为了改变小提琴的颜色,我可以迭代小提琴,但这让我失去了名字的踪迹。所以这是我真正的问题。我已经粘贴下面的代码 list_data =排序(list_data) violin_parts = plt.violinplot(list_data)在violin_parts [ '尸体'] PC :#iterate在所有小提琴 某种方式得到每个名字??? – matt

相关问题