我有一个 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()
类似问题:How can I highlight a dot in a cloud of dots with Matplotlib? 只使点变大,但不将它们放在前面。这在某种程度上是一种误导。
最佳答案
您可以对数据进行排序,以便最后绘制前景点,如以下示例的下图所示:
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)
关于python - 在散点图中突出显示特定点(基于条件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59214604/