표를 만들 x,y값 지정해주고

오차 범위도 변수로 지정해줍니다.

그후 plt.errorbar(x,y, yerr[=y축의 에러오차 범위])에 해당 값들을 넣어주면 됩니다.

여기서 fmt는 포맷으로 그래프의 선스타일과 컬러를 지정.

 

x = np.linspace(0,10,50)
dy = 0.8                      # 오차범위 = 0.8 
y = np.sin(x + np.random.randn(50))   # 조금 드쭉날쭉하게 값을 만들어볼게요

plt.errorbar(x,y, yerr = dy, fmt = '.k')                       # errorbar를 사용하면 오차를 시각화 할 수 있다.fmt = 포맷, yerr = y축에 대한 오차범위, 이사이만큼 오차가 날 수 있음을 나타낸다

 

좀 더 디자인에 신경써서 만들어보면...

 
plt.errorbar(x,y, yerr = dy, fmt='o', color='black', ecolor = 'lightgrey', elinewidth = 3)           # ecolor 에러의 컬러, elinewidth 에러바의 두께
plt.title('error chart')

1. 붓꽃 데이터 임포트

from sklearn.datasets import load_iris       # 붓꽃 데이터를 불러왔습니다
iris = load_iris()                            # 부르기 쉽게 명명

features = iris.data.T   # 속성 데이터를 가져오기
features                 # 4개의 속성데이터가 있다

출력>
Output exceeds the size limit. Open the full output data in a text editorarray([[5.1, 4.9, 4.7, 4.6, 5. , 5.4, 4.6, 5. , 4.4, 4.9, 5.4, 4.8, 4.8,
        4.3, 5.8, 5.7, 5.4, 5.1, 5.7, 5.1, 5.4, 5.1, 4.6, 5.1, 4.8, 5. ,
        5. , 5.2, 5.2, 4.7, 4.8, 5.4, 5.2, 5.5, 4.9, 5. , 5.5, 4.9, 4.4,
        5.1, 5. , 4.5, 4.4, 5. , 5.1, 4.8, 5.1, 4.6, 5.3, 5. , 7. , 6.4,
        6.9, 5.5, 6.5, 5.7, 6.3, 4.9, 6.6, 5.2, 5. , 5.9, 6. , 6.1, 5.6,
        6.7, 5.6, 5.8, 6.2, 5.6, 5.9, 6.1, 6.3, 6.1, 6.4, 6.6, 6.8, 6.7,
        6. , 5.7, 5.5, 5.5, 5.8, 6. , 5.4, 6. , 6.7, 6.3, 5.6, 5.5, 5.5,
        6.1, 5.8, 5. , 5.6, 5.7, 5.7, 6.2, 5.1, 5.7, 6.3, 5.8, 7.1, 6.3,
        6.5, 7.6, 4.9, 7.3, 6.7, 7.2, 6.5, 6.4, 6.8, 5.7, 5.8, 6.4, 6.5,
        7.7, 7.7, 6. , 6.9, 5.6, 7.7, 6.3, 6.7, 7.2, 6.2, 6.1, 6.4, 7.2,
        7.4, 7.9, 6.4, 6.3, 6.1, 7.7, 6.3, 6.4, 6. , 6.9, 6.7, 6.9, 5.8,
        6.8, 6.7, 6.7, 6.3, 6.5, 6.2, 5.9],
       [3.5, 3. , 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1, 3.7, 3.4, 3. ,
        3. , 4. , 4.4, 3.9, 3.5, 3.8, 3.8, 3.4, 3.7, 3.6, 3.3, 3.4, 3. ,
        3.4, 3.5, 3.4, 3.2, 3.1, 3.4, 4.1, 4.2, 3.1, 3.2, 3.5, 3.6, 3. ,
        3.4, 3.5, 2.3, 3.2, 3.5, 3.8, 3. , 3.8, 3.2, 3.7, 3.3, 3.2, 3.2,
        3.1, 2.3, 2.8, 2.8, 3.3, 2.4, 2.9, 2.7, 2. , 3. , 2.2, 2.9, 2.9,
        3.1, 3. , 2.7, 2.2, 2.5, 3.2, 2.8, 2.5, 2.8, 2.9, 3. , 2.8, 3. ,
        2.9, 2.6, 2.4, 2.4, 2.7, 2.7, 3. , 3.4, 3.1, 2.3, 3. , 2.5, 2.6,
        3. , 2.6, 2.3, 2.7, 3. , 2.9, 2.9, 2.5, 2.8, 3.3, 2.7, 3. , 2.9,
        3. , 3. , 2.5, 2.9, 2.5, 3.6, 3.2, 2.7, 3. , 2.5, 2.8, 3.2, 3. ,
        3.8, 2.6, 2.2, 3.2, 2.8, 2.8, 2.7, 3.3, 3.2, 2.8, 3. , 2.8, 3. ,
        2.8, 3.8, 2.8, 2.8, 2.6, 3. , 3.4, 3.1, 3. , 3.1, 3.1, 3.1, 2.7,
        3.2, 3.3, 3. , 2.5, 3. , 3.4, 3. ],
       [1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.6, 1.4,
...
        1.4, 1.2, 1. , 1.3, 1.2, 1.3, 1.3, 1.1, 1.3, 2.5, 1.9, 2.1, 1.8,
        2.2, 2.1, 1.7, 1.8, 1.8, 2.5, 2. , 1.9, 2.1, 2. , 2.4, 2.3, 1.8,
        2.2, 2.3, 1.5, 2.3, 2. , 2. , 1.8, 2.1, 1.8, 1.8, 1.8, 2.1, 1.6,
        1.9, 2. , 2.2, 1.5, 1.4, 2.3, 2.4, 1.8, 1.8, 2.1, 2.4, 2.3, 1.9,
        2.3, 2.5, 2.3, 1.9, 2. , 2.3, 1.8]])

