3D分散颜色按分类(x,y)坐标?

时间:2018-01-14 12:21:23

标签: python matplotlib plot 3d

如果散点图具有相同的(x,y)值但具有不同的Z值,我试图使散点图具有相同的颜色。

到目前为止,我设法使用一个变量x或y,但我不能以某种方式将它们“压缩”在一起。

df["X"]=pd.Categorical(df["X"])
df["Y"]=pd.Categorical(df["Y"])
df["X"].cat.codes
df["Y"].cat.codes
bx.scatter(xs,ys,zs, zdir=zs, c=df["X"].cat.codes,cmap="Set1", alpha=1)

我试图单独拉链,我尝试用它们制作一个阵列...如果我尝试

df["cat"]=pd.Categorical(zip(df["X"],df["Y"]))
df["cat"].cat.codes

我得到的只是一个类别代码,所以一切都是一样的。

有什么想法吗? enter image description here

图片澄清

起初我认为日期应该是类别,但这没有意义,因为每天(因为Zaxes采用日期时间格式)会有不同的颜色。 Insstead,每个可能的(x,y)对,即。 (1,-1),(2,1)等应该是一个类别(它是正确使用的词?),因此每一对都应该有自己的颜色,例如(1,-1)是黑色的,( 2,1)是Z坐标的红色 独立

1 个答案:

答案 0 :(得分:0)

事实上,解决方案非常简单,只需要进行一些修补

原始DF有X,Y,日期列。

xs=df.X
ys=df.Y
zs=np.array(df_dates2num)
N=len(df)

val_x=df["X"].tolist()
val_y=df["Y"].tolist()

df["pairs"]=pd.Series(list(zip(val_x,val_y)), index=df.index) #make(x,y) pairs

df["pairs"]=df["pairs"].astype("category") 
df["pairs"]=df.pairs.cat.codes

bx.scatter(xs,ys,zs, zdir=zs, c=df["pairs"], alpha=1, s=50) #scatter dots

它确实有效,唯一缺少的是使用更加离散的调色板。