2013-04-24 341 views
1

我有下面的代碼來生成表面密度圖。 x和y是位置co =縱座標,z軸代表密度。所有的值都是預先計算好的,並存儲在一個numpy數組中。格式化X軸刻度

#set up the grid 
xi, yi = np.linspace(x.min(), x.max(), 200), np.linspace(y.min(), y.max(), 200) 
xi, yi = np.meshgrid(xi, yi) 
#interpolate 
rbf = scipy.interpolate.Rbf(x, y, z, function='linear') 
zi = rbf(xi, yi) 

plt.imshow(zi, vmin=z.min(), vmax=z.max(), origin='lower', extent=[x.min(), x.max(), y.min(), y.max()]) 
plt.scatter(x, y, c=z,marker='o') 
plt.colorbar() 
plt.scatter(xo,yo, c='b', marker='*') 

plt.xlabel("RA(degrees)") 
plt.ylabel("DEC(degrees)") 
plt.title('Surface Density Plot 2.0 < z < 2.2') 
plt.savefig('2.0-2.2.png', dpi= 300) 

plt.show() 

我的問題是x軸蜱不是用戶友好方面,他們是150-152之間的值,但我似乎無法改變使用xticks()函數的蜱位置。 會有人有一個建議,我可以去格式化X軸?

edit- 這些是用於繪圖的xyz的值。 x,y,z是三個numpy數組 - https://www.dropbox.com/s/l03pkzplqmfm1su/xyz.csv 第一行是x值,第二行是y和第三個z。

+0

使用xticks是手動設置x軸刻度的正確方法。通常情況下,形式爲'plt.xticks(plt.arange(150,152,0.5))'是合適的。 「xticks」的論點在這裏是關鍵,你可以給你嘗試使用的代碼嗎? – Greg 2013-04-24 09:02:22

+0

@ user2145647謝謝,但我的問題是即使蜱變化與xticks = [150.05,150.10,150.15,150.20,150.25] plt.xticks(xticks)函數,X軸仍然結束了奇數單位1.5 e2倍數 – firefly 2013-04-24 12:59:12

+0

@ user2145647此鏈接有輸出圖像 dropbox.com/s/bxji5sa84i1bsyz/2.0-2.2.png – firefly 2013-04-24 13:06:25

回答

1

當使用pyplot界面,可以設置通過xticks(只要你輸入matplotlib.pyplot如PLT)

plt.xticks(*args, **kwargs) 

,您可以給蜱-位置如。作爲一個列表或一個numpy數組,並將tick標籤作爲一個touple(或list,...)。但是,請包括我們可以運行的代碼的一個最小示例,以便我們可以測試它是否正常工作,並且看看爲什麼不行,如果是這樣的話。此外,您似乎已將matplotlib導入爲plt,但您的某些命令(如xlabel)缺少plt.部分。這只是一個錯字或複製/粘貼錯誤?

如果你想更多的微調你的滴答和滴答格式,你應該考慮使用matplotlib的OO接口。是的,這是更詳細的,你必須鍵入更多的字母,但在我看來,代碼變得更清晰,你有更多的可能性來調整圖表,以符合您的期望。

編輯:據我的理解,你對xtick標籤的格式不滿意。所以,而不是「0.0」「+ 1.5e2」你可能想要「150.0」左右。該功能尋找到(使用pyplot接口)是:

plt.ticklabel_format(**kwargs) 

的kwargs在這裏here所示。你應該嘗試,如果style='plain'符合你的要求。

我再次強調,OO界面賦予您更多的多功能性來更改刻度標籤的格式。各自的功能如下:

matplotlib.axes.yaxis.set_major_formatter() 
matplotlib.axes.xaxis.set_major_formatter() 

您可以選擇幾種格式化程序,甚至可以編寫自己的格式化函數。如果你想這樣做,我可以給你進一步的建議。

+0

感謝您的建議。我做到了這一點,正如我提到的user2145647 ticks的數量和他們的位置相應地改變,但他們仍然在1.5e2相同的單位,而不是150.1等。 – firefly 2013-04-24 13:03:34

+0

此鏈接有我得到的輸出圖像 https:// www .dropbox.com/s/bxji5sa84i1bsyz/2.0-2.2.png – firefly 2013-04-24 13:05:31

+0

@firefly:我已經編輯了上面的答案,希望我現在能夠理解你的意思。 – Marius 2013-04-24 13:50:44

0

螢火蟲,基於您在評論中給出的dropbox image我相信以下描述了您的問題。 X數據的大小比的變化大得多,所以Python有像

[150.05,150.10,150.15,150.20,150.25] 

這是在這個數字使Python做一些聰明的業務,你不喜歡x軸太大值的列表(並且我同意)。

一個修復可能是簡單地設置垂直xticks。摹

py.xticks(rotation='vertical') 

如果做不到這一點,你可以做手工試圖什麼蟒蛇,從X軸減去150度,改變你的xlabel這樣,你有

plt.xlabel("RA+150(degrees)") 

如果你的數據不度我反而建議重新調整比例(例如除以1e2),但以度數來看,這看起來很奇怪。

+0

垂直函數並不是我要找的,它確實給出了更多的空間,但我寧願使用線性標度來減少剔除。 – firefly 2013-04-26 02:14:52