#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 такой же, как вы можете видеть.