你很幸运! plot 有一个zorder kwarg。
为了确定,我在bar 上测试了它,并使用了我放置的示例。
summer = ax.bar(index, df["Crime Type Summer"].value_counts(), bar_width,
label="Summer", zorder=2)
winter = ax.bar(index, df["Crime Type Winter"].value_counts(),
bar_width, label="Winter", zorder=1)
给予:
如果我反转它:
summer = ax.bar(index, df["Crime Type Summer"].value_counts(), bar_width,
label="Summer", zorder=1)
winter = ax.bar(index, df["Crime Type Winter"].value_counts(),
bar_width, label="Winter", zorder=2)
编辑:我查看了其中的“条中的条”部分,并且如其他地方的 cmets 所述,您似乎需要根据其值的排序手动设置 zorder。您可能希望根据计算得到的 zorder 修改条形宽度以获得该视觉效果。
为了清楚起见,下面给出了我用作参考示例的完整代码:
import random
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
s = "Crime Type Summer|Crime Type Winter".split("|")
j = {x: [random.choice(["ASB", "Violence", "Theft", "Public Order", "Drugs"]) for j in range(300)] for x in s}
df = pd.DataFrame(j)
index = np.arange(5)
bar_width = 0.35
fig, ax = plt.subplots()
summer = ax.bar(index, df["Crime Type Summer"].value_counts(), bar_width,
label="Summer", zorder=1)
winter = ax.bar(index, df["Crime Type Winter"].value_counts(),
bar_width, label="Winter", zorder=2)
ax.set_xlabel('Category')
ax.set_ylabel('Incidence')
ax.set_title('Crime incidence by season, type')
ax.set_xticks(index)
ax.set_xticklabels(["ASB", "Violence", "Theft", "Public Order", "Drugs"])
ax.legend()
plt.show()