PandasのDataFrameから、matplotlibを使って棒グラフを描きたいです。


以下の通り記述してみましたけれど、うまく行きません。どうしたら、良いでしょう。

from pandas import DataFrame

# aが100、bが200の棒グラフを描きたい
df=DataFrame([100,200],index=['a','b'])
import matplotlib.pyplot as plt
plt.bar(df)

TypeError: bar() missing 1 required positional argument: 'height'

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2020/02/27 21:45:07

回答1件)

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

質問に書いてあるコードって、どこから持ってきました?

やったことはありませんが、ドキュメントを見る限り、pandas.DataFrame.prot.bar() と matplotlib.pyplot.bar() を混同しているような感じです。

bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)

↑とあるように、matplotlib.pyplot.bar() は、最初のふたつの引数が省略できないとのことなので、以下のエラーが出ています。

TypeError: bar() missing 1 required positional argument: 'height'

ただ、第2引数を指定したとしても、第1引数が "x : sequence of scalars" とありますから、型があっていないので期待通りには動かないでしょう。


dandas.DataFrame.prot.bar() を呼んだ後に、matprotlib.pyplot.show() とかすれば良いのかな。
ググってみたら動きそうなコードはいっぱい落ちているような気がしますが。

id:torimaki

a-kumaさま
ご連絡遅くなってしまいました。ありがとうございます。

以下にて描くことができました。もっとも、あちこちのウェッブサイトを参照し、なんとなく出来たのですが...

from pandas import DataFrame
import matplotlib.pyplot as plt
df = DataFrame({ 'a':[100], 'b': [200] })
ax = plt.subplot()
df.plot.bar(stacked=True, color=['#ff5900', '#ffa500'], width=0.15,ax=ax)
plt.show()


ちなみに、DataFrameの引数を、質問文の時の、
df = pd.DataFrame([100,200],index=['a','b'])とすると、
なぜか、思い通りのグラフとなりません~

棒グラフはPandasでも、Matplotlibでも描けるようなので、ご指摘の通り、混乱しております。マスターに時間がかかったりします~

2020/03/06 16:32:26

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません