質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

3回答

2766閲覧

matplotlibのy軸目盛を消去したい

F91_

総合スコア16

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/08/26 11:55

前提・実現したいこと

機械稼働状況をリアルタイムに監視するため稼働と停止時間を見分けるグラフを作成しています。グラフはなるべく綺麗に大きく見せたいので、y軸の目盛りを消して、少しでも見やすく表示したいです。y軸目盛を消す以外にもグラフを見やすく表示する方法があればそれも合わせ教えて下さい。

消したいy軸の画像

イメージ説明

該当のソースコード

python

1import time 2import japanize_matplotlib 3import RPi.GPIO as GPIO 4import datetime 5import pandas as pd 6import matplotlib.pyplot as plt 7import matplotlib.dates as mdates 8from time import sleep 9 10start=time.time() 11dissolution=1 #計測分解能[s] 12time1=0 #0秒 13rate=0 14# MCP3208からSPI通信で12ビットのデジタル値を取得。0から7の8チャンネル使用可 15def readadc(adcnum,clockpin,mosipin,misopin,cspin): 16 if adcnum> 7 or adcnum<0: 17 return -1 18 19 GPIO.output(cspin,GPIO.HIGH) # I/Oが起きないようにCSを1にする 20 GPIO.output(clockpin,GPIO.LOW)# CLK を0に設定しておく 21 GPIO.output(cspin,GPIO.LOW)# I/Oを始めるためにCSを0にする 22 23 commandout=adcnum# adcnum は 0 (CH0)なので、commandout は 00000000 24 commandout |=0x18 # スタートビット+シングルエンドビット# 0x18 は 00011000 なので、commandout は 00011000 になる。 25 commandout<<=3 # commandout は 11000000 になる。この上位5ビットを使い、制御信号の 11000 を送る。 26 27 for i in range(5): 28 if commandout & 0x80: 29 GPIO.output(mosipin,GPIO.HIGH) 30 else: 31 GPIO.output(mosipin,GPIO.LOW) 32 commandout<<=1 33 GPIO.output(clockpin,GPIO.HIGH) 34 GPIO.output(clockpin,GPIO.LOW) 35 36 adcout=0 # データ保存変数 adcout の初期化 37 38 for i in range(13):# 13ビット読む(ヌルビット+12ビットデータ) 39 GPIO.output(clockpin,GPIO.HIGH) 40 GPIO.output(clockpin,GPIO.LOW) 41 adcout<<=1 42 if i>0 and GPIO.input(misopin)==GPIO.HIGH: 43 adcout |=0x1 44 GPIO.output(cspin,GPIO.HIGH) 45 return adcout 46 47#GPIOへアクセスする番号をBCMの番号で指定することを宣言 48GPIO.setmode(GPIO.BCM) 49 50# ピンの名前を変数として定義# Raspberry Pi のモードとして、GPIOの番号を物理番号ではなく役割番号で指定する 51SPICS=8 52SPIMISO=9 53SPIMOSI=10 54SPICLK=11 55# SPI通信用の入出力を定義 出力ピンなのか入力ピンなのか指定する 56GPIO.setup(SPICLK,GPIO.OUT) 57GPIO.setup(SPIMOSI,GPIO.OUT) 58GPIO.setup(SPIMISO,GPIO.IN) 59GPIO.setup(SPICS,GPIO.OUT) 60 61def plot_operation(fig, ax): 62 data=pd.read_csv('mydata'+nowday+'.csv', header=None, names=[0,1], index_col=0, parse_dates=True) 63 x=data.index 64 y=data.iloc[:,0] 65 d_today = datetime.date.today() 66 dt_start = datetime.datetime(d_today.year, d_today.month, d_today.day, 7, 0) 67 df_start = pd.DataFrame([[0, 0]], index=[dt_start]) 68 d_tomorrow = d_today + datetime.timedelta(days=1) 69 dt_end = datetime.datetime(d_tomorrow.year, d_tomorrow.month, d_tomorrow.day) 70 df_end = pd.DataFrame([[0, 0]], index=[dt_end]) 71 data = df_start.append([data, df_end]) 72 data = data.groupby(level=0).last() 73 data = data.asfreq('min', fill_value=0) 74 plt.bar(x,y,width=0.0007,color="blue") 75 plt.gca().xaxis.set_major_locator(mdates.HourLocator(interval=1)) 76 plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%H:%M')) 77 plt.gca().set_xlim(left=datetime.datetime(d_today.year, d_today.month, d_today.day, 7, 0),right=dt_end) 78 plt.draw() 79 plt.subplots_adjust(left=0.03, right=0.96, bottom=0.2, top=1) 80 plt.pause(1) 81 82fig = plt.figure(figsize=(8.7, 3.5)) 83ax = fig.add_subplot() 84now=datetime.datetime.now() 85nowday='{0:%Y%m%d}'.format(now)#日付でcsv保存するため 86 87while True: 88 try: 89 inputVal0=readadc(0,SPICLK,SPIMOSI,SPIMISO,SPICS)# CH0の信号を取得する プログラム運転(緑) 90 inputVal1=readadc(1,SPICLK,SPIMOSI,SPIMISO,SPICS)#アラーム(赤) 91 if inputVal0 > 2000 or inputVal1 > 2000:#on/offを判断する光量を変更(緑) 92 #print(inputVal0) 93 time1=time1+1 94 print('稼働中') 95 print(now.strftime('%H:%M')) 96 print(time1) 97 if time1>=1: 98 plot_operation(fig, ax) 99 time1=0 100 101 else: 102 print('停止') 103 print(now.strftime('%H:%M')) 104 105 sleep(1) 106 107 except FileNotFoundError: 108 continue 109 except KeyboardInterrupt: 110 break

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

