Почему нет линий между точками данных на графике Contour?

Я построил график contourf с 9x11 точками. Когда я строю график contourf, я ожидаю увидеть линии между точками данных (поскольку между точками данных нет других данных). Но, например, на уровне 0.9 есть некоторые части (особенно между x=2 и x=4), которые не являются линейными. Что может быть причиной этого?

Контурный график

plt.figure()
x=np.linspace(0,10,11)
y=np.linspace(0,10,11)
X,Y = np.meshgrid(x,y)
levels = np.arange(0,1.01,0.1)
norm = cm.colors.Normalize(vmax=1, vmin=0)
cmap = cm.PRGn

CS1 = plt.contourf(X, Y, data,levels=levels,cmap=cm.get_cmap(cmap, 
        len(levels) - 1),norm=norm)
plt.xticks(np.arange(11),np.arange(11))
plt.yticks(np.arange(11),np.arange(250,855,55))
plt.xlim([0,8])
plt.colorbar(CS1)
plt.grid()
plt.show()

person Emir Cabukoglu    schedule 28.04.2017    source источник
comment
Можете ли вы опубликовать пример кода?   -  person Cong Ma    schedule 28.04.2017
comment
есть некоторые части (...), которые не являются линейными - вы имеете в виду, что интерполяция между ними делает линию негладкой? Посмотрите на интерполяцию.   -  person berna1111    schedule 28.04.2017


Ответы (2)


Это должно быть так: contourf цвета в область между линиями и contour рисует линии . См. примеры.

person berna1111    schedule 28.04.2017

Возможно, следующий график поможет лучше понять контурный график.

введите здесь описание изображения

Здесь мы строим контур массива с точками 3x3. Значение средней точки (6) намного больше других значений. Мы выбрали уровни 3 и 5 для построения контурных линий. Эти линии рассчитываются по контуру для интерполяции данных.
Использование большего количества точек позволит использовать больше линий и сделать их более гладкими.

import matplotlib.pyplot as plt
import numpy as np

X,Y = np.meshgrid(np.arange(3), np.arange(3))
Z = np.array([[1,1,1],[2,6,2],[1,1,1]])

fig, ax=plt.subplots()
cs = ax.contour(X,Y,Z, levels=[3,5])
cs2 = ax.contourf(X,Y,Z, levels=[1,3,5,6], alpha=0.3)
plt.clabel(cs, cs.levels, inline=False)
plt.colorbar(cs2)
ax.scatter(X,Y)
for x,y,z in zip(X.flatten(), Y.flatten(), Z.flatten()):
    ax.text(x,y,z)

plt.show()
person ImportanceOfBeingErnest    schedule 28.04.2017