matplotlib 基于条件高亮显示条带图点

1cosmwyk  于 2023-04-12  发布在  其他
关注(0)|答案(1)|浏览(112)

我正在尝试这样做:

import seaborn as sns
import matplotlib.pyplot as plt

# edit me
fig, ax = plt.subplots(figsize=(9, 6))

tips = sns.load_dataset("tips")
#sns.stripplot(data=tips, x = ['f1','f2'], y=[combined_df.r1_feature1,combined_df.r2_feature1], hue="size", palette="deep")
# wide form with x,y missing

params_anno = dict(jitter=0.25, size=5, palette="flare",
                    dodge=True)
if(value of df1 = value of df2):
    params_anno["linewidth"].append(2)
    params_anno["edgecolor"].append("green")
    
ax = sns.stripplot(data=combined_df.drop(
    "cycle_number", axis=1), **params_anno)
ax.set_ylim([0, 25])
ax.set_xlabel(xlabel="Different reads")
ax.set_ylabel(ylabel="values")

if条件应该确定sns.stripplot上的某些点(也就是数据点)是否应该用边缘颜色突出显示。然而,上面的这种方法会失败,因为在满足第一个True示例后,后面的所有内容都会被注解。
我应该怎么做呢?我不知道sns.stripplot(data=combined_df)在处理每个数据点时有多敏捷。ax.annotate可以做到这一点吗?
我尝试过使用sns.stripplot,但困难在于孤立地访问每个数据点,因此如果它满足if条件,则可以以不同的方式进行标记。

rsl1atfo

rsl1atfo1#

选项一

  • 在pandas中使用布尔索引有条件地分离数据,然后将多个条带图绘制到同一个axes
  • Indexing and selecting data
  • 布尔索引
import seaborn as sns

# load data
tips = sns.load_dataset("tips")

# separate the data by a condition
mask = tips.total_bill.gt(20)
gt20 = tips[mask]
lt20 = tips[~mask]

# plot the dataframes in separate stripplots
ax = sns.stripplot(x="day", y="total_bill", hue="smoker", data=lt20, jitter=True, dodge=True)
sns.stripplot(x="day", y="total_bill", hue="smoker", data=gt20, jitter=True, dodge=True, edgecolor='r', linewidth=1, legend=None, ax=ax)

# move the legend if needed
sns.move_legend(ax, bbox_to_anchor=(1, 1.02), loc='upper left')

选项二

import seaborn as sns

# load data
tips = sns.load_dataset("tips")

# new column based on a condition
tips = tips.assign(condition=tips.total_bill.gt(20))

# plot the stripplot with hue set to the new column
ax = sns.stripplot(x="day", y="total_bill", hue="condition", data=tips, jitter=True, dodge=True)

# move the legend
sns.move_legend(ax, bbox_to_anchor=(1, 1.02), loc='upper left')

  • 关于dodge=False

相关问题