Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Seaborn在同一x轴上绘制多个条形图_Python_Seaborn - Fatal编程技术网

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

Python Seaborn在同一x轴上绘制多个条形图,python,seaborn,Python,Seaborn,我正试图策划《两只熊猫》系列 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-wo

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

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
第一个绘图按预期绘制:

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


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

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

导入matplotlib.pyplot作为plt
作为pd进口熊猫
导入seaborn作为sns
A=pd.系列({'Private':11210,
“自我emp非公司”:1321,
“地方政府”:1043,
'?': 963,
“州政府”:683,
“自我管理公司”:579,
“联邦政府”:472,
"无薪":7,,
“从未工作过”:3},name='workclass')
B=pd.系列({'Self-emp-not-inc':1321,
“地方政府”:1043,
“州政府”:683,
“自我管理公司”:579,
“联邦政府”:472,
"无薪":7,,
“从未工作过”:3},name='workclass')
df=pd.concat([A.rename('workclass A'),B.rename('workclass B')),axis=1)
ax=df.plot.bar(rot=30,颜色=['darkgreen','crimson']
plt.紧_布局()
plt.show()

连接的数据帧如下所示:

                  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')

你不能将这两个数据集连接到一个数据框中吗?第二个问题是
matplotlib.pyplot.yscale('log')
@aerijman是的,我可以将这个系列连接到一个数据框中,但这如何解决问题呢?@JohanC一个相邻条的绘图对我来说没问题,但是,当序列中的一个没有某些x轴标签的值时,如何解决对齐问题呢。。。我应该先把它们填上零吗?@mbim为了您的方便,我发布了答案。加入本系列,您只需以相同的顺序解析两个系列的索引。谢谢!即将发布一个(几乎)相同的解决方案。。。还为我保存了如何设置颜色的搜索:-)
                  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
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')