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

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

ただいまの
回答率

90.85%

  • Python 3.x

    4816questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Matplotlib

    226questions

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

各凡例ラベルを1つのみ表示させたい

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 168

bkts94441

score 11

 前提・実現したいこと

各motion3個の線を表示させつつ(計10個の線)、凡例ラベルの同名で表示されているものを1つにまとめたい

 発生している問題・エラーメッセージ

こちらの画像の凡例ラベルの[motion0],[motion2],[motion4]を一つだけ表示させたいのですが、以下の様に表示されてしまいます。同色の線を描画しつつ、同名のmotionを1つのみ表示させるには、どの箇所に変更点を加えれば良いかわからず、質問させていただきました。どうか、ご教示よろしくお願い致します。
イメージ説明

 該当のソースコード

長く見づらくて申し訳ありませんが、ご覧いただけると幸いです。よろしくお願い致します。

#plot_Duplication.py

import pandas as pd
import matplotlib.pyplot as plt
import os
#####RuntimeWarning エラー回避
import numpy as np
np.seterr(divide='ignore', invalid='ignore')
#####

#出力処理
def Output():
    motions = ["0","2","4"]
    speedes02 = ["0","1","2"]    
    speedes4 = ["1","2","3","4"]
    TF = ["Time","Freq"]
    tp_list = ["pickup","torque"]
    Time_features = ["std","cf"]
    Freq_features = ["Rotation2_section2"]

    Date = input("日付入力:")
    mkdir = "//../Date"
    read_path = "//../filedata"
    os.chdir(read_path)

    for sample in samples:
        for tf in TF:
            for tp in tp_list:
                if tf in "Time":
                    for feature in Time_features:
                        plt.figure(figsize=(Xsize,Ysize))
                        plt.grid()
                        title_name = "Duplicated_"+feature
                        for motion in motions:
                            if motion in "4":
                                for speed in speedes4:
                                    df = pd.read_csv("Timedata.csv")
                                    df = df.query("motion_type in ["+motion+"] & speed_setting in ["+speed+"]")
                                    Time_feature_plot(df,feature,tf,tp,title_name,motion,speed)
                                    save=tp+"_"+sample+"_"+feature+"_duplicated.png"
                            else:
                                for speed in speedes02:
                                    df = pd.read_csv("Timedata.csv")
                                    df = df.query("motion_type in ["+motion+"] & speed_setting in ["+speed+"]")
                                    Time_feature_plot(df,feature,tf,tp,title_name,motion,speed)
                                    save=tp+"_"+sample+"_"+feature+"_duplicated.png"
                        graph_label(title_name,feature)
                        plt.savefig(mkdir+"/"+save)

                elif tf in "Freq":
                    for feature in Freq_features:
                        plt.figure(figsize=(Xsize,Ysize))
                        plt.grid()
                        title_name = "Duplicated_"+feature
                        for motion in motions:
                            if motion in "4":
                                for speed in speedes4:
                                    df = pd.read_csv("Freqdata.csv")
                                    df = df.query("motion_type in ["+motion+"] & speed_setting in ["+speed+"]")
                                    Freq_feature_plot(df,feature,tf,tp,title_name,motion,speed)
                                    save=tp+"_"+sample+"_"+feature+"_duplicated.png"   
                            else:
                                for speed in speedes02:
                                    df = pd.read_csv("Freqdata.csv")
                                    df = df.query("motion_type in ["+motion+"] & speed_setting in ["+speed+"]")
                                    Freq_feature_plot(df,feature,tf,tp,title_name,motion,speed)
                                    save=tp+"_"+sample+"_"+feature+"_duplicated.png"
                        graph_label(title_name,feature)
                        plt.savefig(mkdir+"/"+save)

#Timefeature
def Time_feature_plot(df,feature,tf,tp,title_name,motion,speed):
    ot = df["operating_time"]
    fp = df[feature+"_section2_"+tp]
    if motion in "0":
        plt.plot(ot,fp,linestyle="solid",label=motion+"motion",color="red")
    if motion in "2":
        plt.plot(ot,fp,linestyle="solid",label=motion+"motion",color="blue")
    if motion in "4":
        plt.plot(ot,fp,linestyle="solid",label=motion+"motion",color="green")

#Freqfeature
def Freq_feature_plot(df,feature,tf,tp,title_name,motion,speed):
    ot = df["operating_time"]
    fp = df[feature]
    if motion in "0":
        plt.plot(ot,fp,linestyle="solid",label="motion"+motion,color="red")
    if motion in "2":
        plt.plot(ot,fp,linestyle="solid",label="motion"+motion,color="blue")
    if motion in "4":
        plt.plot(ot,fp,linestyle="solid",label="motion"+motion,color="green")

if __name__ == "__main__":

    #グラフサイズ手動設定
    """
    Xsize = int(input("グラフサイズX軸..."))
    Ysize = int(input("グラフサイズY軸..."))
    plt.rcParams["font.size"] = int(input("ラベルサイズ..."))
    """ 
    #グラフサイズ自動設定
    Xsize = 10
    Ysize = 10
    plt.rcParams["font.size"] = 16
    plt.rcParams["xtick.labelsize"]
    plt.rcParams["ytick.labelsize"]

    HDnumber = []
    samples = []
    #読み込むcsvファイル
    some_csv = int(input("読み込み数..."))
    for csv_cnt in range(some_csv):
        HDnumber = input("読み込みデータ番号:")
        samples.append(HDnumber)
    Output()
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

提示コードは確認していませんが、一部の凡例のみを表示する例です。
参考:
matplotlibでの凡例(ラベル)の表示場所・形式を変更する
matplotlib.pyplot.legend

import numpy as np
import matplotlib.pyplot as plt

xs = np.arange(10)
handles = [] # A list of Artists (lines)
labels = ['red','green','blue'] # 簡単のため色=ラベル名とする
for i in range(6):
    ys = (xs ** 2) / (i+1)
    line, = plt.plot( xs, ys, linestyle="solid", label='line{}'.format(i),color=labels[i//2])
    if i % 2 == 0: # 同色をまとめる
        handles.append(line)
#plt.legend()                  # そのまま
plt.legend( handles, labels)  # 色でまとめる
plt.show()

そのまま
イメージ説明

色でまとめる
イメージ説明

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/22 17:09

    can110様
    ご回答いただき、ありがとうございます。
    今後使用する可能性がありますので、ご参考にさせていただきます。

    キャンセル

check解決した方法

0

ご覧いただいた皆様、申し訳ありません。
グラフ自体の仕様変更することに決定しましたので解決とさせていただきます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.85%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python 3.x

    4816questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Matplotlib

    226questions

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