我想使x
和y
轴的长度相等(即 减去图例的图应为正方形)。我希望在外面绘制图例(我已经能够将图例放在框外)。数据(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
我该怎么做?
答案 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()
答案 1 :(得分:1)
假设您知道数据集的大小,则必须手动设置限制。
axes = plt.gca()
axes.set_xlim([xmin,xmax])
axes.set_ylim([ymin,ymax])
一个更好的选择是遍历您的数据以找到最大的x坐标和y坐标,取这两个数字中的较大者,对该值加更多一点以充当缓冲区,然后设置{{ 1}}和xmax
设置为新值。您可以使用类似的方法来设置ymax
和xmin
:而不是找到最大值,而是找到最小值。
要将图例放在情节之外,我将看这个问题: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以下。