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