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

标签 python pandas matplotlib seaborn

我有一个 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()

enter image description here

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

如果我运行 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()

enter image description here

类似问题: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)

enter image description here

关于python - 在散点图中突出显示特定点(基于条件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59214604/

相关文章:

Python:通过添加累计股息并取复合年增长率(CAGR)来计算总返回

python - 如何在 scrapy 爬虫中使用用户名/密码进行身份验证?

python - 如何处理分类数据以在机器学习中进行预处理

Python 在列表或数组的范围内查找数字

python - 如何替换树中的元素? (元素树/ Markdown )

python - Scrapy - 如何管理 cookie/ session

python - 使用 Python/Pandas 根据出现次数选择数据

python - 格式化数据以用于 Streamplot

python - pandas Dataframe 的不同颜色取决于索引号

python - 当x值为pandas时间序列时如何为区域着色