2. 데이터로 그래프 그리기(1)

#iris.feature_names[0]                   # 이 특성이 어떤 데이터인지 이름 알고싶을 때
# iris.target                             # 라벨(label =  target) 을 보면 종류가 몇개로 나누어 졌나 확인가능, 0,1,2로 나왔으니 3가지 꽃종류에 대한 라벨이 있음을 알 수 있다/

plt.scatter(features[0], features[1], c = iris.target, s=features[3]*100, alpha = 0.2, cmap = 'viridis')   # 첫번째 특성 데이터와 두번째 특성 데이터에 대한 점도, 컬러는 라벨에 따라 달라지게 만들었다., alpha를 통해 라벨마다 특정 중심을 알 수 있다.
plt.xlabel(iris.feature_names[0])
plt.ylabel(iris.feature_names[1])
iris.target_names[0]                        # 타켓(라벨)의 이름 알고싶을 때
iris.feature_names[3]                       # 특성 이름이 알고 싶을 때

# 데이터가 겹치면 겹칠 수록 노이즈(오차)가 많아지고 분리가 라벨마다 잘될수록 분리가 잘된 데이터이다.

3. 데이터로 그래프 그리기(2)

 
# 다른 feature로도 만들어보자

plt.scatter(features[2], features[3], c = iris.target, s=features[3]*100, alpha = 0.2, cmap = 'viridis')   
plt.xlabel(iris.feature_names[2])
plt.ylabel(iris.feature_names[3])
iris.target_names[0]                       
iris.feature_names[3]

1. 랜덤값을 만드는 방법들

(1)

 
rng = np.random.RandomState(0)
x = rng.randn(100)      # rng는 random number generation를 뜻하고 rand는 random/  rand뒤에 n을 붙여 randn로 만들면 값이 0을 기준으로 표준편차가 1인 값을 부포해서 값을 뽑아냄 즉 -1~1까지 0을 기준으로 만든다
                   #x = rng.randint(10)                              0~9 사이 임의값 1개 뽑음
                   #x = rng.randint(1,10)                            1에서 9사이 임의의 값 1개
                   #x = np.random.randint(1,7)                     np 해주면 돌릴때마다 랜덤값
y = rng.rand(100)
x

 

#처리한 것들도 궁금하면 써볼 것

(2)

 
or i in [12,3,4,5,6,7,8,9,10]:
  print(np.random.randint(1,7))             # 이제 이건 돌릴 때마다 랜덤값이 나옴

2. 표 그리기

  # rand (0~1)의 값을 지정된 숫자 만큼 임의의 값을 만들어 낸다.
  # randn (0)을 기준으로 편차만큼 떨어진 임의값을 지정된 숫자만큼 만들어 낸다.
  # randint 지정된 범위안의 정수 1개를 만들어 낸다.
plt.style.use('classic')        # 스타일 변경


rng = np.random.RandomState(0)
x = rng.randn(100)
y = rng.randn(100)
sizes = rng.rand(100) * 1000                  # 사이즈 일단 옵션으로 만들자,사이즈는 마이너스 값이 있을수가 없음
color = rng.rand(100)                         # color 라는 옵션 100개 랜덤값 넣음 , 근데 컬러가 좀 촌시러우면 cmap을 구글링해봐(컬러맵) 그 cmap에서 하나 정해서 표 옵션에 이름넣으면 예쁜 컬러로 줄 수 있다.

plt.scatter(x, y, s = sizes, alpha=0.3, c = color, cmap='viridis')               # s = size,  c =color

산점도?

-점을 찍어서 얼마나 데이터가 분산되는지 보는 그래프

1. 예시용 표 만들기

