覆盖两个大小不同的海底条形图

时间:2019-01-10 02:38:02

标签: pandas matplotlib seaborn

说有两个数据集:一个大的“背景”集和一个更小的“前景”集。前景集来自背景,但可能要小得多。

我有兴趣以有序的sns.barplot来显示整个背景分布,并希望前景设置更亮的对比色以吸引对这些样本的注意。

我能找到的最佳解决方案是在一个图的上方显示一个图,但是发生的情况是该图缩小到较小的域。这就是我的意思:

import matplotlib.pyplot as plt
import seaborn

# Load the example car crash dataset
crashes = sns.load_dataset("car_crashes").sort_values("total", ascending=False)

# states of interest
txcahi = crashes[crashes['abbrev'].isin(['TX','CA','HI'])]

# Plot the total crashes
f, ax = plt.subplots(figsize=(10, 5))
plt.xticks(rotation=90, fontsize=10)
sns.barplot(y="total", x="abbrev", data=crashes, label="Total", color="lightgray")

# overlay special states onto gray plot as red bars
sns.barplot(y="total", x="abbrev", data=txcahi, label="Total", color="red")
sns.despine(left=True, bottom=True)

此数据产生: enter image description here

但是它应该看起来像这样(忽略样式差异): enter image description here

为什么这种方法行不通?什么是更好的方法?

1 个答案:

答案 0 :(得分:1)

Seaborn barplot只是沿着n0的值绘制其n-1数据。相反,如果您使用的是matplotlib bar图,该图是单位感知的(从matplotlib 2.2开始),它将按预期工作。

import matplotlib.pyplot as plt
import seaborn as sns

# Load the example car crash dataset
crashes = sns.load_dataset("car_crashes").sort_values("total", ascending=False)

# states of interest
txcahi = crashes[crashes['abbrev'].isin(['TX','CA','HI'])]

# Plot the total crashes
f, ax = plt.subplots(figsize=(10, 5))
plt.xticks(rotation=90, fontsize=10)

plt.bar(height="total", x="abbrev", data=crashes, label="Total", color="lightgray")
plt.bar(height="total", x="abbrev", data=txcahi, label="Total", color="red")

sns.despine(left=True, bottom=True)

enter image description here