带分类轴的3D绘图[Python / Matplotlib]

时间:2014-07-01 11:45:57

标签: python-2.7 numpy matplotlib pandas

尝试用以下内容绘制三维图:

x轴 - 值(浮点数) y轴 - 值(浮点) z轴 - 类别(字符串)

现在我尝试使用pandas.factorize(table.zcolumn)转换z向量

Output: (array([ 0,  0,  0, ..., -1, -1,  1]), Index([u'London', u'National'], dtype='object'))

所以我可以绘制数字没问题。

你会看到有NaN值转换为-1,因此当我绘制图形时,有一堆值为-1。该数据包含伦敦,国家和NaN类别。

如何标记轴以适合我的数据?我觉得应该有一个简单的功能来匹配它。

在z轴上,我需要重新分配刻度-1以变为“NA”,0变为“伦敦”,1变为“国家”

我也对使用大量类别的方法感兴趣,因此不需要手动输入每个类别字符串的代码

regions = pandas.factorize(dataTable.Region[id_range])
regions_num = regions[0]

fig = plot.figure()
ax = fig.add_subplot(111,projection='3d')
ax.scatter(y, x, zs=regions_num)

ax.axes.set_zticklabels(["London","National","N/A"])

plot.show()

The problem: Z-Axis labels do not match discrete values (at -1, 0, 1)

1 个答案:

答案 0 :(得分:1)

您只需将zticks设置为与您的类别对应的三个z值:

ax.axes.set_zticks(regions_num)

话虽如此,我并不认为这实际上是一种绘制数据的好方法。当X,Y和Z值都是连续变量时,3D绘图最有用。将区域表示为不同的z水平可能会更有意义,如果' region'是一个序数变量,但有任何理由'N/A'应该更高'比'National'? 3D绘图通常比2D绘图更难阅读 - 例如,由于透视投影,'National'类别附近的点可能看起来很像一个更远的点但是在'N/A'类别中。

更合适的选择可能是将这些数据表示为2D轴上的散点图,不同的颜色对应于不同的类别。