다른 데이터 소스의 값을 비교하기 위해 제어해야하는 개별 윤곽선 레벨로 채워진 등고선 플롯을 작성하려고합니다. 나는 이것이 fig.colorbar(c, ax=ax, ticks=my_levels)
으로 쉽게 이루어져야한다고 생각했다. 그러나 아래 예제에서 볼 수 있듯이 색상과 값의 정렬에 문제가 발생하며 코드에 어떤 문제가 있는지 파악할 수 없었습니다.컬러 필드와 라벨을 개별 컬러 막대에 정렬
# -*- coding: cp1252 -*-
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.ticker import ScalarFormatter
import numpy as np
def plot_discrete(x, y, data, cmax, nclevel=11):
"""Plot filled contour plot and add colorbar with discrete (linear) spacing"""
matplotlib.rcParams.update({'font.size' : 22})
# prepare plot
fig = plt.figure(figsize=(10,7), dpi=150)
fig.suptitle(unicode("Test ÄÖÜßäöü","latin-1"), fontsize=20, fontweight='bold')
ax = fig.add_subplot(1,1,1)
# determine contour levels and set color scale (norm)
clevel = np.linspace(0., cmax, nclevel)
print "clevel = ", clevel
print "cmax, max(data) = ", cmax, np.max(data)
norm = matplotlib.colors.BoundaryNorm(clevel, ncolors=256, clip=False)
# generate the contour plot
c = ax.contourf(x, y, data, level=clevel, norm=norm)
# prep up axis formatting and labelling
ax.set_xlabel('X',{'fontsize':20})
ax.set_ylabel('Y',{'fontsize':20})
ax.xaxis.set_major_formatter(ScalarFormatter())
ax.yaxis.set_major_formatter(ScalarFormatter())
# add the colorbar
fig.colorbar(c, ax=ax, norm=norm, ticks=clevel, boundaries=clevel)
plt.show()
if __name__ == "__main__":
x = np.linspace(0.,10.,20)
y = np.linspace(-10.,10.,21)
data = np.zeros((x.size, y.size))
for i,xx in enumerate(x):
for j,yy in enumerate(y):
data[i,j] = np.sqrt(xx)*yy**2
plot_discrete(y, x, data, 360.)
내 컴퓨터에서 코드를 실행하면 [이 출력물을 생성합니다] (http://imgur.com/ff0lUHO)는 동일한 동작을 나타내지 않습니다. 이미 업데이트를 고려하지 않았다면 matplotlub 1.3.0을 설치 했습니까? – Greg
감사합니다. 흥미 롭습니다. 그러나 윤곽 플롯 자체에 진한 빨간색이 없더라도 레벨이 360까지 올라야하고 어두운 색을 최종 색상으로 표시해야하므로 원하는 결과가 아 닙니다. – maschu
죄송합니다. 문제를 제대로 이해하지 못했습니다. – Greg