8

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()

ありがとう!

4

2 に答える 2

9

ほとんど。

これは:

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)

    コレクションの線種を設定します。

    承諾:['solid' | '破線'、'ダッシュドット'、'点線'| (オフセット、on-off-dash-seq)]

したがって、[(0, (2.0, 2.0))]では、0がオフセットであり、タプルがオンオフの繰り返しパターンです。

于 2012-09-17T08:16:38.763 に答える
0

これは古い質問ですが、私はそれに対処しなければならず、現在の答えはもう有効ではありません。より良いアプローチはplt.rcParams['lines.dashed_style'] = [2.0, 2.0]、プロットの前に使用することです。

于 2019-08-08T18:48:44.757 に答える