Установка равных полей при сохранении определенного диапазона тиков

#python #matplotlib

#python #matplotlib

Вопрос:

Проблема, с которой я столкнулся до сих пор, заключается в том, что у меня есть два графика, на которых, несмотря на то, что я указываю диапазоны тиков, а также пытался указать поля, я все еще не могу получить оба графика. Проблема, по-видимому, в том, что поля не совпадают, однако при попытке исправить, установив общее поле y, результат не соответствует ожидаемому (второй рисунок), похоже, он игнорирует частоту тиков, которую я установил. Моя цель — просто получить оба графика в том же формате, в котором я размещаю их рядом

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

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

Вот мой код:

 plt.figure()
plt.scatter(x = x1, y = y1, marker = '.', s = 1.2, alpha = 0.75, label = 'DATA', color = 'darkorange')
plt.yticks(np.arange(0,1.2,0.2))
plt.xticks(np.arange(0,420,60))
lgnd = plt.legend(loc=1, scatterpoints=1, fontsize=10)
lgnd.legendHandles[0]._sizes = [30]
# plt.margins(y = 0.02)
plt.show()

plt.figure()
plt.scatter(x = x2, y = y2, marker = '.', s = 1.2, alpha = 0.75, label = 'DATA')
plt.xticks(np.arange(0,420,60))
plt.yticks(np.arange(0,1.2,0.2))
lgnd = plt.legend(loc=1, scatterpoints=1, fontsize=10)
lgnd.legendHandles[0]._sizes = [30]
# plt.margins(y = 0.02)
plt.show()

  

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

1. Из вашего вопроса трудно понять, что именно вы хотите… но если вы пытаетесь убедиться, что ось y имеет одинаковые ограничения для обеих фигур, вы можете просто установить ограничения явно : plt.ylim(-0.05, 1.25) .

Ответ №1:

Если я правильно понял ваш вопрос, вы ищете plt.ylim и plt.xlim , который позволяет настроить минимум и максимум оси. Кроме того, вы можете включить figsize опцию внутри plt.figure() , чтобы гарантировать, что обе сгенерированные цифры имеют одинаковые размеры. Вот пример, основанный на вашем коде:

 import matplotlib.pyplot as plt
import numpy as np

#generating test data
x1 = np.random.random((300,1))
x2 = np.random.random((300,1))
y1 = np.random.random((300,1))
y2 = np.random.random((300,1))

#setting the size of the figure
plt.figure(figsize=(8,6))
plt.scatter(x = x1, y = y1, marker = 'o', s = 3.2, alpha = 0.75, label = 'DATA', color = 'darkorange')
#plt.yticks(np.arange(0,1.2,0.2))
#plt.xticks(np.arange(0,420,60))
lgnd = plt.legend(loc=1, scatterpoints=1, fontsize=10)
lgnd.legendHandles[0]._sizes = [30]
# plt.margins(y = 0.02)

#setting minimum and maximum of the plots
plt.ylim([0,1])
plt.xlim([0,1])
plt.show()

#setting the size of the figure
plt.figure(figsize=(8,6))
plt.scatter(x = x2, y = y2, marker = 'o', s = 3.2, alpha = 0.75, label = 'DATA')
#plt.xticks(np.arange(0,420,60))
#plt.yticks(np.arange(0,1.2,0.2))

#setting minimum and maximum of the plots
plt.ylim([0,1])
plt.xlim([0,1])
lgnd = plt.legend(loc=1, scatterpoints=1, fontsize=10)
lgnd.legendHandles[0]._sizes = [30]
# plt.margins(y = 0.02)
plt.show() 
  

Вывод:

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

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

Бок о бок:

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

Ответ №2:

Вы можете использовать plt.ylim(ymin, ymax) и plt.xlim(xmin, xmax) для установки одинакового размера графика. Вот код, который работает:

 # Get the max value in both y axis. You could also to this for the x axis
# as well as get the minimun value. Here I'm just assuming it's zero
y1max = max(y1)
y2max = max(y2)
ymax = max(y1max, y2max)

plt.figure()
plt.scatter(x = x1, y = y1, marker = '.', s = 1.2, alpha = 0.75, label = 'DATA', color = 'darkorange')
plt.yticks(np.arange(0,1.2,0.2))
plt.xticks(np.arange(0,420,60))

# After you create the figure, set the y max and min values
plt.ylim(0, ymax)

lgnd = plt.legend(loc=1, scatterpoints=1, fontsize=10)
lgnd.legendHandles[0]._sizes = [30]
plt.show()

plt.figure()
plt.scatter(x = x2, y = y2, marker = '.', s = 1.2, alpha = 0.75, label = 'DATA')
plt.xticks(np.arange(0,420,60))
plt.yticks(np.arange(0,1.2,0.2))

# Do the same for the second plot, with the same ymax value
plt.ylim(0, ymax)

lgnd = plt.legend(loc=1, scatterpoints=1, fontsize=10)
lgnd.legendHandles[0]._sizes = [30]
plt.show()
  

Вот что я получил. Мои данные находятся не в том же диапазоне, что и ваши, поэтому тики не доходят до конца, но масштаб оси y такой же, как вы можете видеть.

Оба графика рядом