在matplotlib 3d图中移动刺? [英] Move spines in matplotlib 3d plot?

查看:192
本文介绍了在matplotlib 3d图中移动刺?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在3D matplotlib轴对象中移动刺.

I'm trying to move the spines in a 3D matplotlib axes object.

这似乎是一个非常简单的问题,但是我没有找到直接解决此问题的任何问题/答案.我在此问题的底部列出了我对该主题的研究列表.

我可以在matplotlib 2D图中设置棘刺的位置.以下代码:

I can set the position of the spines in matplotlib 2D plots. The following code:

import matplotlib.pyplot as plt, numpy as np

fig, axes = plt.subplots(1, 2)
r, theta = 1, np.linspace(0, 2*np.pi, 100)
x, y = r*np.cos(theta), r*np.sin(theta)
for ax in axes:  # plot the same data on both axes
    ax.plot(x, y)
    ax.set_aspect("equal")
for spine in ax.spines.values():  # adjust spines on last active axis 
    spine.set_position(("data", 0))

产生:

但是,当我尝试使用3D轴进行相同的操作时...

However, when I try the same thing with a 3D axis...

z = np.zeros(x.shape)  # exciting stuff
fig = plt.figure()
for i in range(2):  # create two 3D subplots
    ax = plt.subplot(1,2,i+1, projection="3d", aspect="equal")
    plt.plot(x, y, z)
for spine in ax.spines.values():  # adjust spines on last active axis
    spine.set_position(("data", 0))

上面的代码给了我:

即即使代码仍在运行,也没有任何效果.另外,对于3D轴,ax.spines看起来像:

I.e. no effect, even though the code still runs. Also, for the 3D axes, ax.spines looks like:

OrderedDict([('left', <matplotlib.spines.Spine at 0x120857b8>),
             ('right', <matplotlib.spines.Spine at 0xfd648d0>),
             ('bottom', <matplotlib.spines.Spine at 0xe89e4e0>),
             ('top', <matplotlib.spines.Spine at 0xe89eef0>)])

我不确定在3D轴的上下文中,左",右",底部",顶部"指的是什么.我试过改变其他属性,例如刺的颜色.那里也没有运气.如何掌握轴上实际的x,y,z棘?

I'm not sure what "left", "right", "bottom", "top" refer to in the context of a 3D axis. I've tried changing other properties like colour of the spines; no luck there either. How can I get hold of the actual x, y, z spines on the axes?

研究:

    在撰写本文时,
  • 在stackoverflow中搜索"matplotlib棘3d"会给出5个结果(包括该问题).
  • mplot3d 文档完全没有提到棘刺.
  • 此问题显示了如何使用ax.w_xaxis.set_pane_color()设置窗格颜色,但是没有类似的ax.w_zaxis.set_spine...方法.
  • 这个问题显示如何使用ax.w_zaxis.line.set_color()设置书脊颜色.我想到了一个可怕的解决方法来手动设置ax.w_zaxis.line.set_data,但是它只有x和y数据.不z!甚至x和y轴也没有z数据.
  • searching "matplotlib spines 3d" in stackoverflow gives 5 results (including this question) at the time of writing.
  • The mplot3d documentation doesn't mention spines at all.
  • This question shows how to set the pane colour with ax.w_xaxis.set_pane_color(), but there is no similar ax.w_zaxis.set_spine... method.
  • This question shows how to set the spine colour using ax.w_zaxis.line.set_color(). I thought about making a horrible workaround to set ax.w_zaxis.line.set_data manually, but it only has x and y data; no z! Even the x and y axes don't have z data.

推荐答案

目前似乎没有明显的方法.未实现在轴投影为3D时设置棘刺.但是,这里有一个小小的

There seems to be no obvious way to do this at the moment. Setting the spines when the axis projection is 3D is not implemented. However, there is a small hack here.

ax.spines设置用于2D渲染.在图形的初始化中设置projection=3d时,某些2D属性(如ax.spines等)将被忽略.这就是为什么设置2D脊柱时没有任何响应的原因.

The ax.spines setting is for 2D rendering. When you set projection=3d in the initialization of the figure, certain 2D properties (like ax.spines, etc.) are ignored. It's why you don't get any response when you set the 2D spines.

3D图形轴线(每个轴的粗黑线)的位置由参数ax.xaxis._axinfo['juggled'](对于y和z轴类似)确定.这指定将3D绘图边界框的六个外部边界中的哪一个绘制为粗黑线.

The 3D figure axis line (the thick black line for each axis) locations are determined by the parameter ax.xaxis._axinfo['juggled'] (and similarly for y and z axes). This specifies which of the six outer boundaries of a 3D plot bounding box are plotted as thick black lines.

您可以通过覆盖juggled值来移动x,y,z轴中每个轴的轴线位置,该值指定哪些轴为主要轴,如以下x轴示例所示, 默认设置ax.xaxis._axinfo['juggled'] = (1,0,2) 新设置,ax.xaxis._axinfo['juggled'] = (2,0,1) 所有六个外部边界的参数为:

You can shift the position of the axis line for each of x,y,z axis by overwriting the juggled value, which specifies which axis lines are the main ones, as the following example for the x axis, the default setting, ax.xaxis._axinfo['juggled'] = (1,0,2) new setting, ax.xaxis._axinfo['juggled'] = (2,0,1) The parameters for all the six outer boundaries are,

这篇关于在matplotlib 3d图中移动刺?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