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

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

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

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

Q&A

解決済

3回答

1072閲覧

10個の色の異なる長方形をmatplotlibを用いて表示させたい。

iface

総合スコア42

Matplotlib

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

0グッド

0クリップ

投稿2021/12/04 08:38

前提・実現したいこと

質問失礼致します。
今回実装したいことは、タイトルの通り、全て異なる色の10個の長方形をmatplotlibで表示させたいと思っています。

発生している問題

下記のプログラムを実行したところグラフがひとつしか表示されない状態です。
どこにミスがあるのかご教授お願いします。

該当のソースコード

python

1##プログラムの一部です。 2##self.size = [[10, 5], [20, 10], [15, 40], [25, 25], [10, 10], [5, 20], [30, 5], [40, 20], [20, 15], [5, 5]] 3 4import matplotlib 5import matplotlib.pyplot as plt 6import matplotlib.patches as patches 7 8def mplib(self): 9 10 fig = plt.figure() 11 ax = fig.add_subplot(111) 12 13 colors = ['blue','orange','green','red','purple','brown','pink','gray','olive','cyan'] 14 15 for x in range(len(self.size)): 16 for y in range(1): 17 rec = patches.Rectangle(xy = self.xy[x], width = self.size[x][y], height = self.size[x][y], color = colors[x]) 18 ax.add_patch(rec) 19 ax.set_xlim(0,150) 20 ax.set_ylim(0,150) 21 plt.show()

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

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

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

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

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

guest

回答3

0

元のコードでは全て正方形になってしまいますので、そこも修正しました。

python

1def mplib(self): 2 fig = plt.figure() 3 ax = fig.add_subplot(111) 4 colors = ['blue','orange','green','red','purple','brown','pink','gray','olive','cyan'] 5 for x in range(len(self.size)): 6 rec = patches.Rectangle(xy = self.xy[x], width = self.size[x][0], height = self.size[x][1], color = colors[x]) 7 ax.add_patch(rec) 8 ax.set_xlim(0,150) 9 ax.set_ylim(0,150) 10 plt.show()

実行結果は以下です。
長方形

投稿2021/12/04 09:28

編集2021/12/04 09:29
ppaul

総合スコア24670

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

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

iface

2021/12/05 13:35

プログラム修正していただきありがとうございます。 参考にさせていただきます。
guest

0

動作確認はしていませんが、おそらく、ax.add_patch(rec) のインデントが不適切だからだと思います。正しくは以下の様になるのではないでしょうか。

python

1 for x in range(len(self.size)): 2 for y in range(1): 3 rec = patches.Rectangle(xy = self.xy[x], width = self.size[x][y], height = self.size[x][y], color = colors[x]) 4 ax.add_patch(rec) 5 6 ax.set_xlim(0,150) 7 ax.set_ylim(0,150) 8 plt.show()

投稿2021/12/04 08:45

melian

総合スコア20655

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

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

0

ベストアンサー

サイズ、位置、色を自由に指定可能なように class を定義してみました。

p.py

python3

1import matplotlib 2import matplotlib.pyplot as plt 3import matplotlib.patches as patches 4 5class Data: 6 default_size_list = [] 7 default_pos_list = [0, 0] 8 default_color_list = ['blue', 'orange', 'green', 'red', 'purple', 'brown', 'pink', 'gray', 'olive', 'cyan'] 9 10 def __init__(self, size_list = None, pos_list = None, color_list = None): 11 self.size_list = [] if size_list is None else size_list 12 self.pos_list = [] if pos_list is None else pos_list 13 self.color_list = self.default_color_list if color_list is None else color_list 14 15 def mplib(self): 16 fig = plt.figure() 17 ax = fig.add_subplot(111) 18 pos_num = len(self.pos_list) 19 color_num = len(self.color_list) 20 21 for idx in range(len(self.size_list)): 22 pos_idx = idx % pos_num 23 color_idx = idx % color_num 24 25 rec = patches.Rectangle( 26 xy = self.pos_list[idx], 27 width = self.size_list[pos_idx][0], height = self.size_list[pos_idx][1], 28 color = self.color_list[color_idx] 29 ) 30 ax.add_patch(rec) 31 32 ax.set_xlim(0,150) 33 ax.set_ylim(0,150) 34 plt.show() 35 36# data = Data(None, None, None) 37 38size_list = [[10, 5], [20, 10], [15, 40], [25, 25], [10, 10], [5, 20], [30, 5], [40, 20], [20, 15], [5, 5]] 39pos_list = [[10, 5], [20, 10], [15, 40], [25, 25], [10, 10], [5, 20], [30, 5], [40, 20], [20, 15], [5, 5]] 40data = Data(size_list, pos_list, None) 41 42data.mplib()

実行例
イメージ説明

投稿2021/12/05 00:01

katoy

総合スコア22324

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

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

iface

2021/12/05 13:34

class定義をしたプログラムを作っていただきありがとうございます。 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問