2016-11-29 56 views
3

我试图在seaborn中为我的数据框中的每一行(因子)显示两个变量(权重,方差)的值来创建条形图。这里是我的数据是什么样子:在seaborn中绘制两列dataFrame

Factor Weight Variance 
    Growth 10%  0.15 
    Value  20%  0.35 

这里是我的代码:

fig=plt.figure(figsize=(10,10)) 
    ax1=fig.add_subplot(221) 
    sns.barplot(x=df.index, y=df[['Weight', 'Variance']], ax=ax1) 

每一次,我都不能进行调试上述抛出回一个错误。我试图实现的是有一个阴谋,显示每个因素的两个彩条;一种颜色的重量(例如:红色)和另一种颜色的变化(例如:蓝色)。

任何人都有建议或潜在的解决方法吗?

感谢

+0

有什么错误? – wflynny

+0

ValueError:无法将尺寸为2的序列复制到尺寸为9的数组轴上 –

+1

您需要将数据转换为长整型,然后使用“hue”变量绘制 –

回答

5

除了您的数据清理成一个整洁的格式,你需要将文本数据(百分比)重新格式化为数字数据类型。由于已经无关barplots,我会认为你可以把你自己照顾这一点,并专注于绘图和数据结构,而不是:

df = pandas.DataFrame({ 
    'Factor': ['Growth', 'Value'], 
    'Weight': [0.10, 0.20], 
    'Variance': [0.15, 0.35] 
}) 
fig, ax1 = pyplot.subplots(figsize=(10, 10)) 
tidy = (
    df.set_index('Factor') 
     .stack() # un-pivots the data 
     .reset_index() # moves all data out of the index 
     .rename(columns={'level_1': 'Variable', 0: 'Value'}) 
) 
seaborn.barplot(x='Factor', y='Value', hue='Variable', data=tidy, ax=ax1) 
seaborn.despine(fig) 

enter image description here

+0

不错。如果你能展示整洁的数据框是怎么样的,我想这会有所帮助! – jrjc

+0

@jrjc我在我的代码中构造它。 OP很容易打印出来。 –

+0

@PaulH谢谢你的帮助。我不知道我必须使用reset_index命令来反转数据。是的,数据始终是数字形式的,当我将它输入到对话框时,这只是我的错误。 –

相关问题