Matplotlib — вывод данных в квадратной форме

#python #matplotlib

#python #matplotlib

Вопрос:

Я хочу создать точечную диаграмму значений (x, y), где указаны пределы оси x [0, 10] и пределы оси y [0, 250] . Предполагается, что внешняя форма графика должна быть квадратной, поэтому единичная длина обеих осей должна быть разной.

Я пробовал оба ax.axis('square') и ax.axis('equal') , до и после установки пределов оси (установленных ax.set_xbound() и ax.set_ybound() ), но ни одна из этих комбинаций не дает желаемого результата.

 x = np.random.randint(0,10,100)
y = np.random.randint(0,250,100)

fig, ax = plt.subplots()
ax.scatter(x,y)

ax.set_xbound(0,10)
ax.set_ybound(0,250)
ax.axis('square')

plt.show()
 

Результат с ax.axis('square') :
квадрат

Форма графика квадратная, но теперь пределы x и y равны [0,250]

Комментарии:

1. покажите нам, что вы получаете

2. Как насчет ax.set_aspect(1/250) (для исходного вопроса)? Или 10/250 для примера кода?

3. @JohanC это дает правильное изображение, к сожалению, оно создает огромный интервал между областью графика и ее заголовком.

4. Вы можете использовать ax.set_title('my title') , чтобы задать заголовок для подзаголовка. Вы можете установить figsize, более подходящий для желаемого квадратного графика, с помощью fig, ax = plt.subplots(figsize=(..., ...))

Ответ №1:

Используйте axes.set_box_aspect , если у вас достаточно свежий matplotlib: https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.set_box_aspect.html

 import numpy as np
import matplotlib.pyplot as plt

x = np.random.randint(0,10,100)
y = np.random.randint(0,250,100)

fig, ax = plt.subplots()
ax.scatter(x,y)

ax.set_xbound(0,10)
ax.set_ybound(0,250)
ax.set_box_aspect(1)
plt.show()
 

введите описание изображения здесь