我正在尝试学习如何创建3D立方图来可视化数据。在这里,我将创建一些模拟数据来表示产品的销售情况。在x轴上,我将尝试绘制年份,在Y轴上,我将尝试绘制销售的产品,在Z轴上,我将尝试绘制这些产品的销售价格。以下是模拟数据集的一行的示例:
year category sales
2002 clothes 275
同样,x轴为年份,y轴为类别,z轴为销售额。
我目前拥有的是:
def plot_cube():
x = []
y = []
z = []
#creating data to plot. 300 total samples. x list will contain years (2001, 2002, and 2003
for i in range(100):
x.append(2001)
for i in range(100):
x.append(2002)
for i in range(100):
x.append(2003)
# creating data to plot. 300 total samples. y list will contain items being sold (clothes, shoes, and hats)
for i in range(100):
y.append("clothes")
for i in range(100):
y.append("shoes")
for i in range(100):
y.append("hats")
# creating data to plot. 300 samples. z list will contain how much in sales
for i in range(300):
z.append(random.randint(200, 300))
arr = []
for i in range(300):
arr.append([x[i], y[i], z[i], 0])
data = zip(*arr)
fig = pyplot.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(data[0], data[1], data[2], c=data[3])
pyplot.show()
#returning x,y,z as lists
return x, y, z
我从不同的论坛中找到了一些方法来组合这个函数,因为我看到很多人都在使用zip()函数,但是,这个函数目前对我来说不起作用,因为它返回了错误:
TypeError: 'zip' object is not subscriptable
我看到一些人通过将'data = zip(*arr)'更改为'data = list(zip(*arr))'来解决这个问题,但是当我这样做时,我得到了一个不同的错误:ValueError: could not convert string to float: 'clothes'
有什么想法吗?
2条答案
按热度按时间p8h8hvxi1#
如果你想把类别放在一个坐标轴上,它必须是一个数值--例如1、2、3 --而不是衣服、鞋子、帽子
smdnsysy2#
ax.scatter()
将X值、Y值和Z值的列表作为输入,因此不需要创建中间数组arr
和data
。然后,X、Y和Z需要是数值,因此将"clothes"、"shoes"和"hat"字符串值Map为数值(例如0、1、2),然后设置
yticks
值标签。下面是一个工作示例: