2014-01-14 144 views
2

我想製作一個圖表來顯示數據庫中的日常數據。我以前在這裏爲此特定的一天製作了這個圖表。我對這裏的一些細節並不滿意,我不知道我應該尋找哪些關鍵詞。pyplot座標軸與座標圖之間的距離

什麼我是

enter image description here

但我想圖表看起來像(忽略顏色和等):

enter image description here

在我的形象,在X軸上時間從創建第一個時間戳的時候開始(在圖像顯示的早上8點,但每天從不同的時間開始),但我想要的時間總是從7:00:00開始。這是TimeStamp創建的最早時間。

其次,我想在劇情的邊緣與第一個/最後一個酒吧之間留出一些空間。我不想讓酒吧觸及劇情的邊緣。

我的代碼就在這裏。

import MySQLdb 
import numpy as np 
import matplotlib 
matplotlib.use('Agg') 
import matplotlib.pyplot as plt 
import pandas as pd 

# connect to MySQL database 
conn = MySQLdb.connect(host="localhost", user="r1", passwd="!r1db!", 
db="r1array") 
# prepare a cursor 
cur = conn.cursor() 

# this is the query we'll be making 
query = """SELECT TimeStamp,Pac FROM SolarData WHERE DATE(`TimeStamp`) = CURDATE()-6 GROUP BY HOUR(TimeStamp);""" 

# execute the query 
cur.execute(query) 
# retrieve the whole result set 
data = cur.fetchall() 

# close cursor and connection 
cur.close() 
conn.close() 

# unpack data in TimeStamp (x axis) and Pac (y axis) 
TimeStamp, Pac = zip(*data) 

# graph code 
fig = plt.figure() 
ax = fig.add_subplot() 
plt.bar(TimeStamp, Pac, align='center', width=0.015) 

# set title, X/Y labels 
plt.title("PVIC R1 panel ") 
plt.xlabel("Hour") 
plt.ylabel("Pac") 
fig = plt.gcf() 
fig.set_size_inches(20.5,10.5) 
plt.grid(True) 
plt.draw() 
fig.savefig('test.png', dpi=100) 
+0

您的圖片沒有來過(你沒有足夠的代表張貼他們你的自我,把他們某處公共和高代表用戶可以爲你編輯它們)。還請包括您用於生成圖形的代碼。 – tacaswell

+0

我們正在接近一個很好的問題。如果可以,請刪除SQL語句併發布帶有示例數據的_minimal_工作示例。這樣我們可以重現有問題的圖片。 – Hooked

+0

如果你想避免在事件的邊緣發生事情,還可以看看'ax.margins'(或者等價的,'plt.margins')。在你的具體情況下,如果你不想讓劇情總是在特定的時間開始,並且只希望自動縮放在邊緣留出一些空間,那麼'ax.margins(0.05,0)'會添加5%的填充沿着x方向和沿着y方向的零填充。 –

回答

2

...我想的時間總是從開始7:00:00 ...第二,我要讓劇情的邊緣和第一/最後一棒之間的一些空間。

使用plt.xlim設置開始和結束時間。下面是一些玩具的數據爲例:

import datetime 
import pylab as plt 

# Some sample data 
X = [datetime.datetime(2000, 3, 2, n) for n in xrange(9,13)] 
Y = [4,8,3,2] 

# Set the limits 
start_time = datetime.datetime(2000, 3, 2, 7) 
end_time = datetime.datetime(2000, 3, 2, 14) 

plt.bar(X, Y, align='center',width=.015) 
plt.gcf().autofmt_xdate() 
plt.xlim(start_time, end_time) 
plt.show() 

enter image description here

+0

我明白你的觀點。現在我不知道如何使用TimeStamp格式設置xlim範圍......你知道TimeStamp來自MySQL,而不是matplotlib或python的一部分。 –

+0

按照您生成的圖表,您的上午10點會上升到框的上邊緣。無論如何要避免這一點?我的意思是,將y軸設置爲9以使上午10點杆不會碰到邊緣會更好。 –

+0

@ShuruiLiu這很簡單,只需使用'plt.ylim'設置yaxis的限制。或者如喬在評論中所建議的那樣,使用'plt.margins'給你自己一個「差距」,就像你說的那樣。 – Hooked