2012-09-15 36 views
6

Tôi đang tạo một số ô đường viền trong matplotlib và độ dài dấu gạch ngang quá dài. Đường chấm chấm cũng không đẹp. Tôi muốn đặt chiều dài của dấu gạch ngang theo cách thủ công. Tôi có thể thiết lập độ dài dấu gạch ngang chính xác khi tôi đang thực hiện một âm mưu đơn giản bằng cách sử dụng plt.plot(), tuy nhiên tôi không thể tìm ra cách để làm điều tương tự với một âm mưu đường viền.Làm cách nào tôi có thể đặt độ dài gạch ngang trong ô đường viền matplotlib

Tôi nghĩ rằng đoạn mã sau nên làm việc, nhưng tôi nhận được lỗi:

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 

Dưới đây là một mẫu của những gì tôi đang cố gắng để làm, chuyển thể từ các ví dụ 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() 

Cảm ơn!

Trả lời

9

Hầu như.

Đó là:

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

Nếu bạn đã đặt một print c.get_dashes() đó, bạn sẽ phát hiện ra (đó là những gì tôi đã làm).

Có lẽ định nghĩa của kiểu đường đã thay đổi một chút và bạn đang làm việc từ một ví dụ cũ hơn.

Các collections documentation có này để nói:

  • set_dashes(ls)

    alias for set_linestyle

  • set_linestyle(ls)

    Set the linestyle(s) for the collection.

    ACCEPTS: [‘solid’ | ‘dashed’, ‘dashdot’, ‘dotted’ | (offset, on-off-dash-seq) ]

Vì vậy, trong [(0, (2.0, 2.0))], 0 là bù đắp, và sau đó là tuple là mô hình lặp đi lặp lại on-off.

+0

Cảm ơn bạn rất nhiều! Tôi cũng mệt mỏi với định dạng (offset, (on, off)), nhưng tôi đã không nhận ra rằng tôi cần các dấu ngoặc đơn bên trong các dấu ngoặc vuông. Các ô của tôi trông thật tuyệt vời. Bạn đã làm ngày hôm nay của tôi trở nên thú vị. Cảm ơn, Dan – DanHickstein

Các vấn đề liên quan