创建具有不同颜色和标记的带状图 - 覆盖问题

create a stripplot with different colors and markers- override problem

我想创建一个包含具有不同颜色和标记的数据的带状图。 问题: y 轴值被进入图表的最后数据覆盖。

我该如何解决这个问题?

代码:

    import matplotlib.pyplot as plt
    import seaborn

    data1 = {"days": ["Monday", "Monday"], "Pay": [6,9]}
    data2 = {"days": ["Thursday", "Thursday"], "Pay": [5,4]}

    seaborn.stripplot(x="Pay", y="days", data=data1, dodge=True,palette=["red"], marker="^",linewidth=1)
    seaborn.stripplot(x="Pay", y="days", data=data2, dodge=True,palette=["blue"], marker="o",linewidth=1)

    plt.grid(color='green', linestyle='--', linewidth=0.5)
    plt.show()

我得到的条形图: 我想得到的:

新更新: 这可以通过 order= 关键字解决,或者通过明确地使数据分类。

Pandas' pd.Categorical 可以设置显式排序:

import pandas as pd
all_days = ["Monday", "Thursday"]
data1["days"] = pd.Categorical(data1["days"], all_days)
data2["days"] = pd.Categorical(data2["days"], all_days)

更简单的方法是使用 order= 关键字

import matplotlib.pyplot as plt
import seaborn

data1 = {"days": ["Monday", "Monday"], "Pay": [6, 9]}
data2 = {"days": ["Thursday", "Thursday"], "Pay": [5, 4]}

all_days = ["Monday", "Thursday"]

seaborn.stripplot(x="Pay", y="days", data=data1, order=all_days, dodge=True, palette=["red"], marker="^", linewidth=1)
seaborn.stripplot(x="Pay", y="days", data=data2, order=all_days, dodge=True, palette=["blue"], marker="o", linewidth=1)

plt.grid(color='green', linestyle='--', linewidth=0.5)
plt.tight_layout()
plt.show()