前提・実現したいこと
ある機械の可動率をデータで吸い上げ、Pythonでデータ処理をして見える化しようとしています。
matplotlibによってグラフを描いてみたのですが、思ったような結果にならず困っています。
得たい結果としては、
①x軸の不要なラベルを除去したい
②x軸ラベルの日付表記が、CSVデータでは%Y/%m/%dのはずなのに%Y-%m-%dになってしまっているので%Y/%m/%d表記にしたい
③y軸の左側のラベルのグリッド線と、右側ラベルのグリッド線がずれているので揃えたい
以上よろしくお願いします。
発生している問題・エラーメッセージ
上図を参照ください。
該当のソースコード
#! python3 #! utf-8 import pandas as pd import matplotlib.pyplot as plt import datetime import matplotlib.dates as mdates import numpy as np from matplotlib.dates import DateFormatter from dateutil.parser import parse from matplotlib.font_manager import FontProperties fp = FontProperties(fname=r'c:\Windows\Fonts\meiryo.ttc') from pandas.plotting import register_matplotlib_converters register_matplotlib_converters() %matplotlib inline #jupyternotebookに図を埋め込む %reload_ext autoreload #オートリロード %autoreload 2 data1 = pd.read_csv("MCM00000000226C1313_2019-12-02.csv") data2 = pd.read_csv("MCM00000000226C1313_2019-12-03.csv") data3 = pd.read_csv("MCM00000000226C1313_2019-12-04.csv") data4 = pd.read_csv("MCM00000000226C1313_2019-12-05.csv") data5 = pd.read_csv("MCM00000000226C1313_2019-12-06.csv") data6 = pd.read_csv("MCM00000000226C1313_2019-12-07.csv") concat_data = pd.concat([data1,data2,data3,data4,data5,data6],ignore_index=True) #データ結合 drop_data = concat_data.drop(['SERIAL', 'IPADDRESS', 'E4', 'STE4','STE5','CE', 'CS'], axis=1) #不要なカラム削除 drop_data.columns = ['時刻', '段取時間[s]', '総生産数[個]', '可動率[%]', '背番'] #カラム名を日本語に変更 drop_data.round(2) #データを小数点以下2桁へ変更 change_data = drop_data[['時刻','背番','可動率[%]','総生産数[個]','段取時間[s]']] #カラム位置を変更 change_data['時刻'] = pd.to_datetime(change_data['時刻'],format='%Y-%m-%d') #時刻表記を変更 change_data['曜日'] = change_data['時刻'].dt.strftime('%A') #生産終了時の可動率のみピックアップ select_data = change_data[((change_data['時刻'].dt.hour==16) & (change_data['時刻'].dt.minute==0)) |((change_data['時刻'].dt.hour==3) & (change_data['時刻'].dt.minute==30) | (change_data['時刻'].dt.hour==1) & (change_data['時刻'].dt.minute==40) & (change_data['曜日'] == 'Saturday'))] select_data = select_data.reset_index(drop = True) #昼勤の可動率のみピックアップ d_data = change_data[(change_data['時刻'].dt.hour==16) & (change_data['時刻'].dt.minute==0)] d_data = d_data.reset_index(drop = True) d_data['時刻'] = d_data['時刻'].dt.date #夜勤の可動率のみピックアップ n_data = change_data[(change_data['時刻'].dt.hour==3) & (change_data['時刻'].dt.minute==30) | (change_data['時刻'].dt.hour==1) & (change_data['時刻'].dt.minute==40) & (change_data['曜日'] == 'Saturday')] n_data = n_data.reset_index(drop = True) n_data['時刻'] = n_data['時刻'].dt.date #グラフ化 plt.close(1) left = d_data['時刻'] bar_height = d_data['総生産数[個]'] line_height = d_data['可動率[%]'] # 折れ線グラフを出力 fig, ax1 = plt.subplots() ax1.plot(left, line_height, linewidth=2, color="orange") ax1.xaxis.set_major_locator(mdates.DayLocator(bymonthday=None, interval=1, tz=None)) labels = ax1.get_xticklabels() plt.ylim(60,100) plt.setp(labels, rotation=45, fontsize=8); # 棒グラフを出力 ax2 = ax1.twinx() ax2.bar(left, bar_height,color="royalblue", linewidth=4, width= 0.5) plt.ylim(7000,13000) ax1.grid()
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
OS:Windows10
python3
jupyter notebook
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/07 04:37