我有一个数据帧,每两行具有相等的“时间”索引,两个“数据”列具有可能相等的值,value1仅包含正数,value2仅包含负值,以及一行与另一行不同的“类型”列:
time type value1 value2
01:26:00 A 1 -5
01:26:00 B 2 -6
01:28:35 A 3 -7
01:28:35 B 4 -8我可以为文字或组合条形图绘制条形图(当我注释掉line#1时):
df = df.loc['type'] /line #1
df.plot(x='time', y=['value1', 'value2'], kind='bar', stacked=True)我需要的是绘制条形图,时间在X轴上,A的value1和B的value1并排,对面是A的value2和B的value2,就像这样:

非常感谢您的帮助。
发布于 2021-04-12 04:32:08
这可以使用seaborn barplot函数来完成,该函数提供了方便的hue参数,使得并排显示A和B成为可能。在以下示例中,saturation参数用于区分value1和value2:
import io
import pandas as pd # v 1.2.3
import seaborn as sns # v 0.11.1
# Create sample dataset
data = """
time type value1 value2
01:26:00 A 1 -5
01:26:00 B 2 -6
01:28:35 A 3 -7
01:28:35 B 4 -8
"""
df = pd.read_csv(io.StringIO(data), delim_whitespace=True)
# Create bar chart
ax = sns.barplot(data=df, x='time', y='value1', hue='type', saturation=1, zorder=2)
sns.barplot(data=df, x='time', y='value2', hue='type', saturation=0.6, zorder=2, ax=ax)
ax.set_ylabel('value1 and value2', labelpad=10)
# Format chart
ax.grid(axis='y', linewidth=0.5, zorder=1)
ax.axhline(color='black', linewidth=1, alpha=0.3)
ax.tick_params(axis='both', which='major', length=0)
sns.despine(left=True, bottom=True)
# Edit legend
handles, labels = ax.get_legend_handles_labels()
ntypes = df['type'].nunique()
ax.legend(handles[:ntypes], labels[:ntypes], loc=(1.03, 0.5), frameon=False);

https://stackoverflow.com/questions/67030005
复制相似问题