使用Python绘制带字符串的三维散点图

6
我曾尝试在Python中制作一个带有字符串类别(即神经网络的激活函数和求解器)的三维散点图,其中x轴和y轴为字符串类别,z轴为浮点数(即NN的准确性得分)。
以下示例引发错误: ValueError: could not convert string to float: 'str1'
我按照此文档进行了3D绘图:https://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html 有什么想法,可能是什么问题吗? 非常感谢!
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
xs=['str1', 'str2']
print(type(xs))
ys=['str3', 'str4']
print(type(ys))
zs=[1,2]
ax.scatter(xs, ys, zs)
1个回答

7
您正在尝试将分类值(字符串)作为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,可以在一行中完成相同的操作。

输入图像描述


如果 len(xs) 不等于 len(ys),那么 yticks=range(len(xs)), yticklabels=xs 中是否有错别字? - Lei Yang

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