我有一个包含多行和多列的CSV文件。例如,假设我有以下CSV(制表符分隔)文件:
Sample1 Sample2 Sample3 Sample4 Sample5
Log1 2.3 3.3 4.5 5.6 6.7
Log2 3.5 6.7 10.0 22.1 30
Log3 4.2 4.5 6.7 8.9 9.1
Log4 4.5 8.9 10.2 11.8 14.7
我在here检查了pylab库中的曲面图方法,但我觉得我想要做的与他们提供的例子不同。因为我希望我的X轴是CSV的第一列中的名称(Log1,Log2 ... Log4),并且Y轴显示列名称(例如Sample1,Sample2,... Sample5)。这些值将决定3D图中曲面的外观。
所以我想知道如何在python或任何其他工具中制作3D表面绘图?任何回复将不胜感激。
修改
感谢@ anon的回答,我编写了以下python代码,但我不清楚如何将CSV文件中的值分配给(X,Y,Z)坐标。我在下面的方式是通过x_axis(X标签列表)和y_axis(Y标签列表)的大小分配X,Y值,Z值是我的CSV中的实际数字文件。但是下面的代码不起作用 - 需要一些额外的帮助。
csv_file_path='/path/to/my/CSV/my_file.csv'
mFile = open(csv_file_path, 'rb')
datafile = list(csv.reader(mFile, delimiter='\t'))
x_ax = [] # a list of X labels
y_ax = [] # a list of Y labels
row_data = [] # a list of row values
Z = [] # a list of row_data
first_line = True # skip the first line which is the header
for row in datafile:
print row[0]
summ = 0
if first_line:
y_ax = row[1:]
print y_ax
first_line = False
continue
x_ax.append(row[0])
row_data = row[1:]
data.append(row_data)
X = range(len(x_ax)) # use the length of x_ax as the X coordinate
Y = range(len(y_ax)) # use the length of y_ax as the Y coordinate
fig = plt.figure(figsize=(200, 6))
ax = fig.add_subplot(1, 2, 1, projection='3d')
ax.set_xticklabels(x_ax)
ax.set_yticklabels(y_ax)
ax.set_title("Frequencies Surface Plotting")
surf = ax.plot_surface(X, Y, data, rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=0, antialiased=False)
ax.set_zlim(0, 100)
fig.colorbar(surf, shrink = 0.5, aspect = 5)
plt.show()
来自Pylab的示例:
答案 0 :(得分:2)
您可以将x
和y
轴标签更改为您想要的。例如:
fig = plt.figure(figsize=(14,6))
ax = fig.add_subplot(1, 2, 1, projection='3d')
x_ax = ["Log1", "Log2"] # etc ... just parse what you need from the CSV file
ax.set_xticklabels(x_ax)
y_ax = ["Sample1","Sample2"] # etc... just parse what you need from the CSV file
ax.set_yticklabels(y_ax)
plt.show()
产地:
这是你想要的吗?