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 № 1Biorą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()
Bardziej ogólnie, możesz również interpolować swoje dane. Widzieć Utwórz kontur rozproszenia.