最終的にはこのような表示になりました。
イメージ説明
まだまだ改善余地はありそうです。

投稿2021/08/26 13:01

編集2021/08/26 13:22
F91_

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

plt.subplots_adjust(left=0.03, right=0.96, bottom=0.2, top=1)

left=0
にすれば、y軸は見かけ上出ないと思いますが。
キーワードsubplots_adjustでググってください。

投稿2021/08/26 12:51

ikapy

総合スコア1167

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

F91_

2021/08/26 12:53

ありがとうございます。調べてみます。
guest

0

ベストアンサー

python

1plt.gca().set_yticks([])

を適当な場所に挿入します。

X軸のラベルは

07:00 08:00 09:00 10:00 11:00 12:00 13:00 14:00…

ではなく、

07 08 09 10 11 12 13 14…

でもいいかもしれません。

python

1plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%H'))

投稿2021/08/26 12:38

etherbeg

総合スコア1195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

F91_

2021/08/26 12:55

ありがとうございます。上手くいきました。グラフの見やすさに関してはこれからも追求していきたいです。 07 08 09 10 11 12 13 14…で見やすくなるかは明日現場の方々にも聞いてみます。
etherbeg

2021/08/26 13:08

import matplotlib as mpl mpl.rcParams['toolbar'] = 'None' でウィンドウの下のツールバーを非表示にできるという情報がありました。 https://stackoverflow.com/questions/13942956/disable-matplotlib-toolbar "Make sure to call mpl.rcParams['toolbar'] = 'None' before you instantiate any figures." とありますので、挿入するとしたら fig = plt.figure(figsize=(8.7, 3.5)) の直前ですね(import matplotlib as mpl はもちろん先頭のimport文の並びに)。 もしよろしければお試しください。
etherbeg

2021/08/26 13:10

私が試してみたところでは plt.rcParams['toolbar'] = 'None' でもいけましたので、わざわざimport文を増やさなくても良さそうです。
F91_

2021/08/26 13:13

早速試した所、上手くいきました!ありがとうございます。
etherbeg

2021/08/26 13:44

たびたびすみません、 ウィンドウの上の枠の「Figure 1」という文字も次のコードで変更できるようです。 何か意味のあるタイトルに変更するか、空文字を設定して、何も表示しないのもひとつの手かもしれません。 fig.canvas.set_window_title("タイトル") ※Matplotlib 3.4 以上では fig.canvas.manager.set_window_title("タイトル") とするようですが、質問者さんの使われている Matplotlib はバージョンが古いようですので、上のでいけるはずです。
F91_

2021/08/26 13:51

試しましたが、fig.canvas.set_window_title("")として何も表示しないことは出来なそうでした。
etherbeg

2021/08/26 14:42 編集

あれ、そうですか。 fig.canvas.set_window_title("") fig.canvas.manager.set_window_title("") のいずれでも、私の環境では枠に文字が非表示になりました。 macOS 11.5, Python 3.9.6, matplotlib 3.4.3 です。 OSの問題ですかね。失礼しました。
F91_

2021/08/26 22:48 編集

すみません!枠の文字は非表示になりました。枠自体がなくなるかと思っていました。
etherbeg

2021/08/26 23:43

枠自体をなくす方法もないかと思って、一応調べて試してみたりもしていたのですが、成功しませんでした。 fig.canvas.set_window_title() ではなくて fig.canvas.manager.set_window_title() も使えますか? 質問者さんのmatplotlibのバージョンでは使えないと思い込んでいたのですが、使えるのなら fig.canvas.manager.set_window_title() の方を使った方がいいですね。将来、警告メッセージがでたり、使えなくなったりする心配がないので。
F91_

2021/08/28 02:35

managerを入れると使えないですね。matplotlibはpythonの中にあるので、pythonをアップデートする。この認識で合っていますか?
etherbeg

2021/08/28 09:33

matplotlibはPythonの標準ライブラリではありませんので、Pythonの一部ではありません。Pythonをアップデートしてもmatplotlibはアップデートされません。Pythonをアップデートすることと、matplotlibをアップデートすることは、まったく別の作業になります。 Raspberry Piで作業されているとのことですが、Pythonは最初から入っていたのか、自分でインストールしたのか、Pythonのバージョンは何か、またmatplotlibは最初から入っていたのか、自分でインストールしたのか、matplotlibのバージョンは何か。 こういった細かい条件によって、matplotlibをアップデートできるかどうか、またアップデートの具体的な方法が変わってきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問