如何从特定组的条形图中删除空 space,该组在 pandas 数据框中的数据上绘制为 seaborn 条形图
how to remove empty space from bars for a specific group, that was plotted as seaborn bar plot on data in pandas dataframe
我有一个如下所示的数据集:
import pandas as pd, seaborn as sns, matplotlib.pyplot as plt, numpy as np
data = {"country": ["USA", "USA", "USA", "GBR", "GBR", "GBR", "IND", "IND", "IND"],
"sector": ["Others", "Sec1", "Sec2", "Others", "Sec2", "Sec1", "Others", "Sec1", "Sec3"],
"counts": [8763, 8121, 7822, 580, 481, 460, 332, 193, 154]}
df = pd.DataFrame.from_dict(data)
df['counts_log'] = df['counts'].apply(lambda x: np.log10(x))
当我使用以下代码绘制此数据时:
plt.figure(figsize=(18, 6))
sns.barplot(x='country', y='counts_log', hue='sector', data=df, palette='tab10')
plt.legend([],[], frameon=False)
plt.show()
我遇到以下问题(在 IND 的横条之间总是有一些 space):
无论我尝试过什么,它都不会消失。如何解决这个问题?
发生这种情况是因为您的 DataFrame 中缺少值。
你可以清楚地看到他们旋转 df
pivot = df.pivot(index=['country'], columns=['sector'], values='counts_log')
print(pivot)
这给
sector Others Sec1 Sec2 Sec3
country
GBR 2.763428 2.662758 2.682145 NaN
IND 2.521138 2.285557 NaN 2.187521
USA 3.942653 3.909610 3.893318 NaN
所以,IND
Sec2
中有“space”,因为你没有数据。 GBR
Sec3
和 USA
Sec3
.
相同
我可以建议的唯一解决方法是在子图中绘制
color_map = {
'Others': 'C0',
'Sec1': 'C1',
'Sec2': 'C2',
'Sec3': 'C3',
}
df['color'] = df.sector.map(color_map)
fig, ax = plt.subplots(1, 3, figsize=(15, 5), sharey=True)
for i, country in enumerate(df.country.unique()):
_df = df[df.country==country].sort_values(by='sector')
sns.barplot(
ax=ax[i],
data=_df,
x='sector', y='counts_log',
palette=_df.color
)
ax[i].set(
title=country
)
也许这不是您要搜索的内容,但希望对您有所帮助。
我有一个如下所示的数据集:
import pandas as pd, seaborn as sns, matplotlib.pyplot as plt, numpy as np
data = {"country": ["USA", "USA", "USA", "GBR", "GBR", "GBR", "IND", "IND", "IND"],
"sector": ["Others", "Sec1", "Sec2", "Others", "Sec2", "Sec1", "Others", "Sec1", "Sec3"],
"counts": [8763, 8121, 7822, 580, 481, 460, 332, 193, 154]}
df = pd.DataFrame.from_dict(data)
df['counts_log'] = df['counts'].apply(lambda x: np.log10(x))
当我使用以下代码绘制此数据时:
plt.figure(figsize=(18, 6))
sns.barplot(x='country', y='counts_log', hue='sector', data=df, palette='tab10')
plt.legend([],[], frameon=False)
plt.show()
我遇到以下问题(在 IND 的横条之间总是有一些 space):
无论我尝试过什么,它都不会消失。如何解决这个问题?
发生这种情况是因为您的 DataFrame 中缺少值。
你可以清楚地看到他们旋转 df
pivot = df.pivot(index=['country'], columns=['sector'], values='counts_log')
print(pivot)
这给
sector Others Sec1 Sec2 Sec3
country
GBR 2.763428 2.662758 2.682145 NaN
IND 2.521138 2.285557 NaN 2.187521
USA 3.942653 3.909610 3.893318 NaN
所以,IND
Sec2
中有“space”,因为你没有数据。 GBR
Sec3
和 USA
Sec3
.
我可以建议的唯一解决方法是在子图中绘制
color_map = {
'Others': 'C0',
'Sec1': 'C1',
'Sec2': 'C2',
'Sec3': 'C3',
}
df['color'] = df.sector.map(color_map)
fig, ax = plt.subplots(1, 3, figsize=(15, 5), sharey=True)
for i, country in enumerate(df.country.unique()):
_df = df[df.country==country].sort_values(by='sector')
sns.barplot(
ax=ax[i],
data=_df,
x='sector', y='counts_log',
palette=_df.color
)
ax[i].set(
title=country
)
也许这不是您要搜索的内容,但希望对您有所帮助。