如何确保绘图的x和y轴大小相等?

时间:2019-01-07 20:51:02

标签: python python-2.7 matplotlib

我想使xy轴的长度相等( 减去图例的图应为正方形)。我希望在外面绘制图例(我已经能够将图例放在框外)。数据(x axis)中x_max - x_min的跨度与数据(y axis)中y_max - y_min的跨度不同。

这是我目前所拥有的代码的相关部分:

plt.legend(loc='center left', bbox_to_anchor=(1, 0.5), fontsize=15 )
plt.axis('equal')
plt.tight_layout()

以下链接是我得到的输出图解的示例:plot

我该怎么做?

3 个答案:

答案 0 :(得分:3)

plt.axis('scaled')将成为您的追随者吗?如果数据限制相等,那将产生一个正方形图。

如果不是,则可以通过将轴的长宽比设置为xlimits和ylimits的比例来获得平方图。

import numpy as np
import matplotlib.pyplot as plt

fig, (ax1, ax2) = plt.subplots(1,2)

ax1.plot([-2.5, 2.5], [-4,13], "s-")
ax1.axis("scaled")

ax2.plot([-2.5, 2.5], [-4,13], "s-")
ax2.set_aspect(np.diff(ax2.get_xlim())/np.diff(ax2.get_ylim()))

plt.show()

enter image description here

答案 1 :(得分:1)

假设您知道数据集的大小,则必须手动设置限制。

axes = plt.gca()
axes.set_xlim([xmin,xmax])
axes.set_ylim([ymin,ymax])

一个更好的选择是遍历您的数据以找到最大的x坐标和y坐标,取这两个数字中的较大者,对该值加更多一点以充当缓冲区,然后设置{{ 1}}和xmax设置为新值。您可以使用类似的方法来设置ymaxxmin:而不是找到最大值,而是找到最小值。

要将图例放在情节之外,我将看这个问题:How to put the legend out of the plot

答案 2 :(得分:0)

尚未提及但可以为您提供平方输出的方法是,在构建图形时,只需使用for i in [some_list]: # replacing with the ith term to request that particular value url = "https://some_url/%s" % str(i) # accessing a table correspounding to my request request = pd.read_html(url)[0] #request1 is a table with the same columns as request request1 = request1.merge(request,how = 'outer') request1 设置图形的大小即可。例如,

figsize=(x,y)

重要提示:如果还使用import matplotlib.pyplot as plt import numpy as np import random x = np.arange(0, 10, 0.2) y = np.zeros((len(x))) for ii in range(len(x)): y[ii] = random.random()*20 fig = plt.figure(figsize=(5,5), dpi=150) plt.scatter(x, y, label="Data", marker="+") plt.title("Title") plt.legend(bbox_to_anchor=(1.01, 0.5), loc="center left", borderaxespad=0.) plt.show() ,此方法将不会产生正方形图-这样做总是会挤压刻度线标签和添加的其他任何内容(标题,图例,轴标签)等)插入由plt.tight_layout()创建的区域,从而将宽高比降低到1:1以下。