#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()