x = np.linspace(0,10,30)          # 점개수를 줄이기 위해 간격을 조정, 0에서 10까지 30개 값
y= np.sin(x)

plt.plot(x, y,'o', color='black' )    #marker로 o를 집어넣으면 동그라미로 산점도가 나옵니다.
 

2. 예시용 표 만들기(2)

 
rng = np.random.RandomState(0)          #넘파이로 랜덤값 찍어보자 여기 괄호에 준 값을 seed값을 준다고한다
#rng.rand(5)                             # 5개의 결과를 만들어달라
plt.plot(rng.rand(5),rng.rand(5), 'o')                  # x,y 좌표에 랜덤으로 5개씩 값을 주었다

seed?

랜덤의 씨앗값을 준다는 것이다(다른데서 0주면 똑같은 랜덤값나옴): 이런건 주로 테스트용으로 사용할 때, 시범용 즉 공부용으로 사용할 때 항상 일정한 랜덤값아 필요하기 때문에 seed를 사용

3. (2)번처럼 랜덤표를 다른 방식으로 표현

 
rng = np.random.RandomState(0)
for marker in ['o',',',',','x','+', 'v', '^','<','>','s','d','p']: 
  plt.plot(rng.rand(5), rng.rand(5), marker, label='maker = {0}'.format(marker))  
  plt.legend(numpoints=1)                               # 레전드에 나오는 포인트 갯수 1개만
  plt.xlim(0, 1.8)

o = 동그라미 마크

, = 점 마크

x = x마크

+ = 십자마크

v = 삼각(아래방향)

^ = 삼각(윗방향)

< = 삼각(왼방향)

> = 삼각(우방향)

s =사각

d =다이아

p = 오각형

4.점에서 선 연결하여 그래프 만들기

plt.plot(x,y, '--ok')                            # 마커에 대시 붙이기 그 뒤에 컬러도 붙이기

plt.plot(x,y,'-p', color='grey',            # 디테일한 지정을 해보자
          markersize = 15,                  # 마커의 사이즈
          markerfacecolor = 'white',        # 미커의 색상
         linewidth = 4,                     # 선 두께
         markeredgecolor = 'red',           # 마커의 테두리 색상
          markeredgewidth = 2               # 마커 테두리 두께
)

 

1. label

plt.plot(x, np.sin(x))                            
plt.title('A Sine Curve')                            # 표 전체에 대한 제목label을 붙여보았습니다
plt.xlabel('x')                                     # x 축에 대한 label
plt.ylabel('sin(x)')                                # y 축에 대한 label

2. 선에 대한 각주 표시

plt.plot(x,np.sin(x), '-g', label='sin(x)')       
       
plt.plot(x, np.cos(x), ':b', label = 'cos(x)')       # sin, cos 그래프에 달아놓은 라벨은 당장에 보이지 않지만 아래 legend 명령으로 각주만들 때 쓰임

plt.axis('equal')                                       # 표 x,y축의 비율 균일하게
                             
plt.legend()                                           # 위에서 지정한 선에 대한 라벨을 토대로 각주 만든다

plt.xlabel('x')                                          # x축에 대한 라벨
plt.ylabel('y')                                          # y축에 대한 라벨 
plt.title('Sin and Cos')                              # 표 전체에 대한 라벨

 

△예시용 그래프

 

위의 그래프를 잘보면 x축과 y축의 비율이 서로 다름을 알 수 있다.

즉 x,y축이 기준이 달라 실제 그래프와 모양이 다르다는 것이다.

(우리가 조건을 안걸면 그래프 무조건 꽉채우려고 해서 그럼)

1. 직접 x,y축의 한계 지정해주기

plt.plot(x, np.sin(x))    

plt.xlim(-1, 11)                    # x 축의 리밋 지정 -1~11까지
plt.ylim(-1.5, 1.5)                 # y 축의 리밋 지정 -1.5~1.5까지
plt.plot(x, np.sin(x))
plt.xlim(10, 0)                       # x축을 반전시켰다, 좌우반전
plt.ylim(1.2, -1.2)                   # y축을 반전시켰다, 상하반전

2. 다른 방식

plt.plot(x, np.sin(x))          # 또 다른 표현 방법
plt.axis([-1,11,-1.5,1.5])                   # x,y에 해당되는 축을 리스트 안에 표현

3. 꽉채워서 그리기

plt.plot(x,np.sin(x))
plt.axis('tight')     # 그래프 꽉채워서 출력, 기본값이긴 함, 그러나 x축과 y축의 비례관계가 지금 다르니 진짜 그래프 모양과 좀 다름

4. x,y축 비율 균일하게 해서 그래프 만들기

plt.plot(x, np.sin(x))
plt.axis('equal')                        # x축과 y축의 비율 동일하게 만들어줌. 이게 진짜 그래프의 크기임

 

+ Recent posts