🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

1回答

864閲覧

[Python]幅が不均一な棒グラフのプロット

de_mirage

総合スコア6

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2019/09/22 13:28

編集2019/09/22 14:41

横軸に幅が不均一なデータ(下のコードのmin)を指定して、被り・空白が無い棒グラフを作成したいです。(添付のコードのような棒グラフ)
ループで毎回widthを指定すれば作れるのですが、データ数がかなり多いのでループ以外でできる方法があれば教えてください。

python

1from matplotlib import pyplot as plt 2min = [0, 10, 30, 70, 80] 3count = [1,2,3,4,5] 4for i in range(len(min)-1): 5 plt.bar(min[i], count[i], align="edge", width=min[i+1]-min[i], color="b") 6plt.show()

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

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

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

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

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

can110

2019/09/22 13:51

指定される「幅が不均一なデータ」とは具体的にどのような値のリストになるのでしょうか? 提示例だと[10,20,40,10]のような感じでしょうか?
de_mirage

2019/09/22 14:42 編集

分かりにくい説明ですいません。 与えられるものはminのような差分ではないデータでpandas.core.series.Series型です。 長さは100000くらいあります。
guest

回答1

0

ベストアンサー

元データminSeriesで与えられる場合は、以下のようなコードでループを使わずに描画できます。

Python

1from matplotlib import pyplot as plt 2import pandas as pd 3 4min = pd.Series([0, 10, 30, 70, 80]) 5ws = (min.shift(-1) - min)[:-1] 6ys = [i+1 for i in range(len(ws))] 7 8plt.bar(min[:-1], ys, align="edge", width=ws, color="b") 9plt.show()

修正前

各棒の幅のリストが与えられる場合は、以下のようなコードで同じ結果グラフを得ることができます。

Python

1from matplotlib import pyplot as plt 2import numpy as np 3 4ws = [10,20,40,10] # 幅だけが与えられる 5 6xs = np.cumsum([0] + ws[:-1]) 7print(xs) # [ 0 10 30 70] 8 9ys = [i+1 for i in range(len(ws))] 10print(ys) # [1, 2, 3, 4] 11 12plt.bar(xs, ys, align="edge", width=ws, color="b") 13plt.show()

投稿2019/09/22 14:11

編集2019/09/22 15:01
can110

総合スコア38341

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

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

de_mirage

2019/09/22 15:10

ありがとうございました。 無事目的の棒グラフが作れました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問