matplotlibで辞書型を使って、棒グラフを作る方法が分かりません。
ご教授いただければ幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/25 13:53
退会済みユーザー
2018/02/25 13:58
退会済みユーザー
2018/02/25 13:59
回答2件
0
ベストアンサー
###step1
まず棒グラフを書くための関数のリファレンスを見ます。どんなデータを与えればどんな棒グラフになるのかの仕様がわかります。
https://matplotlib.org/devdocs/api/_as_gen/matplotlib.pyplot.bar.html
###step2
辞書の「何」(key, value)を棒グラフを描画するメソッド(matplotlib.pyplot.bar)の「どの引数」(x, height, tick_labelなど)にしたいのかを決めます。
###step3
辞書から目的の引数が要求するデータの型(例えばheightであればスカラー値かシーケンス)にするかを考えます。
さてここで「sequence of scalars=>シーケンスってなんだ?」と思うかも知れません。自分はPythonの型の種類について理解が浅いのでそんなふうに思いました。そこで
https://docs.python.org/ja/3/library/stdtypes.html#sequence-types-list-tuple-range
https://docs.python.org/ja/3/library/collections.abc.html#collections.abc.Sequence
こういうページをみたり、matplotlibのサンプルでnumpy.ndarrayがデータ系列の指定に用いられている例をみて、「0~len(x)-1の範囲の整数インデックスによりx[index]で要素が取り出せるもの」というアバウトな理解をしました。
さて、dictはシーケンス「ではありません」し、dict.keys(), dict.values()のようなiterableもシーケンス「ではありません」。そこでこれらのものをシーケンスへ変換する必要があるだろうと思います。例えばlist(iterable)
などとすると簡単にリストにできますのでそういう方法を考えれば「barメソッドの引数を作れる」と思います。
例:d
が辞書だとして
(1) キーを順番をきにせずシーケンスにする
keys = list(d.keys())
(2) キーを辞書順にソートしたシーケンスを求める
keys = sorted(d.keys())
(3) キーのシーケンスに対応する値のシーケンスを求める
values = list(map(lambda key: d[key], keys))
or
values = list(map(d.__getitem__, keys))
or
[d[key] for key in keys]
など。
このあたりまでの理解ができればそこそこ「望む棒グラフ」が書けるようになるのではないかと思います。ためしに「辞書のキーをX軸ラベルにして値をバーの高さ」で描いてみました。
python
1import numpy as np 2import matplotlib.pyplot as plt 3 4d = {'aa': 100, 'a': 200, 'A': 300} 5keys = sorted(d.keys()) # A, a, aaの順番になります 6values = [d[key] for key in keys] 7x = range(len(d)) 8 9plt.bar(x, values, tick_label=keys) 10plt.show()
追記:いいわすれ
本回答はどちらかというと私自身が「棒グラフ書いたことがない」&「リファレンスのsequence of scalarsって要するになんだろうと感じた」ため、ちょっとやってみたという意味合いが強いです。
ご質問は「何も調べていないかのよう」で「あまりに率直すぎる丸投げ質問」に見えます。もう少し「自分で調べたこと」「自分がやりたいこと」「躓いた点」が読み手に伝わるよう具体的に書くことを強くおすすめします。
投稿2018/02/26 00:00
編集2018/02/26 00:19総合スコア18394
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。