2016-12-28 4 views
3

Я использую matplotlib, и я хочу сравнить графики двух наборов данных, сохраняя оси x и y одинаковыми для обоих наборов данных. Тем не менее, автомасштабирование немного сокращает и масштабирует мои графики, потому что набор данных 2 имеет меньший предел. Как видно на фотографиях.Python Matplotlib - отключить автомасштабирование

def make_figure(data, param ='Customers'): # default param is Customers 
    fig = plt.figure(figsize = (18,10)) 

    xticks = np.arange(0, 10000, 1000) 
    yticks = np.arange(0, 55000, 5000) 

    i = 0 
    colors = ['red','yellow','brown','orange','green','green','green','green','blue','cyan','navy','magenta'] 

    ax1 = fig.add_subplot(3,4,1) 
    ax1.set_xticks(xticks) 
    ax1.set_yticks(yticks) 
    ax1.autoscale(False, tight=False) 

    for assortment in ['a','b','c']: 
     for storetype in ['a','b','c','d']: 

      datax = data[param][data.StoreType == storetype][data.Assortment == assortment] 
      datay = data['Sales'][data.StoreType == storetype][data.Assortment == assortment] 
      plt.subplot(3, 4, i+1, sharex=ax1, sharey=ax1) 
      plt.title('Assortment ' + assortment + ' StoreType ' + storetype) 
      plt.scatter(y = datay, x = datax, c=colors[i], alpha=.65) 

      if i % 4 == 0: 
       plt.ylabel('Sales') 

      if i >= 8: 
       plt.xlabel(str(param)) 

      i += 1 

    plt.tight_layout() 

    return plt.show() 

Dataset 1

enter image description here

Dataset 2

enter image description here

+0

@tacaswell: Я знаю, что 2 вопроса звучат одинаково, но я попробовал set_xlim(), и это не привело к результату, который я хочу. –

+0

ok. вопрос повторно открыт. – tacaswell

+0

Фактически я исправил его. Мне нужно положить ax = plt.subplot() и ax.set_xlim() и ax.set_ylim() ** внутри ** цикла. –

ответ

0

Вы можете пользователя по xlim и ylim функции, чтобы установить пределы каждой оси. Если пределы постоянны, например:

# Set the limits and disable scaling 
plt.xlim(0, 8000) 
plt.ylim(0, 40000) 
plt.autoscale(False) 

Более общее решение было бы определить предел максимального на основе всех наборов данных, которые вы планируете заранее построить и установить ограничение также.

+0

Я попробовал это на самом деле. Я добавил ax1.set_xlim ([0,8000]) ax1.set_ylim ([0,45000]) –

+0

, но результат тот же –

+0

на самом деле я исправил его. Мне нужно положить ax = plt.subplot() и ax.set_xlim() и ax.set_ylim() внутри цикла. –

Смежные вопросы