Python 使用matplotlib中的dataframe打印三维打印
我有以下数据,绘制类似Matplotlib示例中显示的3d绘图时遇到问题-> 在x轴上,我想要留数列,在y轴上,第一行和z轴应该代表值Python 使用matplotlib中的dataframe打印三维打印,python,pandas,matplotlib,plot,Python,Pandas,Matplotlib,Plot,我有以下数据,绘制类似Matplotlib示例中显示的3d绘图时遇到问题-> 在x轴上,我想要留数列,在y轴上,第一行和z轴应该代表值 residue 0 1 2 3 4 5 6 \ 0 0.0 0.0 1.671928 1.441439 0.808492 1.079337 1.186970 1.445275 1 1.0 0.0 1
residue 0 1 2 3 4 5 6 \
0 0.0 0.0 1.671928 1.441439 0.808492 1.079337 1.186970 1.445275
1 1.0 0.0 1.348867 1.216174 1.324360 1.965453 2.121130 1.713321
2 2.0 0.0 1.281589 0.794236 1.083470 1.476939 2.011159 2.360246
3 3.0 0.0 0.798151 0.993858 1.020617 0.829792 1.280412 1.653299
4 4.0 0.0 0.789995 1.194215 1.407934 1.291384 1.555449 1.258266
5 5.0 0.0 0.653958 0.910582 1.585495 1.245847 1.620384 1.664490
6 6.0 0.0 0.782577 0.648373 1.284292 1.087762 1.523729 1.631152
7 7.0 0.0 1.094054 1.127248 0.958693 1.168483 0.897470 1.404080
8 8.0 0.0 0.433993 1.165169 0.925521 1.292363 1.075700 1.146139
9 9.0 0.0 1.114398 0.963963 1.062597 1.297358 1.412016 1.422071
10 10.0 0.0 0.706276 1.056272 1.381639 1.682080 1.779487 1.914487
11 11.0 0.0 1.059623 1.000653 1.152697 1.895022 1.562730 1.964862
在这种情况下不使用数据帧更好吗
这是我使用的代码:
z = df.iloc[1:,1:-1]
ff= [i for i in range(1,500)]
y=df["residue"]
print(len(z))
nrows, ncols = z.shape
x = np.linspace(min(ff),max(ff), ncols)
x, y = np.meshgrid(x, y)
fig, ax = plt.subplots(subplot_kw=dict(projection='3d'))
plt.show()
设置为剩余量
列不再是数据的一部分
然后,可以从列和索引创建网格网格,并根据链接的示例进行打印
x,y = np.meshgrid(df.columns.astype(float), df.index)
z = df.values
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.colors import LightSource
fig, ax = plt.subplots(subplot_kw=dict(projection='3d'))
rgb = LightSource(270, 45).shade(z, cmap=plt.cm.gist_earth, vert_exag=0.1, blend_mode='soft')
surf = ax.plot_surface(x, y, z, facecolors=rgb,
linewidth=0, antialiased=False, shade=False)
plt.show()
您一定可以使用数据帧。一个问题是,
residence
是帧的一列,因此它将包含在数据中。但是,您更愿意将其作为日期框索引。然后,您将需要创建一个索引和列的网格网格,如本主题的许多示例所示。非常感谢,这正是我想要的,df.value。实际上,我手动添加了列名8resume、1、2、3等,但显然这不是一个明智的策略。
x,y = np.meshgrid(df.columns.astype(float), df.index)
z = df.values
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.colors import LightSource
fig, ax = plt.subplots(subplot_kw=dict(projection='3d'))
rgb = LightSource(270, 45).shade(z, cmap=plt.cm.gist_earth, vert_exag=0.1, blend_mode='soft')
surf = ax.plot_surface(x, y, z, facecolors=rgb,
linewidth=0, antialiased=False, shade=False)
plt.show()