创建具有不同颜色和标记的带状图 - 覆盖问题
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()
我想创建一个包含具有不同颜色和标记的数据的带状图。 问题: 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()