Вы пытаетесь передать категориальные значения (строки) в качестве аргументов x и y. Это будет работать для 1d точечного графика, но в 3d вам нужно определить координаты пролета / декартовой системы. То, что вы в основном хотите получить, это строки в виде меток на осях X и Y. Чтобы получить желаемый график, вы можете сначала построить числовые значения, а затем переназначить метки в соответствии с вашими строковыми значениями.
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
xs=['str1', 'str2']
ys=['str3', 'str4']
zs=[1,2]
ax.scatter(range(len(xs)), range(len(xs)), zs)
ax.set(xticks=range(len(xs)), xticklabels=xs,
yticks=range(len(xs)), yticklabels=xs)
Вы также можете установить метки, используя
plt.xticks(range(len(xs)), xs)
plt.yticks(range(len(ys)), ys)
Первый вариант, использующий ax
, однако позволяет вам сделать то же самое в одной строке.
![enter image description here](https://i.stack.imgur.com/6I363.png)