从字典中的双栏绘图

时间:2017-11-24 15:23:45

标签: python python-3.x dictionary matplotlib plot

我对python3不是很有经验,因为我还在学习所以如果我的要求非常明显,我会提前道歉。 所以我有两个文件(.xlsx和.csv),其中一些数据列在不同的DataFrame中。

exp=pd.read_excel('filepath/something.xlsx', keep_default_na=False)
sim=pd.read_csv('filepath/something.csv', keep_default_na=False)

看起来像这样:

print(exp.dataframe_from_exp1)

0     2.2
1     1.0
2     2.0
3     2.7
4     3.5
5     1.3
6     2.2
7     3.0
8     2.1
9     1.7
10    2.5
Name: dataframe_from_exp1, dtype: float64

print(sim[[dataframe_from_sim1]])
        dataframe_from_sim1
0                   2.1
1                   1.3
2                   2.4
3                   2.9
4                   2.4
5                   2.8
6                   2.8
7                   3.6
8                   2.2
9                   2.7
10                  2.5

然后我使用他们的名字将它们安排在字典中:

comparison = {}
comparison['dataframe_from_sim1'] = 'dataframe_from_exp1' 
comparison['dataframe_from_sim2'] = 'dataframe_from_exp2'  

等等。然后,我想要的是在双条图中绘制每个dataframe_from_sim及其对应的dataframe_from_exp,这样我就可以比较给定的11个案例中每个变量的值,并在for循环中进行。像这样:

N=11
x = np.arange(N)
width = 0.35
for key, value in comparison.items():
    fig, ax = plt.subplots()
    bar1=ax.bar(x, key, width, color='r')
    bar2=ax.bar(x + width, value, width, color='b')
    plt.show()

但是,当然,这不起作用。所以,如果你能帮助我,我会非常感激!

1 个答案:

答案 0 :(得分:0)

如果您试图并排查看这些值,则以下内容将起作用:

import matplotlib.pyplot as plt    
import pandas as pd

fig = plt.figure()

exp = pd.read_excel('filepath/something.xlsx', keep_default_na=False)
sim = pd.read_csv('filepath/something.csv', keep_default_na=False)    

exp.plot.bar(color='red', ax=fig.gca(), position=0, width=0.3)
sim.plot.bar(color='blue', ax=fig.gca(), position=1, width=0.3)

plt.show()

给你:

side by side bar plots

这可以扩展为在多对文件上工作,如下所示:

import matplotlib.pyplot as plt    
import pandas as pd
import glob

for xlsx_filename in glob.glob('*.xlsx'):
    name, ext = os.path.splitext(xlsx_filename)
    csv_filename = '{}.csv'.format(name)

    if os.path.exists(csv_filename):
        exp = pd.read_csv(csv_filename, keep_default_na=False)
        sim = pd.read_excel(xlsx_filename, keep_default_na=False)    

        fig = plt.figure(name)
        exp.plot.bar(color='red', ax=fig.gca(), position=0, width=0.3)
        sim.plot.bar(color='blue', ax=fig.gca(), position=1, width=0.3)
        plt.title(name)

plt.show()

这会搜索.xlsx.csv个文件名对。只处理具有匹配对的文件。