2015-07-24 7 views
0

Мне нужно построить 2D-разброс от matplotlib в python 3.2.в диаграмме рассеяния, сделайте каждую ячейку сетки квадратом в matplotlib в python 3.2

Но максимальные и минимальные значения данных достоверны.

Мне нужно настроить сетку и тикеры так, чтобы каждая ячейка ячейки была квадратной, а количество линий сетки, связанных с тикерами, должно зависеть от размера фигуры.

UPDATE

Я предпочитаю п X п линий сетки на X и оси Y соответственно. Значение n зависит от максимального значения X и Y. Я хочу сохранить n в пределах от 3 до 8. Это означает, что имеется не более 8 линий сетки и не менее 3 строк по направлениям X и Y.


Мой питон OCDE:

#yList is a list of float numbers 
    #xList is a list of float numbers 

    rcParams['figure.figsize'] = 6, 6 
    plt.scatter(xList, yList, s=3, c='g', alpha=0.5) 
    plt.Figure(figsize=(1,1), facecolor='w') 
    plt.ylim(0, max(yList)) 
    plt.xlim(0, max(xList)) 

    plt.grid() 
    plt.show() 

В настоящее время, каждая ячейка сетки rectagular. Мне нужна площадь для каждой ячейки.

+0

возможно дубликат из [Как выравнивать масштабы оси x и оси y в Python matplotlib?] (http://stackoverflow.com/questions/17990845/how-to-equalize-the-scales-of-x-axis-and -y-axis-in-python-matplotlib) – Foggzie

ответ

0

Это можно сделать, используя ax.set_x/yticks для настройки сетки, затем ax.set_aspect для настройки шкалы. Если вы сделаете это правильно (сначала скорректировать соотношение из-за разницы между Xmax и Ymax, затем выбрать масштаб по количеству случае), вы получите квадратные ячейки сетки

import random 
import matplotlib.pyplot as plt 
xList = np.random.uniform(0,1,10) 
yList = np.random.uniform(0,10,10) 

fig = plt.figure() 
ax = fig.gca() 
plt.rcParams['figure.figsize'] = 6, 6 
ax.scatter(xList, yList, s=3, c='g', alpha=0.5) 
ax.set_ylim(0, max(yList)) 
ax.set_xlim(0, max(xList)) 

#Added code 
n_x, ny = 3, 8 
ax.set_xticks(np.linspace(*ax.get_xlim(), num=n_x+1)) #Need 4 points to make 3 intervals 
ax.set_yticks(np.linspace(*ax.get_ylim(), num=n_y+1)) #Need 9 points to make 8 intervals 

ax.set_aspect(ax.get_xlim()[1]/ax.get_ylim()[1] * n_y/n_x ) 
# ax.get_xlim()[1]/ax.get_ylim()[1] correct difference between xmax and ymax, 
# n_y/n_x put the correct scale to get square grid cells 

ax.grid() 
fig.show() 

enter image description here

+0

спасибо! Посмотрите мое обновление в OP. – user3601704

+0

Затем просто замените 'n_x',' n_y' на любое значение, которое вы хотите. – Yann