Создание контурных графиков из упорядоченных пар и значений вместо meshgrids [duplicate]

Вы должны копировать подписчика каждый раз. В противном случае вы каждый раз изменяете один и тот же объект. Просто используйте s = copy(Subscriber)

2
задан Hg1 9 March 2017 в 19:32
поделиться

1 ответ

Решение будет зависеть от того, как организованы данные.

Данные о регулярной сетке

Если данные 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 .

2
ответ дан ImportanceOfBeingErnest 15 August 2018 в 15:11
поделиться
  • 1
    Спасибо! Я также нашел способ сделать это в Matlab (не в моих предпочтениях, но я был в отчаянии), используя tricontour отсюда: link _italic_ bold code – Hg1 13 March 2017 в 15:44
  • 2
    dataset = xlsread (dataset.xlsx ',' Sheet2 ',' B1: D10 '); #each new '#' - это новая строка в matlab bc. Я не могу получить этот комментарий в формате # #x = dataset (:, 1); #y = набор данных (:, 2); #z = набор данных (:, 3); # [Хх, уу] = meshgrid (х, у); # ZZ = GridData (х, у, г, хх, уу); %, связанное с данными о разбросе z, в сетку xy # v = 3: 0,5: 7; % контурных уровней: самый низкий: шаг интервала: наивысший # idx = randperm (numel (zz)); # П = IDX (1: CEIL (numel (ZZ) / 2)); # х = хх (п); # У = уу (п); # Г = ZZ (п); # Три = Делон (х, у); #subplot (1,1,1) # [C, h] = tricontour (tri, x, y, z, v); #clabel (C) #title 'My Figure Title' – Hg1 13 March 2017 в 15:52
  • 3
    Вы не должны размещать расширенный код в комментарии, который, кстати, совершенно не связан с вопросом (а это касается matplotlib, а не matlab). Если приведенный выше ответ решает вашу проблему, вы должны принять его. Если это не так, вы должны отредактировать свой вопрос и уточнить, какую дополнительную информацию вам не хватает. – ImportanceOfBeingErnest 13 March 2017 в 16:10
  • 4
    Извините, я не знал о том, что вы не отправляете код в комментариях. Я задал оригинальный вопрос и решил выбрать одну программу, чтобы просить о том, чтобы избежать путаницы. Однако, поскольку у меня было так много проблем с попыткой сделать что-то настолько базовое, я полагал, что у других может быть один и тот же вопрос, будь то в matlab или matplotlib, поэтому, если кто-то найдет эту тему, они могут оценить два способа сделать то же самое, в зависимости по программе они более удобны. Я очень благодарен за ответ! Я собираюсь сравнить эти два, чтобы увидеть, какой из них лучше представляет систему. – Hg1 13 March 2017 в 20:04
Другие вопросы по тегам:

Похожие вопросы: