2015-08-30 3 views
1

Я экспериментирую с графическим отображением на питоне в первый раз, и я хочу попробовать то, что я узнал, графически отображая прогресс моего ученика. Мои данные о ходе работы находятся в таблице в формате, аналогичном тому, что я издевался ниже. Я использовал MSPaint (извините), чтобы высмеять то, что, на мой взгляд, было бы приличным графиком, чтобы показать им их прогресс.Использование Python для перехода к успеху ученика

Какое правильное название для этого типа графика и каковы были бы первые шаги для его достижения? Я не вижу ничего подобного на http://matplotlib.org/ или на https://plot.ly/

Пожалуйста, не стесняйтесь сказать мне, что я неправильно начертал график. Quick MSpaint mockup

+0

Возможно, это может поставить вас на правильный путь: http://matplotlib.org/examples/api/barchart_demo.html G1, G2 ... может быть ваши недели, а мужчины/женщины - ваши ученики. –

ответ

1

я принял удар на генерирует пример диаграмму в Matplotlib. Я подозреваю, что другие с более сильным Matplotlib-обув может значительно улучшить это :)

import matplotlib.pyplot as plt 
import numpy as np 

students = ['steve', 'bob', 'ralph'] 
progress = [ 
[1, 3, 4, 4, 5], 
[2, 3, 4, 4, 5], 
[3, 3, 4, 5, 5]] 

(fig, ax) = plt.subplots(1, 1) 

# Offset lines by some fraction of one 
dx = 1.0/len(progress) 
xoff = dx/2.0 
for i, (name, data) in enumerate(zip(students, progress)): 
    ax.plot(np.arange(len(data)) + xoff, data, label=name, marker='o') 
    xoff += dx 

ax.set_xticks(np.arange(0, len(progress[0]) + 0.01, dx), minor=True) 
ax.set_xticks(np.arange(1, len(progress[0])+1)) 
labels = students * len(progress[0]) 
week = 1 
for i,l in enumerate(labels): 
    if l == students[1]: 
    # hack to add Week label below the second label for each block 
    labels[i] = "%s\nWeek %s" % (l, week) 
    week += 1 
ax.spines['top'].set_visible(False) 
ax.spines['right'].set_visible(False) 

ax.set_xticklabels(labels, fontsize=8, ha='left', minor=True) 
ax.set_xticklabels([]) 
ax.tick_params(which='both', direction = 'out') 
ax.tick_params(axis='x', which='major', width=4) 
ax.tick_params(axis='x', which='major', length=7) 
ax.tick_params(axis='y', which='major', width=0, length=0) 

ax.set_ylim(0, 6) 
ax.set_yticks(range(1, 6)) 

ax.get_xaxis().tick_bottom() 
ax.get_yaxis().tick_left() 

ax.set_title("Student Progress") 

ax.legend(loc='best') 

fig.show() 

example figure

0

Нечто подобное, вероятно, что вы ищете

import matplotlib.pyplot as plt 

weeks = range(1,6) 
steve = [1, 3, 4, 4, 5] 
bob = [2, 3, 4, 4, 5] 
ralph = [3, 3, 4, 5, 5] 

plt.figure() 
plt.plot(weeks, bob, label='Bob') 
plt.plot(weeks, steve, label='Steve') 
plt.plot(weeks, ralph, label='Ralph') 
plt.title('Student Progress') 
plt.ylabel('Score') 
plt.xlabel('Week') 
plt.xticks(range(6)) 
plt.ylim(0, 6) 
plt.legend(loc='lower right') 
plt.show() 

enter image description here

+0

Давая каждой строке другой стиль тире, она становится немного более очевидной, когда у двух учеников одинаковая неделя-неделя (Бобу трудно выбрать в этом примере - неделя с 4 по 5, как он это сделал?) – cphlewis

0

Попробуйте bokeh. Он поддерживает категориальные оси и дополнительно поддерживает топологические топологии datetime (docs link)

 Смежные вопросы

  • Нет связанных вопросов^_^