繁体   English   中英

在散点图中突出显示特定点(基于条件)

[英]Highlight specific points (based on a condition) in a scatter plot

我有一个 numpy 数组,我将其转换为数据框以在 matplotlib.pytplot 中对其进行可视化:

x = np.array([[10,10,1], [10,20,0], [10,3,0]])
df = pd.DataFrame(x, columns=["x", "y", "z"])

如果我根据列 z 作为颜色绘制散点图,我会得到以下输出(请注意,我使用的是不同的值):

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
df["val"] = df['z'].apply(lambda x: "red" if x==1 else "blue")
ax.scatter(x=df["x"], y=df["y"], c=df["val"], s=100)
fig = plt.gcf()
fig.set_size_inches(15, 10)
plt.plot()

在此处输入图片说明

所以所有的红点都没有显示在图中。 我怎样才能突出它们?

如果我运行 seaborn 它可以工作,但是在 matplotlib 中有没有办法:

import seaborn as sns
sns.lmplot('x', 'y', data =df, hue='z', fit_reg=False)
fig = plt.gcf()
fig.set_size_inches(15, 10)
plt.show()

在此处输入图片说明

类似的问题: 如何使用 Matplotlib 突出显示点云中的一个点? 只会使点变大,但不会将它们放在前面。 这在某种程度上是误导性的。

为什么不单独绘制它们,以便设置不同的参数? 最重要的是,如果您在之后绘制红点,它们将位于蓝色点之上。

这是一个基于您的示例:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

x = np.array([np.random.rand(2000), np.random.rand(2000), np.random.rand(2000)])
df = pd.DataFrame(np.transpose(x), columns=["x", "y", "z"])

fig, ax = plt.subplots()
df["val"] = df['z'].apply(lambda x: "red" if x>.9 else "blue")

not_red_df = df.loc[df['val'] != 'red']
red_df = df.loc[df['val'] == 'red']

ax.scatter(x=not_red_df["x"], y=not_red_df["y"], c=not_red_df["val"], s=100)
ax.scatter(x=red_df["x"], y=red_df["y"], c=red_df["val"], s=100)

fig = plt.gcf()
plt.plot()

在此处输入图片说明

您可以对数据进行排序,以便最后绘制前景点,如以下示例的下图所示:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(pd.np.random.rand(1000,3), columns=["x", "y", "z"])
df.z = df.z.add(.1).astype(int)
df["val"] = df['z'].apply(lambda x: "red" if x==1 else "blue")

df1 = df.sort_values('z')

fig, ax = plt.subplots(2)
ax[0].scatter(x=df["x"], y=df["y"], c=df["val"], s=100)
ax[1].scatter(x=df1["x"], y=df1["y"], c=df1["val"], s=100)

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM