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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Matplotlib

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

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

pandas

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

Q&A

0回答

840閲覧

PythonでMatplotlibによるグラフ描画時、軸等の設定を条件分岐させたい

ethark

総合スコア1

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Matplotlib

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

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

pandas

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

0グッド

0クリップ

投稿2020/05/25 12:46

編集2020/05/25 12:51

・Pythonを用いてcsvデータのグラフ描画を行いたいです。
・事前にRadiobuttonを用いてデータの種類を選択しておき、
それにあわせて軸や補助線の設定を変えたいです。
・補助線はcsvデータをデータフレームとして取り込んでいますが、
厄介なのは補助線の本数がデータによって違うことです。
if文で分岐させた中に設定部を取り込んだりしましたが、
うまくいかないです。おそらくmatplotlibの構造(というかオブジェクト指向自体も)
理解できていないことが原因かと思います。

・具体的には以下のコードの"補助線のデータセット"部のコメントアウトしている部分を
ifにより条件分岐させたいです。(Radiobuttonのflg1が2と3の際に適用したい)
また実際に描画する”補助線の描画”部も、それに合わせて分岐、追記が必要と思っています。
おそらく情報不足、認識違い等あると思いますので、その辺りもご指摘いただけたらと思います。
よろしくお願いいたします。

Python

1import tkinter as tk 2from tkinter import filedialog 3import matplotlib.pyplot as plt 4import pandas as pd 5from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg 6 7#ーーーーーーーーーーーーーーー初期処理ーーーーーーーーーーーーーーーー 8#tkをrootウィンドウに適用 9root = tk.Tk() 10# 画面サイズ 11root.geometry("525x375") 12# 画面タイトル 13root.title('Python GUI Test') 14 15#ラジオボタングループ用の変数 16#Variableの変数にボタン番号をセットでデフォルトのチェックを指定 17flg1 = tk.IntVar() 18flg1.set(0) 19 20#ーーーーーーーーーーーーーーー関数の宣言ーーーーーーーーーーーーーーー 21#… 22def file_select(): 23 idir = 'C:\python' #初期フォルダ 24 filetype = [("データ","*.csv"),("すべて","*")] #拡張子の選択 25 file_path = tkinter.filedialog.askopenfilename(filetypes = filetype, initialdir = idir) 26 input_box.insert(tkinter.END, file_path) #結果を表示 27 28#quit 29def cancel(): 30 root.destroy() 31 32#drow 33def drow(): 34 35 if flg1.get() == 0: 36 txt ="A" 37 df = pd.read_csv(r"C:\A1.csv",) 38 df_line = pd.read_csv(r"C:\A2.csv",) 39 x = 40 40 y = -25 41 42 elif flg1.get() == 1: 43 txt ="B" 44 df = pd.read_csv(r"C:B1.csv",) 45 df_line = pd.read_csv(r"C:\B2.csv",) 46 x = 20 47 y = -20 48 49 elif flg1.get() == 2: 50 txt ="C" 51 dfu = pd.read_csv(r"C:\Python\C1.csv",) 52 dfl = pd.read_csv(r"C:\Python\C2.csv",) 53 54 elif flg1.get() == 3: 55 txt ="D" 56 dfu = pd.read_csv(r"C:\Python\D1.csv",) 57 dfl = pd.read_csv(r"C:\Python\D2.csv",) 58 x = 160 59 y = -60 60 61 else: 62 txt ="undef" 63##ーーーーーーーーーーーーーーーグラフ設定ーーーーーーーーーーーーーーーー 64 #Figure = ノートのサイズ 65 #size × dpi = 解像度 66 fig = plt.figure(figsize=(10.0,4.8), 67 dpi = 100, 68 facecolor = 'w', 69 linewidth = '1', 70 edgecolor = 'grey' 71 ) 72 #subplot = 付箋のサイズ ↓縦横何分割したn番目に描画、グラフひとつなら111で良い 73 ax = fig.add_subplot(111, 74 #title = txt, 75 fc = 'w', 76 xlabel = 'Distance [m]', 77 xlim = (0,x), 78 ylabel = 'Relative_Velocity [km/h]', 79 ylim = (y,0), 80 ) 81 82 #plt.rcParamsはデフォルト設定のパラメータをオーバーライドできる 83 #目盛の配置 84 plt.rcParams["xtick.top"] = True 85 plt.rcParams["xtick.bottom"] = False 86 plt.rcParams["ytick.left"] = True 87 plt.rcParams["ytick.right"] = False 88 89 #spines = 枠線 90 ax.spines['top'].set_linewidth(1) 91 ax.spines['top'].set_color('grey') 92 ax.spines['right'].set_linewidth(1) 93 ax.spines['right'].set_color('grey') 94 ax.spines['left'].set_linewidth(1) 95 ax.spines['left'].set_color('gray') 96 ax.spines['bottom'].set_linewidth(1) 97 ax.spines['bottom'].set_color('grey') 98 99 #tick = 目盛のひげ 100 #ticklabel = 目盛ラベル デフォルトは左と下 101 ax.tick_params(direction='in', length=6, width=1, color='gray') 102 ax.tick_params(labeltop={True}) 103 ax.tick_params(labelbottom={}) 104 105 #grid = 罫線 106 ax.yaxis.grid(linestyle='--', lw=1, alpha=0.4, color='lightgray') 107 108#ーーーーーーーーーーーーーーー補助線のデータをセットーーーーーーーーーーーーーーーー 109 #AとBのときに引きたい 110 df2 = df[df["point"].isin([2])] 111 df2_5 = df[df["point"].isin([2.5])] 112 df3 = df[df["point"].isin([3])] 113 df3_5 = df[df["point"].isin([3.5])] 114 df4 = df[df["point"].isin([4])] 115 116 df_line2 = df_line[df_line["point"].isin([2])] 117 df_line2_5 = df_line[df_line["point"].isin([2.5])] 118 df_line3 = df_line[df_line["point"].isin([3])] 119 df_line3_5 = df_line[df_line["point"].isin([3.5])] 120 df_line4 = df_line[df_line["point"].isin([4])] 121 122 #CとDのときに引きたい 123 #df_u = df_u[df_u["point"].isin([u])] 124 #df_l = df_l[df_l["point"].isin([l])] 125 126 #ーーーーーーーーーーーーーーー補助線を描画ーーーーーーーーーーーーーーーー 127 plt.plot(df2['D'],df2['Vr'], 128 linewidth = 1, 129 linestyle = 'dashed', 130 color = 'dimgrey' 131 ) 132 133 plt.plot(df2_5['D'],df2_5['Vr'], 134 linewidth = 1, 135 linestyle = 'solid', 136 color = 'red' 137 ) 138 139 plt.plot(df3['D'],df3['Vr'], 140 linewidth = 1, 141 linestyle = 'dashed', 142 color = 'darkgrey' 143 ) 144 145 plt.plot(df3_5['D'],df3_5['Vr'], 146 linewidth = 1, 147 linestyle = 'solid', 148 color = 'red' 149 ) 150 151 plt.plot(df4['D'],df4['Vr'], 152 linewidth = 1, 153 linestyle = 'dashed', 154 color = 'dimgrey' 155 ) 156 157 plt.plot(df_line2['D'],df_line2['Vr'], 158 linewidth = 1, 159 linestyle = 'dashed', 160 color = 'dimgrey' 161 ) 162 163 plt.plot(df_line2_5['D'],df_line2_5['Vr'], 164 linewidth = 1, 165 linestyle = 'solid', 166 color = 'red' 167 ) 168 169 plt.plot(df_line3['D'],df_line3['Vr'], 170 linewidth = 1, 171 linestyle = 'dashed', 172 color = 'darkgrey' 173 ) 174 175 plt.plot(df_line3_5['D'],df_line3_5['Vr'], 176 linewidth = 1, 177 linestyle = 'solid', 178 color = 'red' 179 ) 180 181 plt.plot(df_line4['D'],df_line4['Vr'], 182 linewidth = 1, 183 linestyle = 'dashed', 184 color = 'dimgrey' 185 ) 186#CとDの時に引きたい 187 plt.plot(df_u['D'],df_u['Vr'], 188 linewidth = 1, 189 linestyle = 'solid', 190 color = 'dimgrey' 191 ) 192 plt.plot(df_l['D'],df_l['Vr'], 193 linewidth = 1, 194 linestyle = 'solid', 195 color = 'dimgrey' 196 ) 197 198 #ここからポップアップを描画していく 199 pltWindow = tk.Toplevel(root) 200 pltWin = FigureCanvasTkAgg(fig, master=pltWindow) 201 pltWin.get_tk_widget().grid(row=0, column=0, rowspan=10) 202 203 #rootに対しToplevelでポップアップ(pltWindow)作成 204 #pltWindowに対して(master=)、pltWinという名前でCanvas(描画)GUIを生成しfigを描く 205 #gridで配置する…無いと描画されない、謎 206 #とりあえずデータじゃなくて大枠描画 207 208 #CanvasにGUIを乗せる 209 pltWin.drow() 210 211#ーーーーーーーーーーーーーーーウィジェット描画ーーーーーーーーーーーーーーーー 212#参照ボタン 213button = tk.Button(text="…",command=file_select) 214button.place(x=300, y=245) 215 216#閉じるボタン 217button = tk.Button(text="quit",command=cancel) 218button.place(x=450, y=300) 219 220#描画ボタン 221button = tk.Button(text="drow",command=drow) 222button.place(x=50, y=300) 223 224#データ選択エントリ 225input_box = tk.Entry(width=25) 226input_box.place(x=50, y=250) 227 228#条件選択(ラジオボタン作成) 229chk1 = tk.Radiobutton(root, value=0 ,variable=flg1, text='A') 230chk1.place(x=50, y=50) 231 232chk2 = tk.Radiobutton(root, value=1 ,variable=flg1, text='B') 233chk2.place(x=50, y=100) 234 235chk3 = tk.Radiobutton(root, value=2 ,variable=flg1, text='C') 236chk3.place(x=50, y=150) 237 238chk4 = tk.Radiobutton(root, value=3 ,variable=flg1, text='D') 239chk4.place(x=50, y=200) 240#ーーーーーーーーーーーーーーーroot描画ーーーーーーーーーーーーーーーー 241root.mainloop()

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

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

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

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

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

teamikl

2020/05/27 13:37

>補助線はcsvデータをデータフレームとして取り込んでいますが、 >厄介なのは補助線の本数がデータによって違うことです。 >if文で分岐させた中に設定部を取り込んだりしましたが、うまくいかないです。 具体的にどうなりますか。エラーが出る、期待通りに動作しない等。 CSVのデータ中身がわからないので、コード実行できません。 実行可能な形でコードを提示できますか。 といっても8個のcsvファイル全ての内容を書かれても困るので、 規模を縮小した、他者が実行して問題点を確認できるコードを作って提示して下さい。 データはソース内にサンプルデータを記述するか、 外部ファイルにする際はファイルの読み込み先は絶対パスでないほうが良いです。 (実行準備にファイル設置や、ファイルパス書き換えなどの手間がかかる為、 コピーしてそのまま動くのが理想です) ---- 複数の課題があるようなので一つづつ取り組んでみてはどうでしょう - matplotlib/pandas で csvのグラフの描画 (ここで tkinter は使わない)  まずは分岐は考えず、簡略化して1つのファイルの描画を考えます  データ形式によって異なる部分を関数の引数にします - tkinter でラジオボタンの選択により処理を変える (matplotlib/pandasは使わない)  ラジオボタンの選択により、異なる引数で関数を呼び出す方法を考えます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問