您可以加載np.recfromcsv文件。然後,我們將時間列轉換爲日期時間對象,爲此我們定義一個convtime
函數。然後我們使用這個函數來讀取你的CSV文件。
import numpy as np
import matplotlib.pyplot as plt
convtime = lambda x: datetime.datetime.strptime(x, "%H:%M")
all_records = np.recfromcsv("myfilename.csv", names=["time", "user", "val"], converters={0:convtime}) # This says parse column 0 using the convtime function
注意,因爲我們只給定時間部分datetime
,它將承擔日期爲1月1日1900年,如果你關心你可以添加相關的日期吧。
現在,繪製數據。這給我們帶來了一個奇怪的問題,matplotlib只能爲繪製的所有點使用一個符號。不幸的是,這意味着我們必須使用for循環。首先,讓我們定義dict
S爲符號和色彩爲每個用戶:
symbols = {'user1':'*', 'user3':'o', 'empty':'x'}
colours = {'user1':'blue', 'user3':'red', 'empty':'orange'}
for rec in all_records:
plt.scatter(rec['time'], rec['val'], c=colours[rec['user']], marker=symbols[rec['user']])
這幾乎做的。我們仍然錯過了這個傳說。這個for循環的缺點是文件中的每一行都會在圖例中創建一個條目。我們通過創建自定義圖例來打敗這個。
import matplotlib.lines as mlines
legend_list = []
for user in symbols.keys():
legend_list.append(mlines.Line2D([], [], color=colours[user], marker=symbols[user], ls='none', label=user))
plt.legend(loc='upper right', handles=legend_list)
plt.show()
這樣做!如果你的情節出現擠壓,然後使用plt.xlim()
來調整你的口味限制。
來源
2017-04-27 09:32:15
VBB