2017-05-23 8 views
0

저는 파이썬으로 작업 중이며 플로팅에 초보자입니다. 또 다른 포스트 (matplotlib Plot multiple scatter plots, each colored by different thrid variable)착색 된 분산 형 플롯에 대한 Pyplot 코드 이해

import matplotlib.pyplot as plt 

jet=plt.get_cmap('coolwarm') 

x = [1,2,3,4] 
y = [1,2,3,4] 
z = [1,1,1,1] 

a = [2,3,4,5] 
b = [1,2,3,4] 
c = [2,2,2,2] 

d = [3,4,5,6] 
e = [1,2,3,4] 
f = [3,3,3,3] 

plt.scatter(x, y, s=100, c=z, cmap=jet, vmin=0, vmax=4) 
plt.scatter(a, b, s=100, c=c, cmap=jet, vmin=0, vmax=4) 
plt.scatter(d, e, s=100, c=f, cmap=jet, vmin=0, vmax=4) 

plt.clim(0,5) 
plt.colorbar() 
plt.show() 

에서이 코드를 발견하고 실제로 이미 내 목적을 위해 아주 잘 맞습니다. enter image description here

다른 색상으로 모두 10 개가 아닌 10 개의 다른 플롯을 사용할 수 있도록 코드를 변경하려고하지만 코드를 실제로 이해하지 못합니다. 누군가 scatter 명령의 다른 부분 (그리고 또한 plt.clim())을 설명 할 수 있습니까? 나는 온라인으로 검색했다. 그러나 그것은 꽤 혼돈이었다. 또한 YIGnBu라고하는 좀 더 멋진 색상을 발견했지만 프로그램이이를 채택하지 않습니다.

어쩌면 누군가 나를 위해 약간의 빛을 비출 수 있습니다. 미리 감사드립니다!

+1

의이 'scatter' 명령 분해하자'plt.scatter를 (X, Y, S = 100, C = Z, cmap를 = 제트, VMIN = 0, VMAX = 4)' . 'x, y'는 당신의 요점입니다. 's = 100'은 심볼의 크기입니다. 'c = z'는 사용할 색입니다. 이것은 스칼라이거나 이름 (c = 'red') 일 수 있습니다. 'cmap = jet'은 사용할 색상 맵을 설정하여 숫자가 색상에 매핑되도록합니다. 'vmin, vmax'는 색상 범위의 상한과 하한을 설정합니다. 'plt.clim()'은 컬러 바의 한계 값을 설정합니다.이 경우에는 0에서 4 (데이터 한계) 였지만 강제로 0에서 5가됩니다. 희망이 도움이됩니다! – VBB

+1

@VBB 의견을 제시하지 마십시오.대답을 제공하려면 아래의 답을 사용하십시오. – ImportanceOfBeingErnest

+1

컬러 맵에 관해서는'YIGnBu' 대신'YlGnBu'라고 부릅니다. – ImportanceOfBeingErnest

답변

1

먼저 scatter documentation을 읽는 것이 좋습니다. 이것은 혼란스럽지 않고 scatter 서명의 모든 부분을 설명합니다.

둘째, matplotlib 페이지에 예제가 있습니다.

scatter_demo.

일반적으로 분산 형 플롯의 아이디어는 분산 형의 다른 점이 다른 크기 (s 인수로 결정됨)와 색 (c으로 결정됨)을 가질 수 있다는 것입니다. 그것은 단지 하나의 플롯이 10 개의 플롯을 만들려면

import matplotlib.pyplot as plt 

x = [1,2,3,4, 2,3,4,5, 3,4,5,6] 
y = [1,2,3,4, 1,2,3,4, 1,2,3,4] 
z = [1,1,1,1, 2,2,2,2, 3,3,3,3] 

plt.scatter(x, y, s=100, c=z, cmap='YlGnBu') 

plt.colorbar() 
plt.show() 

enter image description here

을 필요로 세 가지 다른 산포도를 사용하기 때문에

당신이 보여 예제 코드는, 따라서 아주 좋은 예가 아니다 당신

import matplotlib.pyplot as plt 
import numpy as np 

x = np.arange(1,5) 
y = np.arange(1,5) 

for i in range(10): 
    plt.plot(x+i, y, ls="", marker="o", ms=10, color=plt.cm.YlGnBu(i/9.)) 
plt.show() 

enter image description here

: 똑같이 plot 정상을 사용할 수있다

그러나이 마지막 방법은 플롯 자체가 ScalarMappable 자체가 아니기 때문에 컬러 바를 추가 할 때 좀 더 복잡해집니다. 따라서 Colorbar에 대한 ScalarMappable을 수동으로 만들어야합니다.

import matplotlib.pyplot as plt 
import matplotlib.colors as colors 
import numpy as np 

x = np.arange(1,5) 
y = np.arange(1,5) 

for i in range(10): 
    plt.plot(x+i, y, ls="", marker="o", ms=10, color=plt.cm.YlGnBu(i/9.)) 

sm = plt.cm.ScalarMappable(cmap="YlGnBu", norm=colors.Normalize(vmin=0, vmax=9)) 
sm.set_array([]) 
plt.colorbar(sm) 
plt.show() 

enter image description here

+0

고마워요! YlGnBu를 다른 색의 색조로 바꿀 수있는 방법을 설명해 주시겠습니까? (가장 가벼운 색을 제 표시 장치에 실제로 표시 할 수는 없지만 다른 색이 필요합니다). 다른 색상들 사이를 명확히 구분하고 좋은 것으로 볼 수있는 음질에 대해 다시 한 번 생각해 보시겠습니까 – DeltaChief

+1

[colormaps reference] (http://matplotlib.org/examples/color/colormaps_reference.html)를 참조하십시오. 가장 적합한 색상 표. 원하는 응용 프로그램을 모르기 때문에 아무 것도 추천 할 수 없습니다. – ImportanceOfBeingErnest

+0

아, 고맙습니다. 이제 작동합니다. 마지막 질문 하나 : plt.plot을 사용하여 두 번째 방법을 사용했습니다. 이 경우 컬러 바를 표시하는 방법이 있습니까? (colobar를 scatter scatter와 함께 사용하면 프로그램에서 오류가 발생합니다. – DeltaChief