如何用Matplotlib讀取dat格式的文件並繪製出曲面圖?

題主做物理的學渣 Python/Matplotlib小白。想用Matplotlib做數據可視化。作為論文的繪圖。

我首先用Fortran做出了一組數據,導出為一組.dat格式的文件。

如圖所示,dat格式的文件中第一列是y軸數據,第二列是z軸(高)數據,並且這組dat文件有各自對應的x值。他們的x值和y值其實都是一系列的固定值。

那麼如何將這些數據讀入程序並且做出如下圖效果的曲面圖?我看了一天的資料也沒有找到有效的辦法(學渣的痛)。近期是deadline,求老司機帶帶我。


問題暫時解決了,我先修改Fortran程序,增加一個循環,讓其輸出格式改變。

然後代碼如下:

#coding:gbk

################################################################
#### A Drawing Program
#### October 16, 2016
#### Lu Niu
################################################################

import csv
import matplotlib
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d
import numpy as np
import os
import pylab
import random
import sys

from matplotlib import cbook
from matplotlib import cm
from matplotlib import pyplot
from matplotlib.colors import LightSource
from matplotlib.ticker import FormatStrFormatter, LinearLocator, MultipleLocator
from mpl_toolkits.mplot3d import Axes3D

with open("Fig01.dat", "r") as fig:
x = []
y = []
z = []
for line in fig:
data = line.split()
x.append((float(data[0])))
y.append((float(data[1])))
z.append((float(data[2])))

fig = plt.figure()
# Load Tex
plt.rc("text", usetex=True)
plt.rc("font", family="serif")
ax = fig.gca(projection="3d")
ax.plot_trisurf(x, y, z, cmap=cm.rainbow, linewidth=0.1, alpha=0.8)
ax.dist=12
ax.view_init(30, -45) # 設置初始視角角度.
ax.set_xlim(0.0, 1.0) # x 軸坐標範圍.
ax.set_ylim(0.0, 320) # y 軸坐標範圍.
ax.set_zlim(-0.05, 0.5) # z 軸坐標範圍.
plt.gca().invert_xaxis() # 顛倒坐標軸.

plt.xlabel(r"$E_r/(hbarGamma)$", fontsize=16)
plt.ylabel(r"$V/V_0$", fontsize=16)
ax.set_zlabel(r"$I_{tot}/I_0$", fontsize=16)

plt.savefig("Alpha", dpi=1024)
plt.show()

然後:#手動滑稽


說白了就是把每列擼成一個列表唄?

def readFile(filename):
with open(filename, "r") as File:
Data = [[float(value) for value in Line.strip().split()]
for Line in File]
return tuple(zip(*Data))


推薦閱讀:

參加山東大學可視計算暑期學校是怎樣一種體驗?
如何利用excel做可視化圖表?
為什麼液晶顯示技術如此成熟,而大部分汽車儀錶盤還是使用物理儀錶而不是液晶顯示界面?

TAG:Python | 數據可視化 | 可視化 | Matplotlib | 計算機圖形學和可視化 |