【python】【3D 꺾은선형 차트】 여러 데이터를 하나의 그래프로, 축의 값을 문자로

16904 단어 파이썬matplotlib
테크로스라는 게임 회사에서 학생 바이트로 공부하고 있는 초보자 프로그래머입니다.
이번은 대학원에서 연구할 때, 데이터를 해석하는데 python으로 3D그래프 그릴 때 조금 곤란했으므로 자신용으로 메모합니다. 이것이 누군가의 도움이 되면,

소개





이런 느낌의 그래프를 그립니다. 축 라벨과 시간이 겹치고 있지만 신경 쓰지 않는다.
matplotlib과 Axes3D를 사용합니다.

우선 3D에 뭔가를 플롯 해 봅시다.



【Matplotlib】3D 직선 그래프의 작성 를 참고했습니다! 감사합니다.
# -*- coding: utf-8 -*-
import numpy as np         ### 今回はnumpy使ってないんでいらねーです
import matplotlib.pyplot as plt        ### グラフ描くなら2D3D関係なく必要
from mpl_toolkits.mplot3d import Axes3D      ### 3Dなら必要

# (x, y, z)
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]
z = [1, 2, 3, 4, 5]
# 3Dでプロット
fig = plt.figure()
ax = Axes3D(fig)
ax.plot(x, y, z)
# 軸ラベル
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
# 表示
plt.show()


실행하면 이렇게됩니다.


갑자기 가자.

여러 배열을 하나의 그래프에 그리기



for문사하면 순간이네요.
# -*- coding: utf-8 -*-
import numpy as np       ### 今回はnumpy配列使うので必要
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

### 3Dグラフの箱を用意(多分)
fig = plt.figure()
ax = Axes3D(fig)

### x軸は共通にします
x = [1, 2, 3, 4, 5]

###今回は3本のデータを一つのグラフにします
for i in range(3):

    ### 要素数5で要素は全てi
    y = np.full(5,i)

    ### 要素数5で要素は0以上1以下の乱数
    z = np.random.rand(5)

    # 3Dでプロット
    ax.plot(x, y, z)

# 軸ラベル
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
# 表示
plt.show()

실행하면


이런 느낌이 듭니다.
갑자기 가자.

축의 값을 string으로 하고 싶다! !



예를 들면 y축을 「1월, 2월, 3월」로 하는 것 같은 이미지.
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = Axes3D(fig)

### y軸の数値を入れる配列
y_num = np.array([])
### y軸に設定したい文字列を入れる配列
y_axis = np.array([])

x = [1, 2, 3, 4, 5]

for i in range(3):
    y = np.full(5,i)
    z = np.random.rand(5)
    ax.plot(x, y, z)

    y_num = np.append(y_num,i)
    y_axis = np.append(y_axis,"{}data".format(i))

### y_numは[0,1,2]
### y_axisは[0data,1data,2data]

plt.yticks(y_num,y_axis)

ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')

plt.show()

실행하면



완성~~! ! ! 간단하네요.
처음 plt.yticks()가 아니고 ax.yticks()라고 사용해서 할 수 없었다,,

이어서



두 번째 그래프에서 축의 수치 간격이 너무 작거나 너무 크다면 ax.set_xticks() 함수를 사용하면 좋다.
마지막 그래프에서 y축을 날짜와 시간으로 시도합니다.
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

### 日時表示にするなら必要
from datetime import datetime
import time

fig = plt.figure()
ax = Axes3D(fig)
y_num = np.array([])
y_axis = np.array([])
x = [1, 2, 3, 4, 5]

for i in range(3):
    y = np.full(5,i)
    z = np.random.rand(5)
    ax.plot(x, y, z)
    y_num = np.append(y_num,i)

    ### y_axisに適当に日時をstringとして追加
    y_axis = np.append(y_axis,"2019-1-1 11:11:0{}".format(i))
    ### stringになった時間をdatetime型に
    temp_datetime = datetime.strptime(y_axis[i],'%Y-%m-%d %H:%M:%S')
    ### 時間だけを抽出してstring型に
    y_axis[i] = temp_datetime.strftime('%H:%M:%S')

plt.yticks(y_num,y_axis)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.show()

실행하면


목표로 한 그래프를 그릴 수있었습니다! ! 죄송합니다.

아, 파이썬으로 날짜와 시간을 처리하고 싶을 때는 datetime을 사용합시다.
이거 빠지는 사람은 빠진다. 연구 데이터를 취급할 때, 일시의 형태가 datetime이 아니거나 합니다만, datetime에 고치는 것이 편합니다.

끝에



조금 너무 어색했을까요? 설명을 원한다면 코멘트하십시오. 추가합니다.
일시의 부분간 빠진 쓰는 방법 하고 있을지도 모릅니다. 우아하게 쓸 수 있으면 알려주세요.

그래프 그릴 수 있게 되었기 때문에 빨리 연구하지 않으면. .

좋은 웹페이지 즐겨찾기