2015-03-11 2 views
0

У меня есть большой код, который выводит несколько изображений. Время от времени, сюжет будет выглядеть следующим образом (см MWE ниже):matplotlib участки слишком много тиков

enter image description here

Обратите внимание, как клещи в оси х почти перекрывают друг друга, что выглядит довольно плохо.

Мой вопрос: почему матплотлиб не понимает это и просто занимает меньше тиков (как это обычно бывает без проблем)? Как я могу заставить matplotlib нарисовать меньше тиков в общем (т. Е. Я не после решения, которое применяет только для данного участка, это только пример)?


MWE (если код выглядит излишне сложным, это потому, что это небольшая часть гораздо большего код)

import matplotlib.pyplot as plt 
import matplotlib.gridspec as gridspec 
import random 


def scatter_plot(x, y): 

    ax = plt.subplot(gs[0:2, 0:2]) 
    plt.xlim(min(x), 0.00158) 
    plt.xlabel('$x$', fontsize=16) 
    plt.ylabel('$y$', fontsize=16) 
    ax.minorticks_on() 

    plt.scatter(x, y) 


# Generate random data. 
x = [random.random()/100. for i in xrange(10000)] 
y = [random.random() for i in xrange(10000)] 
# Define size of output figure. 
fig = plt.figure(figsize=(30, 25)) # create the top-level container 
gs = gridspec.GridSpec(10, 12)  # create a GridSpec object 
# Create plot. 
scatter_plot(x, y) 
# Save plot to file. 
fig.tight_layout() 
plt.savefig('out.png', dpi=150) 

ответ

2

Первый import numpy as np, а затем вызвать ax.xaxis.set_ticks(np.arange(xmin, xmax, stepsize)), где xmin минимальное значение клеща, xmax - максимальное значение галочки, а stepsize - разница между последовательными тиками. Вероятно, имеет смысл использовать stepsize = (xmax - xmin)/tick_count, где tick_count - это количество тиков, которые вы хотите.

+0

И каково значение «stepize» для общего решения? – Gabriel

+0

Также 'min' и' max 'являются зарезервированными именами для функций' min() 'и' max() '. Вы имели в виду 'min (x)' и 'max (x)'? – Gabriel

+0

Извините. Я просто использовал 'min' и' max' в качестве заполнителей. Они должны быть минимальными и максимальными значениями тика, поэтому 'min (x)' и 'max (x)' кажутся естественным выбором, хотя вам могут понадобиться разные значения в зависимости от того, как вы хотите, чтобы график выглядел. 'stepize' должен быть просто разницей между max и min, деленными на количество тиков, которые вы хотите. Я отредактировал свой ответ, чтобы отразить это. –