построить 3D-график с использованием dataframe в matplotlib - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть следующие данные, и у меня возникают проблемы при построении трехмерного графика, подобного тому, который показан в примерах Matplotlib -> https://matplotlib.org/examples/mplot3d/custom_shaded_3d_surface.html

На оси 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.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

В этом случае лучше не использовать Dataframe?

это код, который я использую:

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()

1 Ответ

0 голосов
/ 25 ноября 2018
u = """     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"""

import io
import pandas as pd
import numpy as np

df = pd.read_csv(io.StringIO(u), delim_whitespace=True)
df = df.set_index("residue")

Настройка такова, что столбец residue больше не является частью данных.

enter image description here

Затем вы можете создать сетку изстолбцы и индекс и выведите его в соответствии со связанным примером.

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()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...