Как установить длину штриха в контурном графике 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()

спасибо!

1 ответов


почти.

Это:

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

Если бы вы поставили print c.get_dashes() там, вы бы узнали (это то, что я сделал).

возможно, определение стиля линии немного изменилось, и вы работали со старым примером.

на сборы документации говорит:

  • set_dashes (ls)

    псевдоним для set_linestyle

  • set_linestyle (ls)

    установите linestyle(ы) для коллекции.

    принимает: ['solid’ /' dashed’, 'dashdot', ' dotted’ | (offset, on-off-dash-seq)]

Так [(0, (2.0, 2.0))], 0-смещение, а затем кортеж-повторяющийся шаблон включения-выключения.