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

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

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

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

Q&A

解決済

2回答

2533閲覧

pythonでグラフ表示できません

uku81

総合スコア1

Python

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

0グッド

0クリップ

投稿2020/08/11 10:01

前提・実現したいこと

超初心者です。よろしくお願いいたします

pythonでヒストグラムと累積相対度数の折れ線グラフを表示したいのですがうまくいきません

import matplotlib.pyplot as plt
%matplotlib inline
fig=plt.figure(figsize=(10,6))
ax1=fig.add_subplot(111)
ax2=ax1.twinx()

weights=np.ones_like(e_scores)/len(e_scores)
rel_freq, _, _ =ax1.hist(e_scores,bins=25,range=(0,100),weights=weights)

cum_rel_freq=np.cumsum(rel_freq)
class_value=[(i+(i+4))//2 for i in range(0,100,4)]

ax2=plot(class_value,cum_rel_freq,ls='--',marker='○',color='gray')

ax2=grid(visible=False)

ax1.set_xlabel('point')
ax1.set_ylabel('Relative frequency')
ax2.set_ylabel('Cumulative relative frequency')
ax1.set_xticks(np.linspace(0,100,25+1))
plt.show()

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

NameError Traceback (most recent call last)
<ipython-input-180-be1a3a49575d> in <module>()

---> ax2=plot(class_value,cum_rel_freq,ls='--',marker='○',color='gray')
ax2=grid(visible=False)

NameError: name 'plot' is not defined

とエラー表示されます。
ヒストグラムは表示できますが、累積相対度数の折れ線グラフは表示できません。

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

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

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

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

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

guest

回答2

0

maplotlibのヒストグラムに累積比率を追加する
を参照されるとよろしいかと

投稿2020/08/11 10:11

aokikenichi

総合スコア2240

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

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

uku81

2020/08/11 11:53

ありがとうございます。自分のコードと見比べてみます。
guest

0

ベストアンサー

このあたりの使い方がおかしいです。
plot()、grid() ともに Axes オブジェクトのメソッドです。

修正箇所

ax2=plot() ではなく、ax2.plot()

diff

1- ax2=plot(class_value,cum_rel_freq,ls='--',marker='○',color='gray') 2+ ax2.plot(class_value,cum_rel_freq,ls='--',marker='○',color='gray')

ax2=grid() ではなく、ax2.grid()

diff

1- ax2=grid(visible=False) 2+ ax2.grid(visible=False)

marker="○" (全角の○) ではなく、marker="o" (アルファベットの o)

diff

1- ax2.plot(class_value, cum_rel_freq, ls="--", marker="○", color="gray") 2+ ax2.plot(class_value, cum_rel_freq, ls="--", marker="o", color="gray")

サンプルコード

python

1import pandas as pd 2from matplotlib import pyplot as plt 3 4e_scores = np.array([392, 193, 220, 209, 52, 65, 90, 62, 72, 13, 106, 32, 78, 5 23, 44, 19, 56, 281, 56, 26, 61, 27, 63, 224, 80, 122, 6 38, 34, 30, 39, 79, 11, 15, 31, 19, 26, 53, 10, 174, 7 21, 25, 58, 36, 18, 39, 108, 53]) 8 9fig = plt.figure(figsize=(10, 6)) 10ax1 = fig.add_subplot(111) 11ax2 = ax1.twinx() 12 13freq, bins, _ = ax1.hist(e_scores, bins=25, range=(0, 100), rwidth=0.8) # 度数, ビン一覧 14rel_freq = freq / freq.sum() # 相対度数 15cum_rel_freq = rel_freq.cumsum() # 累積相対度数 16class_value = (bins[:-1] + bins[1:]) / 2 # 階級値 17 18ax2.plot(class_value, cum_rel_freq, ls="--", marker="o", color="gray") 19 20ax1.set_xticks(class_value) 21ax2.grid() 22ax1.set_xlabel("point") 23ax1.set_ylabel("Relative frequency") 24ax2.set_ylabel("Cumulative relative frequency") 25plt.show()

イメージ説明

投稿2020/08/11 11:04

編集2020/08/11 12:03
tiitoi

総合スコア21956

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

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

uku81

2020/08/11 11:55

コードまで作っていただき、ありがとうございます!自分のコードとの違いを考えてみます。飲み込みが悪いので少し時間をください…
tiitoi

2020/08/11 12:02

質問のコードで直す必要がある場所3箇所を回答に記載しました。 とりあえずこれを直せば質問のコードでも動きます
uku81

2020/08/11 12:06

ありがとうございます!できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問