Seaborn在同一X轴上绘制多个条形图

2024-09-26 18:00:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图策划《两只熊猫》系列

Series A

 Private             11210
 Self-emp-not-inc     1321
 Local-gov            1043
 ?                     963
 State-gov             683
 Self-emp-inc          579
 Federal-gov           472
 Without-pay             7
 Never-worked            3
Name: workclass, dtype: int64
Series B

 Self-emp-not-inc    1321
 Local-gov           1043
 State-gov            683
 Self-emp-inc         579
 Federal-gov          472
 Without-pay            7
 Never-worked           3
Name: workclass, dtype: int64
g = sns.barplot(x=A.index, y=A.values, color='green', ax=faxes[ax_id]) # some subplot
g.set_xticklabels(g.get_xticklabels(), rotation=30)
sns.barplot(x=B.index, y=B.values, color='red', ax=faxes[ax_id])

第一个绘图按预期绘制:

enter image description here

然而,一旦我画出第二个,就会出现一些问题(一些条消失,标签不正确,等等)

enter image description here

部分相关。。。如何对y轴使用log(11K vs 3完全隐藏低数值)


Tags: nameselflocalnotaxpayincseries
2条回答

可以将A和B连接到索引中。在其中一行中出现但在另一行中未出现的行将用NaNNA填充,并且不会显示在条形图中

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

A = pd.Series({'Private': 11210,
               'Self-emp-not-inc': 1321,
               'Local-gov': 1043,
               '?': 963,
               'State-gov': 683,
               'Self-emp-inc': 579,
               'Federal-gov': 472,
               'Without-pay': 7,
               'Never-worked': 3}, name='workclass')
B = pd.Series({'Self-emp-not-inc': 1321,
               'Local-gov': 1043,
               'State-gov': 683,
               'Self-emp-inc': 579,
               'Federal-gov': 472,
               'Without-pay': 7,
               'Never-worked': 3}, name='workclass')
df = pd.concat([A.rename('workclass A'), B.rename('workclass B')], axis=1)
ax = df.plot.bar(rot=30, color=['darkgreen', 'crimson'])
plt.tight_layout()
plt.show()

resulting plot

连接的数据帧如下所示:

                  workclass A  workclass B
Private                 11210          NaN
Self-emp-not-inc         1321       1321.0
Local-gov                1043       1043.0
?                         963          NaN
State-gov                 683        683.0
Self-emp-inc              579        579.0
Federal-gov               472        472.0
Without-pay                 7          7.0
Never-worked                3          3.0

请注意,整数不能是NaN,因此B会自动转换为浮点类型

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

A = {'Private':11210,                                                                 
'Self-emp-not-inc':1321,                                                         
'Local-gov':1043,                                                        
'?':963,                                                               
'State-gov':683,                                                                 
'Self-emp-inc':579,                                                              
'Federal-gov':472,                                                               
'Without-pay':7,                                                                 
'Never-worked':3}

B = {'Self-emp-not-inc':1321,                                                        
'Local-gov':1043,                                                               
'State-gov':683,                                                                
'Self-emp-inc':579,                                                             
'Federal-gov':472,                                                              
'Without-pay':7,                                                                
'Never-worked':3}

df = pd.concat([pd.Series(A, name='A'), pd.Series(B, name='B')], axis=1)
sns.barplot(y=df.A.values, x=df.index, color='b', alpha=0.4, label='A')
sns.barplot(y=df.B.values, x=df.index, color='r', alpha=0.4, label='B', bottom=df.A.values)
plt.yscale('log')

enter image description here

相关问题 更多 >

    热门问题