gpt4 book ai didi

python - 无法在 MatPlotLib 3d 上使 Axis 右对齐

转载 作者:太空宇宙 更新时间:2023-11-03 21:26:10 26 4
gpt4 key购买 nike

我正在尝试制作 3d matplot 图。我无法让完整的 Axis 以良好对齐的标签显示。我在下面概述了我尝试过的步骤。

1) 我可以使用以下方法设置 y Axis 标签:

yTicks = list(range(0,90,5)
ax.set_yticks(range(len(yTicks)), True)

enter image description here

但是,正如您所看到的,标签对齐得非常糟糕。它也与我实际定义的不匹配,我实际定义的滴答数应该是 5,而不是 10。

2)如果我也尝试使用 set_yticklabels,虽然对齐方式可以修复,但它只打印 Axis 的一部分。这是代码和图像:

ax.set_yticklabels(yTicks,verticalalignment='基线',
水平对齐='左')

enter image description here

注意 y Axis 如何从 80 变为 40。

3) 如果我去掉 set_yticks 中的 True,所有东西都会挤压在一起:

enter image description here

4) 最后,如果我在标签函数中同时使用 set_yticksset_yticklabels 调用 get_yticks() ,它几乎可以工作,但你可以看到轴线延伸到图表的“表面”之外:

ax.set_yticks(range(len(yTicks)), True)
ax.set_yticklabels(ax.get_yticks(), verticalalignment='baseline',
horizontalalignment='left')

enter image description here

5)这是我的代码的更完整版本供引用:

plt.clf()

ax = plt.axes(projection='3d')

ax.bar3d(x,y,z,
1,1,[val*-1 if val != 0 else 0 for val in z])

xTicks = list(range(0,25,2))
yTicks = list(range(30,90,5))

ax.set_zlim(0, 1)

ax.set_xticks(range(len(xTicks)), True)
ax.set_yticks(range(len(yTicks)), True)

ax.set_xticklabels(ax.get_xticks(),
verticalalignment='baseline',
horizontalalignment='left')

ax.set_yticklabels(ax.get_yticks(),
verticalalignment='baseline',
horizontalalignment='left')

plt.savefig(file_path)

如何让它以 5 为间隔显示我的完整 Axis (0-90) 并使其对齐良好?

6) 更新:根据下面与 @ImportanceOfBeingErnest 的对话,这是我使用以下代码时仍然遇到的问题:

x=[15,28,20]; y=[30,50,80]; z=[1,1,1]

plt.clf()

ax = plt.axes(projection='3d')

ax.bar3d(x,y,z,
1,1,[val*-1 if val != 0 else 0 for val in z])

xTicks = list(range(0,25,2))
yTicks = list(range(30,90,5))
ax.set_xticks(xTicks)
ax.set_yticks(yTicks)

ax.set_yticklabels(ax.get_yticks(),
verticalalignment='baseline',
horizontalalignment='left')

ax.set_zlim(0, 1)

plt.savefig(getSaveGraphPath(save_name))

enter image description here

最佳答案

正如评论所述,您可以通过 ax.set_yticks 设置刻度。

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

x=[15,28,20]; y=[30,50,80]; z=[1,1,1]

ax = plt.axes(projection='3d')

ax.bar3d(x,y,z,
1,1,[val*-1 if val != 0 else 0 for val in z])


yTicks = list(range(30,90,5))
ax.set_yticks(yTicks)

ax.set_yticklabels(ax.get_yticks(),
verticalalignment='baseline',
horizontalalignment='left')

ax.set_zlim(0, 1)

plt.show()

这将在 y Axis 上显示所需的 5 个单位步长。

enter image description here

关于python - 无法在 MatPlotLib 3d 上使 Axis 右对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53830174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com