如何在matplotlib等高线图中设置短划线长度

时间:2012-09-15 04:12:56

标签: python matplotlib

我在matplotlib中制作了一些等高线图,并且破折号的长度太长。虚线也不好看。我想手动设置短划线的长度。当我使用plt.plot()制作一个简单的绘图时,我可以设置精确的短划线长度,但是我无法弄清楚如何用等高线图做同样的事情。

我认为以下代码应该可以工作,但我收到错误:

File "/Library/Python/2.7/site-packages/matplotlib-1.2.x-py2.7-macosx-10.8-intel.egg/matplotlib/backends/backend_macosx.py", line 80, in draw_path_collection
    offset_position)
TypeError: failed to obtain the offset and dashes from the linestyle

以下是我正在尝试做的一个示例,改编自MPL示例:

import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt


delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
# difference of Gaussians
Z = 10.0 * (Z2 - Z1)

plt.figure()

CS = plt.contour(X, Y, Z, 6, colors='k',linestyles='dashed')

for c in CS.collections:
    c.set_dashes([2,2])

plt.show()

谢谢!

2 个答案:

答案 0 :(得分:9)

几乎。

这是:

for c in CS.collections:
    c.set_dashes([(0, (2.0, 2.0))])

如果你把print c.get_dashes()放在那里,你就会发现(这就是我所做的)。

也许线条样式的定义有所改变,而你正在使用一个较旧的例子。

collections documentation有这样说:

  
      
  • set_dashes(LS)

         

    set_linestyle的别名

  •   
  • set_linestyle(LS)

         

    设置集合的linestyle。

         

    ACCEPTS:['solid'| '虚线','dashdot','点'| (偏移,开 - 关 - 破折号)]

  •   

所以在[(0, (2.0, 2.0))]中,0是偏移量,然后元组是开关重复模式。

答案 1 :(得分:0)

尽管这是一个古老的问题,但我不得不处理,当前的答案不再有效。更好的方法是在绘图前使用using System.Drawing; using System.Drawing.Drawing2D; var myPoint = new PointF(10, 10); var transform = new Matrix(); transform.Rotate(90.0f); transform.Shear(5, 0); var transformed = new PointF[] { myPoint }; transform.TransformPoints(transformed);