我不想将单词或数字作为x轴的刻度标签,而是绘制一个简单的绘图(由直线和圆圈组成)作为每个x刻度的标签.这可能吗?如果是这样,在matplotlib中最好的方法是什么?
我试图将numpy的ndarray子类化.在我的子类中,我调用MyClass
了一个名为time
并行数组的字段到主数据中.
我的目标如下:假设我创建了一个MyClass实例,让我们调用它mc
.mc
例如mc[2:6]
,我切片,我希望生成的对象不仅包含正确切片的np数组,还包含相应切片的time
数组.
这是我的尝试:
class MyClass(np.ndarray):
def __new__(cls, data, time=None):
obj = np.asarray(data).view(cls)
obj.time = time
return obj
def __array_finalize__(self, obj):
setattr(self, 'time', obj.time)
def __getitem__(self, item):
#print item #for testing
ret = super(MyClass, self).__getitem__(item)
ret.time = self.time.__getitem__(item)
return ret
Run Code Online (Sandbox Code Playgroud)
这不起作用.经过几个小时的捣乱,我意识到这是因为当我打电话时mc[2:6]
,__getitem__
实际上是多次打电话.首先,当它被调用时,item
变量,如预期的那样slice(2,6,None)
.但是,包含的行super(MyClass, self)...
再次调用相同的函数,可能是为了检索切片的各个元素.
问题是它提供__getitem__
了一组奇怪的参数,总是负数.在示例中mc[2:6]
,它多次调用方法4,item
值为-4,-3,-2和-1.
正如您所看到的,这使我无法正确调整ret.time
变量,因为它尝试多次修改变量,通常使用无意义的索引.
我试图在很多方面解决这个问题,包括复制对象和编辑该副本,获取对象的各种视图,以及许多其他黑客,但似乎没有一个能够克服这个问题,__getitem__
而这个问题反复被称为负数索引而不是请求切片.
任何有关正在发生的事情的帮助或解释都将不胜感激.