2017-05-04 111 views
1

我想要一个SQUARED散点图和每个图4个子图。我想通了,该怎么办,如果x和y轴具有相同的范围:matplotlib/python:强制轴对于多个子图的长度相同

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具有不同的t取值和情节受到压缩2

我想获得地块1的形状和情节的数据2.

谢谢!

+1

你可以提供一个[MCVE]这说明它是如何不工作,然后用这个,确切地解释剧情应该怎么样子的呢? (在这个描述中,重点关注你想达到的结果,而不是你认为可能的解决方案)。 – ImportanceOfBeingErnest

回答

1

您可以将纵横比设置为图的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() 

enter image description here

+0

非常感谢你,就是这样! – Therese

相关问题