使用 Seaborn 绘制条形图

时间:2021-04-11 15:03:17

标签: python pandas dataframe seaborn

我是数据可视化领域的新手。我正在练习 Seaborn,我正在尝试使用此数据框绘制条形图。我希望图表在每个符号上有 3 个条形,但是,每个符号上的输出只有 1 个条形。我可以知道如何修复它吗?

数据帧的一部分...

        returns_7d  returns_30d returns_ytd
symbol          
TDOC    -0.210839   -17.712095  -3.922423
EXAS    -4.649067   -6.439275   -1.415680
PACB    -2.953760   11.886232   37.815711
REGN    0.465364    5.803325    -0.629814
TWST    6.707956    3.619967    10.4043

代码如下:

import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns

# Change the style of the figure to the "dark" theme
sns.set_style("darkgrid")

plt.figure(figsize=(12,6))
plt.title('YTD Returns')

sns.barplot(x=returns_all.index,y=returns_all['returns_7d'],color='b',edgecolor='w',label='returns_7d')
sns.barplot(x=returns_all.index,y=returns_all['returns_30d'],color='r',edgecolor='w',label='returns_30d')
sns.barplot(x=returns_all.index,y=returns_all['returns_ytd'],color='g',edgecolor='w',label='returns_ytd')


plt.xlabel('symbol', fontsize=11)
plt.ylabel('%', fontsize=11)
plt.xticks(rotation = 90)
plt.legend()
plt.show()

输出如下:

enter image description here

2 个答案:

答案 0 :(得分:1)

我认为 pandas.DataFrame.plot() 是您的全部需求。

df.plot(kind='bar')

enter image description here

答案 1 :(得分:1)

要使用 seaborn 创建这样的图,请注意 seaborn 更喜欢 "long form" 中的数据。 reset_index 将索引转换为常规列,melt 将列转换为 function BranchList() { const [isLoaded, setIsLoaded] = useState(false) const dispatch = useDispatch() useEffect(() => { if(!isLoaded) { dispatch(fetchBranches()) .then(() => setIsLoaded(true)) } }, [isLoaded]) const branches = useSelector(state => state.branches.branches) const headerNames = ["Id", "Name"] if (!isLoaded) { return <>Loading...</> } return ( <EditableTable data={branches} headerNames={headerNames} onEditConfirm={(row) => dispatch(updateBranch(row))} onDelete={(id) => dispatch(deleteBranch(id))} /> ) } 对。

<variable, value>

seaborn barplot with columns in long form

长数据框看起来像:

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
from io import StringIO

data_str = '''   returns_7d  returns_30d returns_ytd  
TDOC    -0.210839   -17.712095  -3.922423
EXAS    -4.649067   -6.439275   -1.415680
PACB    -2.953760   11.886232   37.815711
REGN    0.465364    5.803325    -0.629814
TWST    6.707956    3.619967    10.4043'''
df = pd.read_csv(StringIO(data_str), delim_whitespace=True)
df.index.name = 'symbol'
df_long = df.reset_index().melt(id_vars='symbol')

sns.barplot(data=df_long, x='symbol', y='value', hue='variable', palette='rocket')
plt.show()