Построение данных на Python с использованием строки, ссылающейся на строки в столбцы из файла CSV

#python #python-2.7 #pandas #numpy #matplotlib

#python #python-2.7 #pandas #numpy #matplotlib

Вопрос:

Ниже приведены данные из CSV-файла: каждое значение разделено «ЗАПЯТОЙ».

 SName,Sub1,Sub2,Sub3, ... ,Sub10  
0 A,40,50,33, ... ,78  
1 B,55,55,33, ... ,66  
2 C,99,100,34, ... ,44
 

Я хочу отобразить только строку 0 — это имя ученика: предметные отметки A от Sub1 до Sub 10. График должен состоять из «СТОЛБИКА», столбика с разными цветами!! в зависимости от отметок цвета должны меняться для учащегося.

Если объект имеет минимальный цвет, он отображается КРАСНЫМ… Если объект имеет наивысшие оценки, он должен отображаться другим цветом. Средние оценки по другим предметам разными цветами?

Что мне делать?

Комментарии:

1. Действительно ли нет запятой между значениями для SName и значениями для Sub1?

2. Все это разделенные запятыми долины… Очевидно, что в файле CSV есть @BillBell

3. Тогда, пожалуйста, отредактируйте свой вопрос, чтобы отразить это. Это не совсем очевидно; файл csv может иметь много форматов.

4. @BillBell готово!! теперь у вас есть решение для этого?

5. Интересно, понимаете ли вы, что люди, отвечающие на вопросы SO, являются добровольцами?

Ответ №1:

Возможно, самый простой способ из многих графиков — начать с одного из образцов, доступных в галерее matplotlib. В этом случае я напомнил себе о деталях, используя два примера, поскольку я не часто использую matplotlib. Этот код представляет собой часть решения, поскольку он не считывает значения из csv.

 import matplotlib.pyplot as plt
plt.rcdefaults()
import numpy as np
import matplotlib.pyplot as plt


# Example data
subjects = ['Sub%s'%_ for _ in range(1,11)]
marks = [51,43,55,60,65,43,78,67,88,44]
minMark=min(marks)
maxMark=max(marks)
colors=['green']*len(marks)
for _ in range(len(colors)):
    if marks[_]==minMark:
        colors[_]='red'
    if marks[_]==maxMark:
        colors[_]='yellow'
y_pos = np.arange(len(subjects))

plt.barh(y_pos, marks, align='center',color=colors)
plt.yticks(y_pos, subjects)
plt.xlabel('marks')
plt.title('Subject Marks for Student A')

plt.show()
 

С такими CSV-файлами, как это:

 SName,Sub1,Sub2,Sub3,Sub10  
0,A,40,50,33,78  
1,B,55,55,33,66  
2,C,99,100,34,44
 

вы можете восстановить первую строку меток, используя такой код:

 import csv

first = True
with open('temp2.csv') as csvfile:
    reader = csv.reader(csvfile)
    for line in reader:
        if first:
            first=False
            continue
        marks=line
        break

print (marks)