我在这样的文本文件中有数据。
a b kseq
613 42023 20
762 32557 20
323 63163 20
643 60877 20
422 32740 20
394 48891 20
744 105341 20
334 58036 20
303 27343 20
861 33608 20
是否可以在matplotlib中从这个二维数据创建三维图形?
答案 0 :(得分:1)
是。不是一个特别令人兴奋的图表,因为其中一个变量是常数,但绝对是。
涉及的模块是csv
(用于输入)和matplotlib.pyplot
(或pylab
)来实际绘制。
请开始使用this demo了解。
如果您遇到麻烦,请使用其他问题返回SO。
答案 1 :(得分:1)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d, Axes3D
from scipy.interpolate import griddata
a = [[613, 42023, 20], [762, 32557, 20], [323, 63163,20], [643, 60877, 20],
[422, 32740, 20], [394,48891, 20], [744, 105341,20], [334, 58036,20],
[303,27343,20], [861,33608,20]]
df = pd.DataFrame(a, columns=['a', 'b', 'kseq']) # create dataframe not neccessary
X = df.a
Y = df.b
Z = df.kseq
fig = plt.figure(figsize=plt.figaspect(0.5))
ax = fig.gca(projection='3d')
xi = np.linspace(X.min(), X.max(), 100)
yi = np.linspace(Y.min(), Y.max(), 100)
zi = griddata((X, Y), Z, (xi[None, :], yi[:, None]), method='linear') # create a uniform spaced grid
xig, yig = np.meshgrid(xi, yi) # create pair of x, y
surf = ax.plot_surface(xig, yig, zi, rstride=5, cstride=3, linewidth=0, cmap=plt.cm.coolwarm, antialiased=False) # 3d plot
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()