2017-11-24 4 views
0

나는 아직도 배울 정도로 나는 python3에 익숙하지 않다. 그래서 내가 묻는 것이 꽤 분명하다면 나는 사과를 전한다. 그래서 다른 데이터 프레임에 나열된 일부 데이터가있는 두 개의 파일 (.xlsx 및 .csv)이 있습니다.사전에서 두 개의 막대 작도

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

'exp'와'sim'에 대한 샘플을 포함하도록 질문을 편집해야하며, 문제를 재현 할 수 있도록해야합니다. –

+0

답변 해 주셔서 감사합니다. 이미 질문을 업데이트했습니다. – glitchb3rt

답변

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 파일 이름 쌍의 경우 일치하는 쌍이있는 파일 만 처리됩니다.

+0

네, 그게 제가 원하는 것입니다. 하지만 for 루프에서 어떻게 처리 할 수 ​​있을까요? (즉, dataframe_from_exp2와 dataframe_from_sim2, dataframe_from_exp3, dataframe_from_sim3 등)에있는 각 DataFrame의 플롯을 자동으로 가져오고 각각에 대해 동일한 코드를 반복해서 쓰지 않아도됩니다. DataFrames 쌍? 그것이 내가 사전을 사용할 수 있다고 생각한 이유입니다 ... – glitchb3rt

+0

비슷한 데이터를 가진'.xlsx'와'.csv' 파일을 많이 읽으려고하십니까? 쌍 데이터입니까? 예 : 하나의 .csv 파일로'.xlsx' 파일 하나? –

+0

예, 데이터 쌍입니다. 각각의'.xlsx'와'.csv'에는 10 개의 변수와 N 개의 값 (이 경우 N = 11)이 있습니다. 각 .xlsx의 각 변수는'.csv' 파일에 자매가 있습니다. 내가 뭘 하려는지는'.csv'와'.csv '의 변수 인 사전의 키와 값을 사용하여'for' 루프를 사용하여 각 파일 쌍에서 오는 10 개의 그래프를 출력하는 것입니다. xlsx') – glitchb3rt