2015-08-25 116 views
0

我有一組具有座標(x,y)的一組點的文件,我使用三角測量方法生成表示曲面的三角形網。三角測量由一個由n個點和n個三角形組成的非結構化三角形網格組成。在Python中繪製密度圖的三角測量方法

數據作圖從CSV文件:

from matplotlib import pyplot as plt 
from pandas import DataFrame 
from matplotlib import style 

df = DataFrame.from_csv('d:\Users\Raquel\Desktop/test.csv', header=0, 
        sep=';') # unpact values into x and y using pandas to  load my csv file 

style.use('ggplot') 

我用這個三角網格,以便能夠計算密度(1 /表面),然後繪製密度圖。

繪製密度圖BY三角測量法

import numpy as np 
from matplotlib.pyplot import (tripcolor, triplot, scatter, 
show, title, savefig, colorbar) 
from matplotlib.tri import Triangulation, TriAnalyzer 

# Coordinates 
x = df['x'].values 
y = df['y'].values 

# Triangulation 
tri = Triangulation(x, y) 

# Coordinates of the edges 
ii1, ii2, ii3 = tri.triangles.T 
x1 = x[ii1] ; y1 = y[ii1] 
x2 = x[ii2] ; y2 = y[ii2] 
x3 = x[ii3] ; y3 = y[ii3] 

# Surfaces 
surf = 0.5*np.abs((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1)) 

# Density 
dens = 1.0/(surf*3) # 3 points per triangle 

# Plot 
xd = (x1+x2+x3)*1.0/3. 
yd = (y1+y2+y3)*1.0/3. 


tripcolor(xd, yd, dens, cmap='cool') 
colorbar() 
title('Density Map') 
savefig('density.png') 
show() 

地圖不是我點的密度的良好表現,我不知道如何改進它......是不是有什麼毛病代碼?

注: 這裏是我的密度圖的圖像: http://postimg.org/image/3y1g90nwd/c8d2af55/

這裏是原始圖像: http://postimg.org/image/lqn1b8lmx/6dca1266/

+0

Mraquel,您可以將您的密度地圖上傳到其他服務並在此處發佈鏈接。 –

+0

非常感謝@CristianoAraujo – Mraquel

+0

你想在這張圖中展示什麼? –

回答

1

而不是使用三角測量法,會更有意義,使用一些密度估計技術,例如

scipy

從根本上(乍),看來你處理所有的三角形爲密度相等的貢獻,

高斯核密度估計,這樣是很遠的地方有表面平等貢獻點密度。如果您選擇了一個簡單的距離閾值來丟棄大三角形的邊緣,您可以這樣做,因此您不會將點連接在任意遠離彼此的距離處。或者如果您使用適當的密度估算技術,那麼您將獲得更好,更自然的結果。

+1

我已經使用了高斯核密度估計,現在我正在嘗試一種不同的方法。你認爲Delaunay三角測量法對於密度圖是一個好主意嗎? @eqzx – Mraquel

+0

高斯內核的KDE有什麼問題?如果兩個點都存在於你的數據集中,你用三角測量做的事情似乎等同於KDE([x1,y1],[x2,y2])= 1,否則爲0 – eqzx