Python Matplotlib ЗначениеError 'num должно быть 1 & lt; = num & lt; = 2, а не 3' [дублировать]

Коллекции, такие как HashMap и HashSet, используют значение хэш-кода объекта для определения того, как объект должен храниться в коллекции, а хэш-код используется снова, чтобы помочь найти объект в коллекции.

  1. Найти правое ведро (используя hashCode ())
  2. Искать ведро для правого элемента (используя equals ())

Вот небольшой пример, почему мы должны переопределять equals () и hashcode (). Рассмотрим класс Employee, который имеет два возраста и имя поля.

public class Employee {

    String name;
    int age;

    public Employee(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == this)
            return true;
        if (!(obj instanceof Employee))
            return false;
        Employee employee = (Employee) obj;
        return employee.getAge() == this.getAge()
                && employee.getName() == this.getName();
    }

    // commented    
    /*  @Override
        public int hashCode() {
            int result=17;
            result=31*result+age;
            result=31*result+(name!=null ? name.hashCode():0);
            return result;
        }
     */
}

Теперь создайте класс, вставьте объект Employee в HashSet и проверьте, присутствует ли этот объект.

public class ClientTest {
    public static void main(String[] args) {
        Employee employee = new Employee("rajeev", 24);
        Employee employee1 = new Employee("rajeev", 25);
        Employee employee2 = new Employee("rajeev", 24);

        HashSet<Employee> employees = new HashSet<Employee>();
        employees.add(employee);
        System.out.println(employees.contains(employee2));
        System.out.println("employee.hashCode():  " + employee.hashCode()
        + "  employee2.hashCode():" + employee2.hashCode());
    }
}

Он будет печатать

false
employee.hashCode():  321755204  employee2.hashCode():375890482

Теперь раскомментируйте метод hashcode () выполните то же самое, и выход будет

true
employee.hashCode():  -938387308  employee2.hashCode():-938387308

. Теперь вы можете понять, почему, если два объекта считаются равными, их хэш-коды также должны быть равны? В противном случае вы никогда не сможете найти объект, поскольку метод hashcode по умолчанию в классе Object практически всегда содержит уникальный номер для каждого объекта, даже если метод equals () переопределяется таким образом, что два или более объекта считаются равными. Неважно, насколько равны объекты, если их хэш-коды не отражают это. Итак, еще раз: если два объекта равны, их хэш-коды также должны быть равны.

356
задан MackM 9 June 2015 в 19:41
поделиться

4 ответа

Это параметры подсеточной сетки, закодированные как одно целое. Например, «111» означает «сетка 1x1, первый подзаговор» и «234» означает «сетка 2x3, четвертый подзаговор».

Альтернативной формой для add_subplot(111) является add_subplot(1, 1, 1).

343
ответ дан Constantin 23 August 2018 в 19:36
поделиться

Ответ от Constantin - это пятно, но для большего фона это поведение унаследовано от Matlab.

Поведение Matlab объясняется в разделе Figure Setup - Отображение нескольких графиков на рисунке в документации Matlab.

subplot (m, n , i) разбивает окно фигуры на матрицу m-by-n небольших подсетей и выбирает ее подзаголовок для текущего графика. Графики пронумерованы вдоль верхнего ряда окна фигуры, затем второго ряда и т. Д.

32
ответ дан MackM 23 August 2018 в 19:36
поделиться

Я думаю, что это лучше всего объяснить следующим рисунком:

enter image description here [/g1]

Чтобы инициализировать вышеизложенное, наберите:

import matplotlib.pyplot as plt
fig = plt.figure()
fig.add_subplot(221)   #top left
fig.add_subplot(222)   #top right
fig.add_subplot(223)   #bottom left
fig.add_subplot(224)   #bottom right 
plt.show()

EDIT: Некоторая дополнительная информация

Следующие комбинации создают асимметричные расположения подзаголовков.

subplot(2,2,[1 3])
subplot(2,2,2)
subplot(2,2,4)

Example 2 [/g2]

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

subplot(2,2,1:2)
subplot(2,2,3)
subplot(2,2,4)

enter image description here [/g3]

Ссылка здесь

408
ответ дан SaiyanGirl 23 August 2018 в 19:36
поделиться

Мое решение -

fig = plt.figure()
fig.add_subplot(1, 2, 1)   #top and bottom left
fig.add_subplot(2, 2, 2)   #top right
fig.add_subplot(2, 2, 4)   #bottom right 
plt.show()

6
ответ дан yoonghm 23 August 2018 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: