我想要一个SQUARED散点图,每个图有4个子图。如果x和y轴具有相同的范围,我想出了如何做到这一点:
f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)
for x in [ax1, ax2, ax3, ax4]:
x.set_adjustable('box-forced')
x.set_aspect('equal')
但是,如果x和y轴具有不同的范围,则这不起作用,因为x中的一个单位在图中的长度与y中的一个单位相同。
我已经看到使用plt.subplots_adjust()来改变轴长度,但如果我已经有多个子图,我就不知道它是如何工作的。
有什么想法吗?我很惊讶设置一个数字大小是多么容易,设置轴长度是多么棘手。
谢谢!
编辑: 以下是一些显示问题的代码:
import matplotlib.pyplot as plt
import numpy as np
f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)
# All data within 0-25, 25-50, 50-75, 75-100 should be plotted on respective subplot
layers = [(ax4, (0., 25.)), (ax3, (25., 50.)), (ax2, (50.., 75.)), (ax1, (75., 100.))]
# make subplot squared:
for x in layers:
x[0].set_adjustable('box-forced')
x[0].set_aspect('equal')
# loop over multiple files containing data, here reproduced by creating a random number 100 times:
for x in np.arange(100):
data = np.random.random(10)*100.
for pl in layers:
ii = np.where((data>=pl[1][0]) & (pl[1][1]>data))[0]
pl[0].scatter(data[ii], data[ii])
plt.show()
这产生了一个带有平方子图的图: 平方子图(x轴和y轴具有相同的范围)1
使用与上面完全相同的代码,但绘制数据[ii]对比(数据[ii])** 2给出了x和y的不同轴范围的图,并改变了平方形状:
x和y具有不同的范围,并且图表被挤压2
我想得到情节1的形状和情节2的数据。
谢谢!
答案 0 :(得分:2)
您可以将纵横比设置为图表的x和y限制的比率。这将给你一个方形图。
import matplotlib.pyplot as plt
import numpy as np
f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)
# All data within 0-25, 25-50, 50-75, 75-100 should be plotted on respective subplot
layers = [(ax4, (0., 25.)), (ax3, (25., 50.)), (ax2, (50., 75.)), (ax1, (75., 100.))]
# loop
for x in np.arange(100):
data = np.random.random(10)*100.
for pl in layers:
ii = np.where((data>=pl[1][0]) & (pl[1][1]>data))[0]
pl[0].scatter(data[ii], data[ii])
x0,x1 = pl[0].get_xlim()
y0,y1 = pl[0].get_ylim()
pl[0].set_aspect( (x1-x0)/(y1-y0) )
plt.show()