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

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

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

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

Python

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

Q&A

解決済

2回答

1286閲覧

matplotlibの使い方について

I_am_broger_

総合スコア21

Matplotlib

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

Python

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

0グッド

0クリップ

投稿2018/02/25 12:44

matplotlibで辞書型を使って、棒グラフを作る方法が分かりません。
ご教授いただければ幸いです。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/02/25 12:53

辞書型と棒グラフの関係が分かりません。辞書型の変数を使って何をやろうとしたのか、もう少し説明してください。
I_am_broger_

2018/02/25 13:53

辞書内のkeyとvalueを紐づけて表示させる方法がわまりません。
退会済みユーザー

退会済みユーザー

2018/02/25 13:58

具体的にどう言うkeyとvalueを持ったディクショナリーなのか、keyをグラフの何として使いたいのか説明してみて下さい。(xtick? ytick? legend?
退会済みユーザー

退会済みユーザー

2018/02/25 13:59

なお、追加の情報は元の質問を編集して追記して下さい。
guest

回答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
KSwordOfHaste

総合スコア18394

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

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

I_am_broger_

2018/02/26 05:25

とても分かりやすかったです。 ありがとうございました。
guest

0

てっきりこういうことかと思いました。

python

1import matplotlib.pyplot as plt 2import numpy as np 3 4d = {"x": np.arange(5), 5 "height": np.arange(5, 0, -1), 6 "width": np.arange(0.2, 1.2, 0.2)} 7plt.bar(**d) 8plt.show()

投稿2018/02/27 14:57

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問