我想在一个图中绘制几个箱线图。在我的玩具示例中有三个组。组1具有不同大小的值,但应该在图的最左侧。然后组2-3应该附加在x轴上,并在右侧具有y轴。我尝试通过ax.twinx()
。但是,这并不完全正确。因为它们不共享完整的x轴。但是x-axis
上的顺序很重要,即第1组需要出现在第2组之前,然后是第3组。不幸的是,现在我的第2组与第1组绘制在相同的x位置上。第3组绘制在第2组的x位置上,而不是更靠右
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
df_plot = pd.DataFrame([[0, 10],[0, 10.1],[0, 9.8],[1, 0.4],[1, 0.2], [1, 0.9], [2, 1.2], [2, 0.2], [2, 1]], columns=["x","y"])
x_ticklable = ["Group 1", "Group 2", "Group 3"]
fig, ax1 = plt.subplots(figsize=(2560/120, 1335/120))
sns.boxplot(data=df_plot[df_plot["x"] <= 0],
x="x", y="y",
ax=ax1)
plt.yticks(fontsize=16)
ax2 = ax1.twinx()
sns.boxplot(data=df_plot[df_plot["x"] > 0],
x="x", y="y",
ax=ax2)
ax2.set_ylabel("")
ax1.set_ylabel("Y level",
fontsize="22")
ax1.set_xlabel("Buckets", fontsize="22")
ax1.xaxis.set_ticks(list(range(len(x_ticklable))), fontsize=16)
ax1.set_xticklabels(x_ticklable, fontsize=16)
plt.xticks(fontsize=16)
plt.yticks(fontsize=16)
plt.grid()
plt.show()
plt.close()
1条答案
按热度按时间hc2pp10m1#
对第二个箱线图使用
seaborn.boxplot
函数的order
参数应该可以解决重叠问题。下面是一个工作示例,它应该可以创建所需的图形