3d-поверхность matplotlib отображает неверные данные x и y - PullRequest
0 голосов
/ 05 июля 2018

Хорошо, я пытаюсь построить трехмерный график поверхности matplotlib.

import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import itertools as it
import numpy as np


plt.clf()
fig = plt.figure(figsize=(6.27, 9.69))
ax = Axes3D(fig)

x = list(range(1,101,11))
y = list(range(1,101,11))

df = pd.DataFrame(columns=y, index=x)
iterator = it.product(x,y)

for i in iterator:
    number = np.random.rand()
    df.loc[i[0],i[1]] = number

surf = ax.plot_surface(df.index,
                       df.columns,
                       df,
                       cmap='viridis_r',
                       linewidth=0.5,
                       alpha = 0.5,
                       edgecolor = 'k')
ax.set_xlim3d(0,101)
ax.set_ylim3d(0,101)
ax.invert_yaxis()

cb = fig.colorbar(surf, shrink=0.8 , alpha = 0.5)
cb.solids.set_edgecolor("face")
plt.show()

Мой код работает (по моде), но все мои результаты отображаются только на прямой линии, где x=y, то есть двумерный график.

enter image description here

Я думал, что это может быть связано с использованием itertools (код не циклически повторяет все итерации), но с кадром данных все в порядке.

Кто-нибудь может сказать мне, что я делаю неправильно?

1 Ответ

0 голосов
/ 05 июля 2018

Я проверил, и вам нужно вычислить сетку перед построением графика. Вы можете просто добавить что-то вроде:

...
for i in iterator:
    number = np.random.rand()
    df.loc[i[0],i[1]] = number

xv, yv = np.meshgrid(df.index, df.columns)

surf = ax.plot_surface(xv,
                       yv,
                       df,
                       cmap='viridis_r',
                       linewidth=0.5,
                       alpha = 0.5,
                       edgecolor = 'k')
...

Я действительно не знаю, является ли это ожидаемым результатом, но вы получаете реальную поверхность! meshgrid просто создает матрицы, которые соответствуют различным перестановкам значений из x и y, чтобы позволить вам иметь разные x для одного y и наоборот.

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