我有三维数据,其中一维是分类的:length
,width
,target
。为简单起见,假设target
可以取{0, 1, 2}
中的值。我想绘制length
与width
的对比图target
。这些点会根据目标值有不同的颜色和形状。
我能够在matplotlib.pyplot
中做到这一点,作为plt
导入,使用以下语法。我假设pandas
DataFrame
df
具有我所施加的结构。
X0 = df.query("target == 0.0").drop("target", axis = 1)
X1 = df.query("target == 1.0").drop("target", axis = 1)
X2 = df.query("target == 2.0").drop("target", axis = 1)
ax = plt.axes()
X0.plot(x = "length", y = "width", kind = "scatter", ax = ax, color = "red")
X1.plot(x = "length", y = "width", kind = "scatter", ax = ax, color = "blue")
X2.plot(x = "length", y = "width", kind = "scatter", ax = ax, color = "green")
plt.show()
我相信我们都同意这是bbaaaddd。
几年前,我曾经在R
中做过一些编程。ggplot2
包允许格式为
ggplot(df, x = length, y = width, shape = target).geom_point().
可以将shape = target
替换为colour = target
,以根据target
的值获得不同的颜色。
我想在pyplot
类似的东西。尽管我可能会尝试,但我无法在文档或在线资源中找到此类信息。我相信它一定在某处。我只是没能找到它…
编辑。这道题被标为重复。这些副本有助于解决一些问题,但并不能解决上述所有问题。特别地,不讨论形状。我发现最接近的是以下问题:如何根据列变量改变标记的形状?还有其他类似的问题。但是与一个简单的shape = "target"
调用相比,这是相当丑陋的。
python"软件包,名为plotnine
,但是似乎已经更新了5年。你也似乎需要做像from plotnine import *
这样的事情,我当然不感兴趣。
也许我所追求的功能只是不存在于pyplot
。如果是这样,这就是生活!:)
编辑。@Trenton McKinney建议使用seaborn
,导入为sns
。这有一个hue
选项,它精确地完成不同的颜色。
sns.scatterplot(data = df, x = "length", y = "width", hue = "target")
这仍然没有回答我关于形状的问题——(部分)"重复"也没有回答。然而,sns.scatterplot
也有一个style
选项,它具有与hue
相同的描述,除了"不同的颜色";被替换为"不同的标记"。
sns.scatterplot(data = df, x = "length", y = "width", style = "target")
为什么不疯狂一点,同时使用hue
和style
呢!
我猜正确的答案是"不要做它在matplotlib
;在seaborn
"做它。希望错误的标记为重复将被解决,然后我可以添加一个答案与完整的细节。
怎么样:
for target in [0.0, 1.0, 2.0]:
df.query("target == " + str(target)).drop("target", axis = 1).plot(x =
"length", y = "width", kind = "scatter")
plt.show()