Решение будет зависеть от того, как организованы данные.
Если данные x
и y
уже определяют сетку, их можно легко преобразовать в четырехугольную сетку. Например,
#x y z
4 1 3
6 1 8
8 1 -9
4 2 10
6 2 -1
8 2 -8
4 3 8
6 3 -9
8 3 0
4 4 -1
6 4 -8
8 4 8
может отображаться как contour
, используя
import matplotlib.pyplot as plt
import numpy as np
x,y,z = np.loadtxt("data.txt", unpack=True)
plt.contour(x.reshape(4,3), y.reshape(4,3), z.reshape(4,3))
(a) В случае данные не живут на четырехсторонней сетке, можно интерполировать данные по сетке. Один из способов сделать это - сам matplotlib, используя matplotlib.mlab.griddata
.
import matplotlib.mlab
xi = np.linspace(4, 8, 10)
yi = np.linspace(1, 4, 10)
zi = matplotlib.mlab.griddata(x, y, z, xi, yi, interp='linear')
plt.contour(xi, yi, zi)
(b) Наконец, можно конструировать контур полностью без использования четырехсторонней сетки. Это можно сделать, используя tricontour
.
plt.tricontour(x,y,z)
Пример сравнения последних двух методов находится на странице matplotlib .
Вы имеете дело с асинхронными данными, вам нужно дождаться выполнения обещания, прежде чем оно сработает так, как вы ожидаете. Получение книг занимает некоторое время, поэтому есть задержка, пока книги не прибудут, и все, что у вас есть, - это обещание, что книги придут в конце концов.
Чтобы заставить это работать, вы можете попробовать:
useEffect(() => {
firebase.getBooks().then(books => setBooks(books))
}, []);
SetBooks устанавливает ценность книг как обещание.
firebase.getBooks () возвращает обещание.
Так вот почему у вас в книгах есть обещание.
Что вы должны сделать
async function fetchMyAPI() {
const response = await firebase.getBooks();
setBooks(response);
}
useEffect(() => {
fetchMyAPI();
}, []);