meshgrid
не будет производить то, что вы хотите, так, как вы его используете. Один из способов представить это: meshgrid
создает данных (от n+m
точек данных до n*m + n*m
точек данных), но вам не нужно создавать данные, вам просто нужно сортировать и формировать то, что у вас уже есть.
Вы можете отсортировать это, используя numpy, но в этом случае, когда вы хотите отсортировать строки, используя значения из одного столбца, Pandas проще ; в примере здесь используется одна строка data.sort_values("Y")
. Все остальное здесь просто поддержка этой линии.
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# make some data and plot it... getting back to this is the goal
x = np.arange(4)
X, Y = np.meshgrid(x, x)
Z = X + Y
a = np.array([X, Y, Z])
fig=plt.figure()
plt.contourf(a[0], a[1], a[2])
cbar = plt.colorbar()
# now shuffle it and write to a file to mimic your data
np.random.shuffle(a.T)
b = a.reshape((3, -1))
with open("data.dat", 'w') as outfile:
outfile.write("X Y Z\n")
for i, j, k in b.T:
outfile.write("%i %i %i\n" % (j, i, k))
# Here's where you start:
# now read in the data
data = pd.read_csv("data.dat", sep=" ")
# note that Y is out of order
print(data.T) # print transposed to save space
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# X 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3
# Y 3 2 0 1 3 2 0 1 3 2 0 1 3 2 0 1
# Z 3 2 0 1 4 3 1 2 5 4 2 3 6 5 3 4
# sort the data
data2 = data.sort_values("Y")
# 2 6 10 14 3 7 11 15 1 5 9 13 0 4 8 12
# X 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3
# Y 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3
# Z 0 1 2 3 1 2 3 4 2 3 4 5 3 4 5 6
# Reshape and plot the data
c = data2.T.reshape((3, 4, 4))
fig=plt.figure()
plt.contourf(c[0], c[1], c[2])
cbar = plt.colorbar()