在3D图中交换y轴和z轴的位置

22
默认情况下,使用matplotlib在三维空间中绘制一组点(或其他对象),会将z轴垂直定位,如下所示(以下为代码):

enter image description here

我需要交换zy轴,以便将y轴垂直显示。
我已经找了一圈,但没有找到告诉matplotlib如何做到这一点的方法。
补充说明:我不想采用交换数据和标签的方法来解决。这只是一个简单的三点三维图,但我必须绘制更复杂的曲面。我正在寻找一个通用的解决方案,而不仅仅是适用于散点图的方法。告诉matplotliby轴垂直放置而不是z轴是一种干净的方式。
MWE
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D


fig = plt.figure()
ax = Axes3D(fig)

ax.scatter([0.2, 0.5, 0.8], [2.3, 0.47, 1.], [2.1, 5.3, 0.7])

ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.show()

1
现在太忙了,也许等我有时间了再说吧 :) - tmdavison
@Gabriel:你找到一个可行的解决方案了吗?我现在也遇到了相同的问题。 - rtime
1
很遗憾,没有@t.rathjen。最接近的解决方案是下面innoSPG提供的答案。 - Gabriel
1
我也在寻找一种不同于黑客的解决方案。有任何更新吗? - martinako
@martinako 不好意思,不是的。 - Gabriel
显示剩余4条评论
3个回答

6

感谢您打开错误报告 Bastian! - Gabriel
4
这是一个有趣的功能实现,希望你们都觉得它有用! - Scott

3

一种可能的方法是在数据中交换y和z的位置,并相应地标记。而不是

ax.scatter([0.2, 0.5, 0.8], [2.3, 0.47, 1.], [2.1, 5.3, 0.7])

使用

ax.scatter([0.2, 0.5, 0.8], [2.1, 5.3, 0.7], [2.3, 0.47, 1.])

并标记为 ax.set_ylabel('z')ax.set_zlabel('y')


3
谢谢inno,但这种类型的黑客正是我所不想做的。我会将此添加到问题中,因为它不太清楚。 - Gabriel

2

Matplotlib 3.6.0已经发布,现在允许您通过命令ax.view_init(elev, azim, roll)设置第三个视角。请参见官方文档

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接