matpplotlib로 Nan의 데이터를 무시하고 선으로 연결
9773 단어 matplotlib
플로팅하려는 NaN이 포함된 CSV 데이터
아래와 같이 부등 간격의 시간 마다의 데이터가 들어간 CSV 파일의 데이터를 플롯 하고 싶다고 합니다.
bar1에서 bar4가 데이터. 중간에 누락이 있습니다.
time
data1
data2
data3
data4
0
449
449
445
440
510.1
445
442
530.1
420
730.1
410
1430.1
412
425
424
421
이것을 그대로 플롯하면 빈 부분에서 matplotlib의 선이 끊어져 부티부티의 그래프가 됩니다.
직선으로 연결되도록 했다는 이야기입니다.
그대로 데이터 프레임으로 플롯 해 보자.
import pandas as pd
df = pd.read_csv("data.csv")
print(df)
아무 생각없이 read_csv로 데이터 프레임에 넣으면 빈 부분이 NaN이됩니다.
시간
data1
data2
data3
data4
0
0.0
449.0
449.0
445.0
440.0
1
510.1
NaN
NaN
445.0
442.0
2
530.1
420.0
NaN
NaN
NaN
3
730.1
NaN
410.0
NaN
NaN
4
1430.1
412.0
425.0
424.0
421.0
import matplotlib.pyplot as plt
markers1 = ["d", "o", "v", "^", "<", ">", "1", "2", "3",
"4", "8", "s", "p", "*", "h", "H", "x", "D", "|", ","]
fig0 = plt.figure(figsize=(8.2,8))
ax = fig0.add_subplot(111)
ax.set_ylim(390,450)
for i in range(4):
ax.plot(df["time"], df["data"+str(i+1)], marker=markers1[i], label="data"+str(i+1))
ax.legend(bbox_to_anchor=(1.01, 1., 0., 0), loc='upper left', borderaxespad=0.,)
matplotlib로 플롯하면 선이 끊어져 표시됩니다. 모두 연결하고 싶다.
어떻게 할까?
플로팅 단계에서 NaN을 dropna로 제거한 다음 플롯합니다. "time"열의 데이터는 모두 채워져 있어, dropna로 사라지지 않으므로, 미리 index로 해 둡니다.
df = pd.read_csv("data.csv",index_col=0)
fig0 = plt.figure(figsize=(8.2,8))
ax = fig0.add_subplot(111)
ax.set_ylim(390,450)
for i in range(4):
ax.plot(df["bar"+str(i+1)].dropna(how='any'), marker=markers1[i], label="data"+str(i+1))
ax.legend(bbox_to_anchor=(1.01, 1., 0., 0), loc='upper left', borderaxespad=0.,)
연결되었습니다.
보충
import pandas as pd
df = pd.read_csv("data.csv")
print(df)
아무 생각없이 read_csv로 데이터 프레임에 넣으면 빈 부분이 NaN이됩니다.
시간
data1
data2
data3
data4
0
0.0
449.0
449.0
445.0
440.0
1
510.1
NaN
NaN
445.0
442.0
2
530.1
420.0
NaN
NaN
NaN
3
730.1
NaN
410.0
NaN
NaN
4
1430.1
412.0
425.0
424.0
421.0
import matplotlib.pyplot as plt
markers1 = ["d", "o", "v", "^", "<", ">", "1", "2", "3",
"4", "8", "s", "p", "*", "h", "H", "x", "D", "|", ","]
fig0 = plt.figure(figsize=(8.2,8))
ax = fig0.add_subplot(111)
ax.set_ylim(390,450)
for i in range(4):
ax.plot(df["time"], df["data"+str(i+1)], marker=markers1[i], label="data"+str(i+1))
ax.legend(bbox_to_anchor=(1.01, 1., 0., 0), loc='upper left', borderaxespad=0.,)
matplotlib로 플롯하면 선이 끊어져 표시됩니다. 모두 연결하고 싶다.
어떻게 할까?
플로팅 단계에서 NaN을 dropna로 제거한 다음 플롯합니다. "time"열의 데이터는 모두 채워져 있어, dropna로 사라지지 않으므로, 미리 index로 해 둡니다.
df = pd.read_csv("data.csv",index_col=0)
fig0 = plt.figure(figsize=(8.2,8))
ax = fig0.add_subplot(111)
ax.set_ylim(390,450)
for i in range(4):
ax.plot(df["bar"+str(i+1)].dropna(how='any'), marker=markers1[i], label="data"+str(i+1))
ax.legend(bbox_to_anchor=(1.01, 1., 0., 0), loc='upper left', borderaxespad=0.,)
연결되었습니다.
보충
df = pd.read_csv("data.csv",index_col=0)
fig0 = plt.figure(figsize=(8.2,8))
ax = fig0.add_subplot(111)
ax.set_ylim(390,450)
for i in range(4):
ax.plot(df["bar"+str(i+1)].dropna(how='any'), marker=markers1[i], label="data"+str(i+1))
ax.legend(bbox_to_anchor=(1.01, 1., 0., 0), loc='upper left', borderaxespad=0.,)
print(pd.read_csv("data.csv").interpolate())
시간
data1
data2
data3
data4
0
0.0
449.0
449.0
445.0
440.0
1
510.1
434.5
436.0
445.0
442.0
2
530.1
420.0
423.0
438.0
435.0
3
730.1
416.0
410.0
431.0
428.0
4
1430.1
412.0
425.0
424.0
421.0
data1의 510.1을 보면 여기는 원래 NaN이었지만 449와 420의 평균값 434.5입니다. 이 경우 0, 510.1, 530.1의 간격을 고려하여 보간해야합니다.
gnuplot 가장 강하다는 것을 알았을 뿐 아니라 하지 않아도 없다. . .
Reference
이 문제에 관하여(matpplotlib로 Nan의 데이터를 무시하고 선으로 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ishigaki/items/edf4088472421eeabd16텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)