2017-02-12 21 views
0

У меня есть два файла в качестве входных данных, которые выглядят следующим образом:Участка Сиборн Barplots в сюжетном с Python

col1 col2 
A B 
C C 
B A 
A A 
A C 
C A 
B B 

Значение, у меня есть два столбца с буквами, разделенных пробелами. Я хочу рассчитать количество вхождений этих букв, каждый столбец в своем собственном барплоте. Предположим, что оба файла имеют разное распределение букв.

Это код:

from collections import Counter 
from os.path import isfile, join 
from os import listdir 
import matplotlib.pyplot as plt 

import seaborn as sns 
sns.set(color_codes=True) 

inputDir = "/tmp/files/" 

inputFiles = [ f for f in listdir(inputDir) if isfile(join(inputDir, f)) ] 

fig, axes = plt.subplots(figsize=(6,6), ncols=2, nrows=len(inputFiles)) 

z=0 

while inputFiles: 

    files = inputFiles[0] 
    inputFiles.remove(files) 

    c = Counter() 
    a = Counter() 

    x1 = [] 
    y1 = [] 
    x2 = [] 
    y2 = [] 

    with open(inputDir + files, "r") as f2: 
    for line in f2: 
     line = line.strip() 
     if line.split(" ")[0] != "col1": 
     c[str(line.split(" ")[0])] += 1 
     a[str(line.split(" ")[1])] += 1 

    try: 
    for cc in c: 
     x1.append(cc) 
     y1.append(c[cc]) 
    row = z // 2 
    col = z % 2 
    ax_curr = axes[row, col] 
    sns.barplot(x1, y1, ax=ax_curr) 

    z+=1 

    for aa in a: 
     x2.append(aa) 
     y2.append(a[aa]) 
    row = z // 2 
    col = z % 2 
    ax_curr = axes[row, col] 
    sns.barplot(x2, y2, ax=ax_curr) 

    z+=1 

    except: 
    continue 

sns.plt.show() 

Результат должен быть один образом, где у меня есть следующий barplots как сюжетные:

--------------------------------------- 
|     |     | 
|     |     | 
| barplot col1 | barplot col2 | 
|  file1  |  file1  | 
|     |     | 
--------------------------------------| 
|     |     | 
|     |     | 
| barplot col1 | barplot col2 | 
|  file2  |  file2  | 
|     |     | 
--------------------------------------- 

Таким образом, высота каждой полосы должна соответствовать номеру каждой буквы.

Проблема до сих пор заключается в том, что бары в каждом подзаголовке выглядят совершенно по-другому, и я не могу понять, почему. Пожалуйста, дайте мне знать, если я могу предоставить дополнительную информацию.

ответ

0

Хотя неясно, что здесь означает «совершенно», может быть, вам нужно полосать линии перед их расщеплением. В противном случае значения последнего столбца могут выглядеть как "B " вместо "B". Также я не уверен, почему вы пытаетесь преобразовать строку в целое число в c[int(line.split(" ")[0])] += 1. Это не имеет большого значения для меня.

Try:

with open(inputDir + files, "r") as f2: 
     for line in f2: 
      line = line.strip() 
      if line.split(" ")[0] != "col1": 
       c[line.split(" ")[0]] += 1 
       a[line.split(" ")[1]] += 1 
+0

Вы полностью право- у меня были разные данные и регулировать свой код в ночь на новые файлы данных, не запуская их. Простите за это. Я скорректировал свой код, и он все еще не работает. В левом верхнем углу у меня есть тысячи баров, в правом верхнем углу всего несколько баров (что не может быть правильным, так как в обоих файлах около 100 тыс. Строк). –

+0

Надеюсь, вы понимаете, что нам нужно поговорить о проблеме на основе информации, которую мы оба имеем здесь. Поэтому, если у вас есть проблема с данными, которые отличаются от того, что вы показываете в вопросе, вам сложно помочь. Затем вам необходимо создать новый [MCVE], уменьшив данные до суммы, которую можно разделить здесь, но все равно воспроизводит проблему. – ImportanceOfBeingErnest