#python #matplotlib #aspect-ratio
#python #matplotlib #соотношение сторон
Вопрос:
Я создал функцию для построения множества похожих графиков контуров. Я показываю минимальную форму того, что я делаю. В этом минимальном примере я хотел бы поставить только галочки на (0,0) A, (3,0) B, (3,3) C, (0,3) D, где A, B, C, D метки галочек. Я могу заставить его работать до ввода A и B. Когда я twiny()
вводю для создания галочек C и D, больше ничего не работает. Галочки не помещаются там, где ожидалось, и соотношение сторон уничтожается. Я пытался использовать host_subplot
from mpl_toolkits.axes_grid1
, но это не исправило это.
import matplotlib
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
def plot2DFS(fign,x,y,z):
fig = plt.figure(fign)
ax = fig.add_subplot(111, adjustable='box-forced', aspect='equal')
ax.set_title('Iso-surf contour')
ax.contour(x, y, z)
ax.spines['left'].set_position('center')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position('center')
ax.spines['top'].set_color('none')
ax.tick_params(axis='y',which='both', right='off', left='off', labelleft='off')
ax.tick_params(axis='x',which='both', bottom='off', top='off')
ax.xaxis.set_ticks([0.0,3.0])
ax.xaxis.set_ticklabels(['A','B'])
bx = ax.twiny()
bx.tick_params(axis='x',which='both', bottom='off', top='off')
bx.xaxis.set_ticks([0.0,3.0])
bx.xaxis.set_ticklabels(['D','C'])
return
delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
plot2DFS(1,X,Y,Z)
plt.show()
Ответ №1:
Соотношение сторон просто отличное, вы видите идеальный круг, не так ли?
Что касается меток и их положения, вам нужно сообщить matplotlib, что вы хотите равные пределы x. Поместите bx.set_xlim(ax.get_xlim())
в конец вашей функции.
Комментарии:
1. Соотношение сторон правильное, но посмотрите, что происходит с изображением. Оси не находятся на границе или там, где они были бы автоматически. Кроме того, если вы не сохраните и просто сообщите python show() график, ось перемещается вместе с границей независимо от масштабирования изображения.
2. Мне не ясно, в чем именно проблема. Для меня график выглядит нормально, но я не знаю, чего вы пытаетесь достичь.