-2

OKだから私はPythonでこのコードを持っています.csvファイルからインポートしています.問題は、そのcsvファイルに基本的な数値ではない列があることです. 「INT, EXT」形式のテキストである列が 1 つあり、「0:00 から 11:59」形式の時間形式の列が 1 つあります。「00.00」形式の通常の数値距離として 3 番目の列があります。

私の質問は、距離と時をプロットしてから、散布図のドットの色を変更して、INT または EXT のどちらであるかに基づいてどのように処理するかです。

私の最初の問題は、プログラムに oclock 形式を読み込ませる方法です。csv からのテキスト形式。

アイデアや提案はありますか?前もって感謝します

インポートしようとしている CSV im のサンプルを次に示します。

ML  INT  .10  534.15  0:00
ML  EXT  .25  654.23  3:00
ML  INT  .35  743.12  6:30

4 番目の列を x 軸としてプロットし、5 番目の列を y 軸としてプロットしたい また、INT または EXT であるかどうかに応じて、散布図のドットを赤または青に色分けしたい

ここに私がこれまでに持っているコードのサンプルがあります

import matplotlib.pyplot as plt
from matplotlib import style
import numpy as np

style.use('ggplot')

a,b,c,d = np.loadtxt('numbers.csv',
                unpack = True,
                delimiter = ',')



plt.scatter(a,b)




plt.title('Charts')
plt.ylabel('Y Axis')
plt.xlabel('X Axis')

plt.show()
4

2 に答える 2

0

私はこれに対して別の答えを出しましたが、あなたの特定の質問に正確に答えていないだけで、まだ良いと信じているので元のままにします。

また、少なくとも私の側では、問題をもう少し意味のあるものにするために、さらにいくつかのデータ行を生成しました。

これを解決したのは、特定の時刻に対応する分数である 5 番目の列 (csv ではなくコード) を生成することでした。つまり、11:59 は 719 分にマップされます。パンダを使用して、この新しい列をデータフレームに挿入しました。次に、60 分ごとに 1 時間ごと (「0:00」、「1:00」など) の文字列 ticklabels を配置できます。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

data = pd.read_csv('Workbook2.csv', header=None)
print data

私の偽造されたデータを印刷します:

    0    1     2       3      4
0  ML  INT  0.10  534.15   0:00
1  ML  EXT  0.25  654.23   3:00
2  ML  INT  0.30  743.12   6:30
3  ML  EXT  0.35  744.20   4:30
4  ML  INT  0.45  811.47   7:00
5  ML  EXT  0.55  777.90   5:45
6  ML  INT  0.66  854.70   7:54
7  ML  EXT  0.74  798.40   6:55
8  ML  INT  0.87  947.30  11:59 

次に、時を分に変換する関数を作成します。

def convert_to_min(o_clock):
    h, m = o_clock.split(':')
    return int(h) * 60 + int(m)
# using this function create a list times in minutes for each time in col 4
min_col = [convert_to_min(t) for t in data[4]]
data[5] = min_col  # inserts this list as a new column '5'
print data 

新しいデータ:

    0    1     2       3      4    5
0  ML  INT  0.10  534.15   0:00    0
1  ML  EXT  0.25  654.23   3:00  180
2  ML  INT  0.30  743.12   6:30  390
3  ML  EXT  0.35  744.20   4:30  270
4  ML  INT  0.45  811.47   7:00  420
5  ML  EXT  0.55  777.90   5:45  345
6  ML  INT  0.66  854.70   7:54  474
7  ML  EXT  0.74  798.40   6:55  415
8  ML  INT  0.87  947.30  11:59  719

次に、x 軸と y 軸のデータ、目盛りラベル、目盛りの位置を作成します。

INTs = data[data[1]=='INT']
EXTs = data[data[1]=='EXT']

int_dist = INTs[3]  # x-axis data for INT
ext_dist = EXTs[3]

# plotting time as minutes in range [0 720]
int_time = INTs[5]  # y-axis data for INT
ext_time = EXTs[5]

time = ['0:00', '1:00', '2:00', '3:00', '4:00', '5:00', 
        '6:00', '7:00', '8:00', '9:00', '10:00', '11:00', '12:00']
# this will place the strings above at every 60 min
tick_location = [t*60 for t in range(13)]

今プロット:

fig, ax = plt.subplots()
ax.scatter(int_dist, int_time, c='orange', s=150)
ax.scatter(ext_dist, ext_time, c='black', s=150)
ax.set_yticks(tick_location)
ax.set_yticklabels(time)
plt.legend(['INT', 'EXT'], loc=4)
plt.xlabel('Distance')
plt.ylabel('Time')
plt.title('Seems to work...')
plt.show()

ここに画像の説明を入力

于 2015-05-14T05:19:53.353 に答える