Создание 3D-графика из файла CSV Pandas - PullRequest
0 голосов
/ 30 января 2020

Итак, у меня есть pandas фрейм данных, который выглядит следующим образом:

Time         Velocity       Cxx
-1.0         -10000         0.000
-0.999       -10000         0.010
-0.998       -10000         0.011
 ...         ...             ...
0.998       -10000         0.011
0.999       -10000         0.010
 1.0        -10000         0.000
 ...         ...             ...
 -1.0        -5000         0.000
-0.999       -5000         0.050
-0.998       -5000         0.055
 ...          ...           ...
0.998       -5000         0.055
0.999       -5000         0.050
 1.0        -5000         0.000

Et c. Другими словами, столбец «Time» выбирается из [-1, 1], а скорость - из [-10000, 10000]. Значение Cxx - это значение моей функции в (Time, Velocity).

Проблема заключается в том, что сами значения Time и Velocity часто повторяются, как вы можете видеть в примере. Однако существует только один уникальный экземпляр пары (время, скорость).

Я бы хотел:

  1. Построить 3D-график. Возможно, me sh или график поверхности с X = Время и Y = Скорость и Z = Cxx
  2. Построить тепловую карту в 2D, где Cxx будет представлять значение тепла (величину), а X = Время и Y = Скорость.
  3. Используйте сетку, чтобы отобразить мои значения Z для чтения в сетке из точек XY.

Может ли кто-нибудь помочь?

1 Ответ

0 голосов
/ 30 января 2020

Без данных, которые вы наберете sh, трудно ответить на ваш вопрос. Однако обычно для построения функции IR ^ 2, например z = (x, y), большинство инструментов построения графиков требуют, чтобы x, y, z были двумерными массивами или матрицами. Ваши данные уже подготовлены для этого, так как значения внутри столбцов повторяются. Так что вам просто нужно преобразовать столбцы данных в 2D-массивы. Обновите time, velocity, cxx, time_points и velocity_points своими данными и проверьте, работает ли для вас следующий код.

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

# some data
time = [-1.0, -0.999, -0.998, 0.998, 0.999, 1.0, -1.0, -0.999, -0.998, 0.998, 0.999, 1.0]
velocity = [-10000, -10000, -10000, -10000, -10000, -10000, -5000, -5000, -5000, -5000, -5000, -5000]
cxx = [0.000, 0.010, 0.011, 0.011, 0.010, 0.000, 0.000, 0.050, 0.055, 0.055, 0.050, 0.000]
time_points = 6 # -1.0, -0.999, -0.998, 0.998, 0.999, 1.0
velocity_points = 2 # -10000, -5000

# reshape data into matrices
x = np.reshape(time, (velocity_points, time_points))
y = np.reshape(velocity, (velocity_points, time_points))
z = np.reshape(cxx, (velocity_points, time_points))

# 1.1. plot a 3d graph (surface plot)
fig = plt.figure(1)
ax = fig.gca(projection='3d')
ax.plot_surface(x, y, z)
ax.set_xlabel('Time')
ax.set_ylabel('Velocity')
ax.set_zlabel('Cxx')

# 1.2. plot a 3d graph (surface plot) with a colormap and colorbar
fig = plt.figure(2)
ax = fig.gca(projection='3d')
surf = ax.plot_surface(x, y, z, cmap='jet')
plt.colorbar(surf)
ax.set_xlabel('Time')
ax.set_ylabel('Velocity')
ax.set_zlabel('Cxx')

# 2. heatmap with colorbar
fig = plt.figure(3)
ax = fig.gca()
plt.contourf(x, y, z, cmap='jet')
cbar = plt.colorbar()
ax.set_xlabel('Time')
ax.set_ylabel('Velocity')
cbar.set_label('Cxx')

# 3. direct view of Cxx values in a grid
fig = plt.figure(4)
ax = fig.gca()
plt.imshow(z, cmap='jet', interpolation='nearest')
cbar = plt.colorbar()
ax.set_xlabel('Time Index')
ax.set_ylabel('Velocity Index')
cbar.set_label('Cxx')

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