[解決済み] ヒストグラムをY軸をパーセントでプロットする(FuncFormatterを使用?)
2022-02-17 02:42:54
質問
1000から20000までの数字のデータのリストがあります。
data = [1000, 1000, 5000, 3000, 4000, 16000, 2000]
を使ってヒストグラムをプロットすると
hist()
関数では、Y軸は1ビン内の値の出現回数を表します。出現回数の代わりに、出現率を表示したいのですが。
上のプロットのコード。
f, ax = plt.subplots(1, 1, figsize=(10,5))
ax.hist(data, bins = len(list(set(data))))
私は、この
ポスト
を使用した例を説明しています。
FuncFormatter
しかし、私の問題にどのように適応させればよいのかがわかりません。何かお手伝いやご指導をいただければ幸いです :)
EDITです。
の主な問題点は
to_percent(y, position)
関数が使用する
FuncFormatter
. yはy軸の与えられた1つの値に対応すると思います。この値を要素の総数で割る必要があるのですが、どうやらこの関数に渡すことはできないようです...。
EDIT 2: 現在のソリューションは、グローバル変数が使用されているため、私は嫌いです。
def to_percent(y, position):
# Ignore the passed in position. This has the effect of scaling the default
# tick locations.
global n
s = str(round(100 * y / n, 3))
print (y)
# The percent symbol needs escaping in latex
if matplotlib.rcParams['text.usetex'] is True:
return s + r'$\%$'
else:
return s + '%'
def plotting_hist(folder, output):
global n
data = list()
# Do stuff to create data from folder
n = len(data)
f, ax = plt.subplots(1, 1, figsize=(10,5))
ax.hist(data, bins = len(list(set(data))), rwidth = 1)
formatter = FuncFormatter(to_percent)
plt.gca().yaxis.set_major_formatter(formatter)
plt.savefig("{}.png".format(output), dpi=500)
EDIT 3:
を使った方法
density = True
実際に望む出力(グローバル変数によるメソッド)。
解決方法は?
他の答えは、まったく複雑なようです。絶対量ではなく比率を示すヒストグラムは、データを
1/n
ここで
n
はデータポイントの数である。
次に
PercentFormatter
は、比率を示すために使用することができます(例.
0.45
) をパーセンテージで表示します (
45%
).
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import PercentFormatter
data = [1000, 1000, 5000, 3000, 4000, 16000, 2000]
plt.hist(data, weights=np.ones(len(data)) / len(data))
plt.gca().yaxis.set_major_formatter(PercentFormatter(1))
plt.show()
ここでは、7つの値のうち3つが最初のビンにあること、つまり3/7=43%であることがわかります。
関連
-
PythonによるLeNetネットワークモデルの学習と予測
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
任意波形を生成してtxtで保存するためのPython実装
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] Matplotlibでプロットを表示するのではなく、画像ファイルに保存する。
-
[解決済み] IPythonノートブックmatplotlibプロットをインラインで行う方法
-
[解決済み] matplotlib のプロットで軸のテキストを非表示にする
-
[解決済み】forループを使った辞書の反復処理
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
Python機械学習Githubが8.9Kstarsに達したモデルインタープリタLIME
-
PythonはWordの読み書きの変更操作を実装している
-
Python interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
Python入門 openを使ったファイルの読み書きの方法
-
Python 入出力と高次代入の基礎知識
-
[解決済み] データ型が理解できない
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない