2011-08-14 25 views
1

我在我的wx.Frame中使用matplotlib在某个位置绘制一些箭头和文本。箭头的数量和位置基于先前创建的数据。 我做了一些计算,但基本上是这样的:wppython-plotting中的Matplotlib中止

箭头=底漆 每个引物: 在y位置画一个箭头 - 0.05至previos箭头(primer_y - 0.05)。 箭头的x位置来自数据,计算并缩放(不是很重要,只知道箭头应该位于primer_x的位置)。

一切工作正常,直到我有很多箭头绘制。例如。在我的代码示例中,数据包含62个箭头,其中18个绘制正确,接下来的3个箭头丢失,但文本在那里,剩下的完全丢失。

有谁知道可能是什么问题?我尝试了allready来改变FigureSize,但它只是拉伸箭头。

这里有一个快速和肮脏的工作示例,数据包含在代码: http://pastebin.com/7mQmZm2c

任何帮助,不胜感激! 在此先感谢! 孙燕姿

回答

3
  1.  print((primer_x+0.06, primer_y)) 
    

    在循环内。当 primer_y变为负数时,您会发现箭头停止绘制。

  2. 请勿用self.axes.annotate绘制箭头,同时用self.fig.text标记 箭头。坐标轴和图形使用不同的坐标系。将self.fig.text更改为self.axes.text 将允许您使用相同的坐标系,这将使您更方便地将文本放在箭头下方。
  3. 代码中有太多的 硬编码数字(“幻数”)。这使得它非常难以修复,因为当一个数字发生变化时,其余部分不会以逻辑方式与 一起更改。如果你可以用公式来定义 这些神奇数字之间的关系,那么你的人生将会更容易。
  4. 例如,如果你改变了for循环到

    for primer,primer_y in zip(data,np.linspace(0.95,0.0,len(data))): 
    

    ,而不是由与每个固定量递减primer_y通过循环,然后primer_y将0.95之间自动空间本身下降到0.0不管data有多少项目。

  5. 如果您发现箭头压扁(垂直),你可以通过改变该线路上figsize扩大 图:

    self.fig = matplotlib.figure.Figure(figsize=(20, 30), facecolor='white') 
    
+0

感谢这个伟大的答案和建议! – snowflake