2017-12-21 19 views
0

위도/경도 데이터가 플로팅되고 속도에 따라 색상이 지정되는 예제 플롯에서 작업 해 왔습니다. 나는 속도 컬러 맵을 일정하게하고 싶지만, 새로운 데이터를 그릴 때마다, 데이터에 맞는 칼라 맵의 최소와 최대를 재조정하는 것으로 보인다.컬러 맵 스케일을 일정하게 유지하고 컬러 막대를 플로트하는 방법

예를 들어 색상 막대에 표시된 것과 같이 0과 10 사이의 색상을 매핑하고 싶습니다. 그러나 매번 데이터에 컬러 맵을 다시 스케일링하는 것으로 보입니다.

example plot

참고 데이터 값이 4.1의 값보다 결코, 아직 데이터에 맞게 컬러 맵을 다시 조절했습니다

import numpy as np 
import matplotlib.pyplot as plt 

lon = np.array(
    [-155.05155, -155.05151, -155.0515, -155.05149, -155.05148, -155.05148, -155.05148, -155.05148, -155.05149, 
    -155.05151, -155.05153, -155.05155, -155.05158, -155.05159, -155.05162, -155.05164, -155.05166, -155.05168, 
    -155.0517, -155.05172, -155.05175, -155.05176, -155.05178, -155.0518, -155.05182, -155.05184, -155.05186, 
    -155.05188, -155.0519, -155.05192, -155.05194, -155.05197, -155.05199, -155.05201, -155.05203, -155.05205, 
    -155.05207, -155.05208, -155.05211, -155.05213, -155.05215, -155.05217, -155.05219, -155.05221, -155.05223, 
    -155.05226, -155.05228, -155.05231, -155.05233, -155.05236, -155.05237, -155.05239, -155.05241, -155.05242, 
    -155.05245, -155.05245, -155.05247, -155.05249, -155.05251, -155.05254, -155.05256, -155.05258, -155.0526, 
    -155.05262, -155.05263, -155.05265, -155.05268, -155.0527, -155.05272, -155.05275, -155.05277, -155.05279, 
    -155.05281, -155.05283, -155.05285, -155.05287, -155.05289, -155.0529, -155.05291, -155.05293, -155.05295, 
    -155.05297, -155.05299, -155.05301, -155.05303, -155.05305, -155.05307, -155.05309, -155.05311, -155.05313, 
    -155.05314, -155.05316, -155.05318, -155.0532, -155.05321, -155.05323, -155.05325, -155.05326, -155.05328, 
    -155.05332]) 
lat = np.array(
    [19.73198, 19.73198, 19.73199, 19.73201, 19.73203, 19.73202, 19.73202, 19.73204, 19.73205, 19.73206, 19.73206, 
    19.73207, 19.73208, 19.73209, 19.73211, 19.73212, 19.73214, 19.73216, 19.73218, 19.7322, 19.73222, 19.73223, 
    19.73225, 19.73226, 19.73227, 19.73229, 19.7323, 19.73232, 19.73233, 19.73234, 19.73235, 19.73237, 19.73238, 
    19.7324, 19.73241, 19.73243, 19.73244, 19.73246, 19.73247, 19.73248, 19.7325, 19.73251, 19.73253, 19.73254, 
    19.73256, 19.73257, 19.73258, 19.73259, 19.7326, 19.73263, 19.73264, 19.73266, 19.73267, 19.73268, 19.7327, 
    19.73271, 19.73272, 19.73273, 19.73275, 19.73277, 19.73278, 19.73279, 19.73281, 19.73282, 19.73284, 19.73286, 
    19.73286, 19.73288, 19.73289, 19.7329, 19.73291, 19.73293, 19.73294, 19.73296, 19.73297, 19.73299, 19.73302, 
    19.73304, 19.73306, 19.73308, 19.73309, 19.73311, 19.73313, 19.73315, 19.73317, 19.73317, 19.73319, 19.7332, 
    19.73322, 19.73323, 19.73325, 19.73326, 19.73327, 19.73329, 19.7333, 19.73331, 19.73332, 19.73333, 19.73335, 
    19.73336]) 
