繁体   English   中英

图例在3D轴中指定3d位置matplotlib

[英]Legend specifying 3d position in 3D axes matplotlib

我有一个使用matplotlib的散点图3d图。

我想做的是将图例放置在情节中。 我已经阅读了文档 ,似乎只能选择预定义的位置或仅指定x和y坐标。

有没有一种方法可以定位图例以指定3个坐标?

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
#more code
ax.legend(loc=(0.5,0.5,0.5), frameon=0)

最后一行是我认为可能有效但显然无效的内容。

这就是我现在所要做的: 这就是我现在所拥有的

我试图将图例放置在轴内,类似于: 寻求的结果

我使用ax.legend(loc=(0.15,0.65),frameon=0)反复尝试到达该位置,因为图例不会随轴旋转而移动。 问题是我将进行多个绘图,因此我尝试避免使用反复试验的方法。

谢谢。

要将图例使用数据坐标放置在3D图中,可以先使用3D空间获取点在3D空间中的投影坐标

mpl_toolkits.mplot3d.proj3d.proj_transform(x,y,z, ax.get_proj())

并将其提供给图例的bbox_to_anchor参数。 比将bbox_transform更改为数据坐标系,可以生成所需的图。

以下将图例的(70,1000,80)放在数据坐标中的位置(70,1000,80)

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D, proj3d
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = 25 * r * np.sin(theta)
y = 350* r * np.cos(theta)
ax.plot(x, y, 70*z, label='parametric curve')
ax.plot(x*.6, y*0.5, 70*z, label='parametric curve 2')

f = lambda x,y,z: proj3d.proj_transform(x,y,z, ax.get_proj())[:2]
ax.legend(loc="lower left", bbox_to_anchor=f(70,1000,80), 
          bbox_transform=ax.transData)

plt.show()

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM