2010-08-20 33 views
10

Tôi bắt đầu sử dụng matplotlib cách đây một tháng, vì vậy tôi vẫn đang học.
Tôi đang cố gắng làm một bản đồ nhiệt với matshow. Mã của tôi là như sau:nhãn matplotlib matshow

data = numpy.array(a).reshape(4, 4) 
cax = ax.matshow(data, interpolation='nearest', cmap=cm.get_cmap('PuBu'), norm=LogNorm()) 
cbar = fig.colorbar(cax) 

ax.set_xticklabels(alpha) 
ax.set_yticklabels(alpha) 

nơi alpha là một mô hình từ django với 4fields: 'ABC', 'DEF', 'GHI', 'JKL'

điều là tôi không biết tại sao, nhãn 'ABC' không xuất hiện, để lại ô cuối cùng không có nhãn.
Nếu ai đó có một đầu mối làm thế nào để sửa đổi kịch bản của tôi theo cách xuất hiện 'ABC' tôi sẽ biết ơn :)

Trả lời

24

Điều gì đang xảy ra là xticks thực sự mở rộng ra ngoài hình được hiển thị khi sử dụng matshow. (Tôi không hoàn toàn chắc chắn lý do tại sao điều này. Tôi gần như không bao giờ sử dụng matshow, mặc dù.)

Để chứng minh điều này, hãy xem đầu ra của ax.get_xticks(). Trong trường hợp của bạn, đó là array([-1., 0., 1., 2., 3., 4.]). Do đó, khi bạn đặt nhãn xtick, "ABC" là < -1, -1> và không được hiển thị trên hình.

Giải pháp dễ nhất là chỉ để thêm nhãn trống vào danh sách nhãn của bạn, ví dụ:

ax.set_xticklabels(['']+alpha) 
ax.set_yticklabels(['']+alpha) 

Là một ví dụ đầy đủ:

import numpy as np 
import matplotlib.pyplot as plt 

alpha = ['ABC', 'DEF', 'GHI', 'JKL'] 

data = np.random.random((4,4)) 

fig = plt.figure() 
ax = fig.add_subplot(111) 
cax = ax.matshow(data, interpolation='nearest') 
fig.colorbar(cax) 

ax.set_xticklabels(['']+alpha) 
ax.set_yticklabels(['']+alpha) 

plt.show() 

Matshow example

+0

Cảm ơn bạn! Tôi đã có thể nhìn thấy cùng một điều :) Nhưng tôi đã có một vấn đề khác .. Tôi đang làm hai bản đồ nhiệt, một (4x4) và một (9x9) khác. Chương trình ghi nhãn bản đồ nhiệt 0,2,4,6,8 .. Vì vậy, khi tôi cố gắng để nhãn, nó chỉ cung cấp cho một tên cho những con số. Tôi đã thử với ax.set_xticks (matplotlib.numpy.arange (len (list_names))) nhưng nó làm giảm kích thước của các ô .. – pavid

+2

@Patricia - Nếu bạn đặt các vị trí đánh dấu theo cách thủ công, hãy gọi đến "axe .axis ('image') 'sau khi bạn đặt chúng nên khắc phục sự cố bạn đã mô tả. Hy vọng rằng sẽ giúp! –

+0

Cảm ơn! Vấn đề được giải quyết :) Vì vậy, ax.axis ('hình ảnh') khôi phục kích thước ban đầu của hình ảnh, phải không? – pavid

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