使用 seaborn 深色主题并删除条形图中条形之间的间隙

use seaborn dark theme and remove the gap between bars in a bar plot

我想要一个条形图之间没有间隙的条形图,所以我在 plt.bar 中使用了 width=1,它起作用了。

# IMPORTS
import seaborn as sns
import pandas as pd
import datetime
import matplotlib.pyplot as plt

# DUMMY DATAFRAME
my_dict = {'date': {0: datetime.date(2021, 5, 18),  1: datetime.date(2021, 5, 19),  2: datetime.date(2021, 5, 20),  
  3: datetime.date(2021, 5, 21),  4: datetime.date(2021, 5, 22),  5: datetime.date(2021, 5, 18),
  6: datetime.date(2021, 5, 19),  7: datetime.date(2021, 5, 20),  8: datetime.date(2021, 5, 21),  
  9: datetime.date(2021, 5, 22)},
 'campaign': {0: 'A',  1: 'A',  2: 'A',  3: 'A',  4: 'A',  5: 'B',  6: 'B',  7: 'B',  8: 'B',  9: 'B'},
 'metric': {0: 'cost',  1: 'cost',  2: 'cost',  3: 'cost',  4: 'cost',  5: 'cost',  6: 'cost',  7: 'cost',
  8: 'cost',  9: 'cost'},
 'value': {0: 2.01,  1: 2.62,  2: 1.95,  3: 2.03,  4: 2.13,  5: 38.67,  6: 45.86,  7: 42.14,  8: 37.9,
  9: 34.23}}

df = pd.DataFrame(my_dict)

# FACETGRID PLOT
g = sns.FacetGrid(df, col='campaign', hue='metric', 
                  col_wrap=2, palette = ['goldenrod','steelblue'],height=5)

g = g.map(plt.bar, 'date', 'value',alpha = 0.6, width=1)

for ax in g.axes.ravel():
    ax.set_xticklabels(ax.get_xticklabels(), rotation=90)
plt.show()

但我也想要深色背景,所以我在使用 FaceGrid 之前添加了 sns.set_theme(style="dark")。现在,间隙,条形之间的白色边缘线,又回来了。

我可以消除差距并仍然使用深色主题吗?

您可以使用 set_style 并覆盖 patch.edgecolor(参见 overriding elements of the seaborn styles)。

sns.set_style('dark', {"patch.edgecolor": 'None'})

输出:

编辑:

或与 set_theme 类似:

sns.set_theme(style='dark', rc={"patch.edgecolor": 'None'})