speed = np.array([0, 3.967838351598377, 2.583851230112236, 2.909749382960718, 2.331208342745013, 1.2474565941885627, 
        1.718509515902599, 2.130757007783651, 2.1978242809567643, 2.4448938949237133, 2.3436767093957807, 
        2.848759575381383, 2.5766473883863124, 2.8348240641628335, 3.106935785732237, 2.710393576350728, 
        3.1318924699618096, 3.2117162403094186, 3.1318921186853235, 3.4486097786406074, 2.8348227783071542, 
        2.438280995718295, 2.8116095118419597, 2.571151376967635, 2.8116093167427856, 2.710391831502253, 
        2.710391728938647, 2.7103915222111485, 2.469933323878424, 2.4699332140890724, 3.1069324755437155, 
        3.106932198270919, 2.710390905821824, 2.710390701811524, 2.710390599103662, 2.710390392282518, 
        2.412473081387807, 2.892512135241831, 2.848753560195423, 2.790213897128215, 2.891431079508014, 
        2.8914309834469867, 2.790213394604523, 2.7902132941269615, 3.270251940268593, 2.949969471066445, 
        2.9499693266059097, 2.8487517553160426, 3.682304028129132, 3.7558001156185816, 2.863708779704488, 
        2.891429545784412, 2.1978198142415475, 2.8348182266776614, 2.670028369758699, 2.033029885758895, 
        2.469928992173159, 2.710387312334322, 3.5125563040959307, 3.27209759442833, 2.4699283256332825, 
        2.7103866960769962, 2.710386489344829, 2.5103517409878737, 2.9318517610212034, 3.1747757400248457, 
        3.0949516374373167, 2.8116033283715955, 2.9499648048602216, 2.848747092331349, 2.7902095754563563, 
        3.1559179547967515, 3.1559178689291647, 2.891426668096206, 2.891426572169741, 3.573651757195292, 
        3.195911973684913, 2.4562297465190186, 2.833969127195823, 2.7902078684061324, 2.7103836137458464, 
        3.131883978356872, 3.1318838043110544, 3.131883629382897, 2.7651643954244483, 2.7651643943197355, 
        2.891424460722922, 2.811600188197874, 3.4372310555788212, 3.1393162110320247, 2.513684994246323, 
        2.469922991269612, 2.710381765956584, 2.43827424877333, 2.0965975265618053, 2.4699224357346794, 
        2.1978151300488475, 2.7367352119845485, 4.0459052923177925, 3.8858032217291467]) 

max_speed = 10. 
color = [str(item/max_speed) for item in speed] 

fig = plt.figure(facecolor='0.05') 
ax = plt.Axes(fig, [0., 0., 1., 1.],) 

ax.set_axis_off() 
fig.add_axes(ax) 
sm = plt.cm.ScalarMappable(cmap='plasma', norm=plt.Normalize(vmin=0, vmax=max_speed)) 
sm._A = [] 
color_bar = plt.colorbar(sm) 
cbytick_obj = plt.getp(color_bar.ax.axes, 'yticklabels') 
plt.setp(cbytick_obj, color='w') 

plt.scatter(lon, lat, s=2, c=color, cmap='plasma') 
plt.show() 

는 다음과 같이 플롯을 생성합니다. 색상 매핑의 한계는 어떻게 설정합니까? 그리고 보너스로, 왜 컬러 바가 플롯 윈도우의 경계를 무시하고 너무 크게 나타나는가?

답변

1

산점도에서 색상 막대와 동일한 정규화를 사용하려면 색상 막대에서와 산포도에서 동일한 표준화를 사용하십시오.

 
mynorm = plt.Normalize(vmin=0, vmax=10) 
sm = plt.cm.ScalarMappable(cmap='plasma', norm=mynorm) 
# ... 
plt.scatter(lon, lat, s=2, c=color, cmap='plasma', norm=mynorm) 

는 (이에 대한 질문을 조금 너무 명백한 것, 그러나 또한 당신이 여기 후있어 해결책이 될 것으로 보인다.)이 년 Colorbar 너무 큰 이유에

, 다시 꽤 분명히 너 자신을 그렇게 크게 설정했다 :

ax = plt.Axes(fig, [0., 0., 1., 1.])은 그림과 정확히 같은 높이의 축을 생성한다. 색상 막대는 축과 같은 높이입니다.
당신은 축이 작게 만들거나 축소하여 작은 년 Colorbar를 만들도록 선택할 수도 있고 , 도움을

plt.colorbar(sm, shrink=0.8) 
+0

감사합니다. 나는 이것을 위해 약간의 코드와 코드를 빌려 왔고, 세부 사항을 배우고있다. 플롯 된 데이터의 정규화를 변경하는 방법은 분명하지 않았습니다. – user6972