2014-07-24 22 views
25

Tôi đang cố gắng đếm số ô trong các ô bị lỗi, nhưng tôi không thể tìm ra cách tôi đi về nó. Tôi muốn:Thay đổi khoảng thời gian của lưới và chỉ định các nhãn đánh dấu trong Matplotlib

  1. đã rải rác lưới tại một khoảng thời gian 5

  2. Có nhãn đánh dấu lớn duy nhất mỗi 20

  3. Tôi muốn ve ở bên ngoài cốt truyện.

  4. Có "đếm" bên trong những lưới

Tôi đã kiểm tra các bản sao tiềm năng như herehere, nhưng tôi đã không thể để con nó ra.

Đây là mã của tôi.

import matplotlib.pyplot as plt 
from matplotlib.ticker import MultipleLocator, FormatStrFormatter 

for key, value in sorted(data.items()): 
    x = value[0][2] 
    y = value[0][3] 
    count = value[0][4] 

    fig = plt.figure() 
    ax = fig.add_subplot(111) 

    ax.annotate(count, xy = (x, y), size = 5) 
    # Overwrites and I only get the last data point 

    plt.close() 
    # Without this, I get "fail to allocate bitmap" error 

plt.suptitle('Number of counts', fontsize = 12) 
ax.set_xlabel('x') 
ax.set_ylabel('y') 
plt.axes().set_aspect('equal') 

plt.axis([0, 1000, 0, 1000]) 
# This gives an interval of 200 

majorLocator = MultipleLocator(20) 
majorFormatter = FormatStrFormatter('%d') 
minorLocator = MultipleLocator(5) 
# I want minor grid to be 5 and major grid to be 20 
plt.grid() 

filename = 'C:\Users\Owl\Desktop\Plot.png' 
plt.savefig(filename, dpi = 150) 
plt.close() 

Đây là những gì tôi nhận được.

This is what I get.

Tôi cũng có một vấn đề về ghi đè lên các điểm dữ liệu, mà tôi cũng đang gặp rắc rối với ... ai có thể vui lòng giúp tôi với vấn đề này?

Trả lời

77

Có một số vấn đề trong mã của bạn.

Đầu tiên các công trình lớn:

  1. Bạn đang tạo một nhân vật mới và một trục mới trong mỗi lần lặp của vòng lặp của bạn → đặt fig = plt.figureax = fig.add_subplot(1,1,1) bên ngoài vòng lặp.

  2. Không sử dụng Trình định vị. Gọi hàm ax.set_xticks()ax.grid() với từ khóa chính xác.

  3. Với plt.axes() bạn đang tạo lại trục mới. Sử dụng ax.set_aspect('equal').

Những điều nhỏ: Bạn không nên trộn cú pháp MATLAB giống như plt.axis() với cú pháp khách quan. Sử dụng ax.set_xlim(a,b)ax.set_ylim(a,b)

này phải là một ví dụ rất nhỏ làm việc:

import numpy as np 
import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = fig.add_subplot(1, 1, 1) 

# Major ticks every 20, minor ticks every 5 
major_ticks = np.arange(0, 101, 20) 
minor_ticks = np.arange(0, 101, 5) 

ax.set_xticks(major_ticks) 
ax.set_xticks(minor_ticks, minor=True) 
ax.set_yticks(major_ticks) 
ax.set_yticks(minor_ticks, minor=True) 

# And a corresponding grid 
ax.grid(which='both') 

# Or if you want different settings for the grids: 
ax.grid(which='minor', alpha=0.2) 
ax.grid(which='major', alpha=0.5) 

plt.show() 

Output là thế này:

Ålot output

+2

Cảm ơn bạn rất nhiều cho câu trả lời của bạn! Bạn đã giải quyết được vấn đề của mình! Để thiết lập các dấu tích bên ngoài, tôi chỉ cần thêm ax.tick_params (trong đó = 'cả hai', hướng = 'ra'). – owl

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