python - 在子图中调整 matplotlib 浮动轴的位置,并反转轴方向
问题描述
这个问题源于我昨天问的上一个问题,这让我大部分时间都在追求我所追求的: Rotate transformation on matplotlib axis in subplot
我想创建一个二乘二的图形数组,其中左下角是散点图,其他三个是从该图中投影 x、y 和 xy 数据的直方图。我想以 45 度角的最终直方图,它是我要调整的那个图的位置。
目前,我有这个:
from matplotlib.transforms import Affine2D
import mpl_toolkits.axisartist.floating_axes as floating_axes
import matplotlib.pyplot as plt
def setup_axes(fig, rect, rotation, axisScale, axisLimits, doShift):
tr_rot = Affine2D().scale(axisScale[0], axisScale[1]).rotate_deg(rotation)
# This seems to do nothing
if doShift:
tr_trn = Affine2D().translate(-90,-5)
else:
tr_trn = Affine2D().translate(0,0)
tr = tr_rot + tr_trn
grid_helper = floating_axes.GridHelperCurveLinear(tr, extremes=axisLimits)
ax = floating_axes.FloatingSubplot(fig, rect, grid_helper=grid_helper)
fig.add_subplot(ax)
aux_ax = ax.get_aux_axes(tr)
return ax, aux_ax
fig = plt.figure(1, figsize=(8, 8))
axes = []
axisOrientation = [0, 0, 270, -45]
axisScale = [[1,1],[6,1],[6,1],[6,1]]
axisPosition = [223,221,224,222]
axisLimits = [(-0.5, 4.5, -0.5, 4.5),
(-0.5, 4.5, 0, 12),
(-0.5, 4.5, 0, 12),
(-3.5, 3.5, 0, 12)]
doShift = [False, False, False, True]
label_axes = []
for i in range(0, len(axisOrientation)):
ax, aux_ax = setup_axes(fig, axisPosition[i], axisOrientation[i],
axisScale[i], axisLimits[i], doShift[i])
axes.append(aux_ax)
label_axes.append(ax)
numPoints = 100
x = []
y = []
for i in range(0,numPoints):
x.append(np.random.rand() + i/100.0)
y.append(np.random.rand() + i/100.0 + np.mod(i,2)*2)
axes[0].plot(x,y,ls='none',marker='x')
label_axes[0].axis["bottom"].label.set_text('Variable 1')
label_axes[0].axis["left"].label.set_text('Variable 2')
b = np.linspace(-0.5,4.5,50)
axes[1].hist(x, bins = b)
axes[2].hist(y, bins = b)
b = np.linspace(-3.5,3.5,50)
axes[3].hist(np.array(x)-np.array(y), bins=b)
for i in range(1,len(label_axes)):
for axisLoc in ['top','left','right']:
label_axes[i].axis[axisLoc].set_visible(False)
label_axes[i].axis['bottom'].toggle(ticklabels=False)
fig.subplots_adjust(wspace=-0.30, hspace=-0.30, left=0.00, right=0.99, top=0.99, bottom=0.0)
plt.show()
这使:
正如您在代码中看到的那样,我尝试用 an 移动右上角的图的位置,Affine2D().translate()
但它似乎没有效果。有谁知道我如何移动这个图,使其 x 轴几乎触及左下图轴的右上角?
编辑:
我也刚刚注意到右下角的情节与它应该的样子相比是颠倒的。它需要以某种方式上下镜像。
编辑2:
fig.subplots_adjust() 之前的这段代码将解决这个问题:
label_axes[2].invert_yaxis()
解决方案
推荐阅读
- gpu - 如何判断本地pc机是否支持d2d硬件加速
- sql - 同一张表上的 LEFT OUTER JOIN 返回 0 条记录
- javascript - 使用流优化联合类型中的可选属性
- xamarin - 使用模板失败的新 Xamarin.Forms 解决方案
- swift - Alamofire 请求已取消 (-999)
- python - 将计数添加到新列 pandas python 3
- mysql - MySQL Workbench 格式化程序 CTRL+B 删除我的评论
- amazon-ec2 - Google SMTP 不适用于 AWS EC2
- java - Spring 4 - Autowire 通用接口
- amazon - 如何从亚马逊获取产品价格到网站