/ / Matplotlib: Rysowanie linii konturów niezależnych od x i y - python, tablice, numpy, matplotlib, kontur

Matplotlib: Rysowanie konturów niezależnych od x i y - python, tablice, numpy, matplotlib, contour

Próbuję narysować linie konturowe (elewację) powiązane ze współrzędnymi x i y. Przeczytałem przykłady tutaj jak rysować kontury na Matplotlib, gdy z jest zdefiniowane przez x i y, ale jak mogę narysować linie konturu niezależne od x i y?

To jest mój kod:

import numpy as np
import matplotlib.pyplot as plt

data = [(0, 200, 140), (100, 430, 260), (800, 340, 320), (250, 110, 430), (290, 40, 100), (590, 35, 180)]
x = np.arange(0, 900, 20)
y = np.arange(0, 500, 20)
X, Y = np.meshgrid(x, y)
Z = [i[2] for i in data]
Z = np.array(Z)
plt.figure()
plt.contour(X, Y, Z)
plt.show()

Dostaję błąd „Błąd typu: wejście z musi być tablicą 2D”.

Po raz pierwszy próbuję rysować linie konturowe i doceniam każdą pomoc w tym zakresie.

Odpowiedzi:

1 dla odpowiedzi № 1

Biorąc pod uwagę, że istnieje tylko 6 punktów danych, wykres konturowy narysowany na podstawie tych danych może nie być bardzo pouczający. Mimo to koncepcja byłaby taka sama dla większej liczby punktów.

Oczywiście nie można rysować linii konturowych, gdzie x, yiz są niezależne. Jeśli masz 6 punktów Z, potrzebujesz 6 x punktów i 6 punktów y - które masz. Rozwiązanie może być więc dość trywialne - wystarczy użyć tricontour zamiast contour:

import numpy as np
import matplotlib.pyplot as plt

data = [(0, 200, 140), (100, 430, 260), (800, 340, 320),
(250, 110, 430), (290, 40, 100), (590, 35, 180)]
x,y,z = zip(*data)
plt.figure()
plt.tricontour(x,y,z)
plt.show()

wprowadź opis obrazu tutaj

Bardziej ogólnie, możesz również interpolować swoje dane. Widzieć Utwórz kontur rozproszenia.