2013-08-05 564 views
2

用matplotlib如何用這些數據繪製圖表是可能的。問題是要顯示從第2列到第3列的距離。在結尾它應該看起來像一個gant時間圖。用python創建甘特圖matplotlib

0 0 0.016 19.833 
1 0 19.834 52.805 
2 0 52.806 84.005 
5 0 84.012 107.305 
8 0 107.315 128.998 
10 0 129.005 138.956 
11 0 138.961 145.587 
13 0 145.594 163.863 
15 0 163.872 192.118 
16 0 192.127 193.787 
17 0 193.796 197.106 
20 0 236.099 246.223 
25 1 31.096 56.180 
27 1 58.097 64.857 
28 1 64.858 66.494 
29 1 66.496 89.908 
31 1 89.918 111.606 
34 1 129.007 137.371 
35 1 137.372 145.727 
39 1 176.097 209.461 
42 1 209.476 226.207 
44 1 226.217 259.317 
46 1 259.329 282.488 
47 1 282.493 298.905 

我需要2種顏色爲第1列。而對於y軸的第0列被選擇時,對於在x軸上列2和3是非常重要的。對於每一行,應繪製一條線。第2列是開始時間,第3列是停止時間。

+0

你嘗試過什麼?如果你向我們展示了你所嘗試過的東西,那麼你會得到更好的回答,因爲你現在的問題立場是「請爲我做我的工作」。 – tacaswell

+0

我是初學者,你是對的。但我嘗試過很多次。繪圖不是問題,但甘特圖的設計是。對於甘特圖設計,沒有可用的實例。 – Thor

+0

然後至少向我們展示_anything_以表明您已經嘗試並作爲起點。 – tacaswell

回答

12

如果我已經正確理解了你,你想繪製第3列和第4列的x值之間的水平線,其中y值等於列0中的水平線。在給定的y軸上繪製水平線,兩個x值之間的值,您可以使用hlines。我相信下面的代碼是一個可能的解決方案。

import numpy as np 
import matplotlib.pyplot as plt 

# Read data from file into variables 
y, c, x1, x2 = np.loadtxt('data.txt', unpack=True) 

# Map value to color 
color_mapper = np.vectorize(lambda x: {0: 'red', 1: 'blue'}.get(x)) 

# Plot a line for every line of data in your file 
plt.hlines(y, x1, x2, colors=color_mapper(c)) 

The resulting output

+0

這看起來非常像甘特圖。如果你感到更加痛苦 - 比如學習LaTeX,請嘗試[LaTeX pgfgantt](http://www.ctan.org/pkg/pgfgantt)。 – Sven

+0

不錯的包裝,但不適用於大數字。在數據> 300的情況下,它不適合放在一頁上。使用\ noindent \ resizebox {\ textwidth} {!}縮放tex框後,不能讀取軸標籤。 – Thor

1

例如,您可以使用numpy.loadtxt讀取文本文件,然後使用matplotlib對其進行繪圖。例如:

import numpy as np 
import matplotlib.pyplot as plt 

x, y = np.loadtxt('file.txt', usecols=(2,3), unpack=True) 
plt.plot(x,y)  

您應該看到matplotlib documentation以獲取更多選項。

+0

我已經有了Python中的數據。列2+ 3在x軸上,如時間軸。列0是y軸 – Thor