2015-08-30 122 views
1

我正在試驗第一次使用python繪圖,我想通過繪製學生的一些進度來學習我所學到的東西。我的進度數據與下面我嘲笑的格式相同。我用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-FOO可以大大提高這一:)

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。它支持分類軸,並且還支持日期時間分類軸(docs link