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

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

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

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

Python 3.x

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

3329閲覧

DataFrameの行の値を、タテ/ヨコ軸に割り当てた棒グラフを描きたい

okahijiki

総合スコア404

Matplotlib

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

Python 3.x

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2020/02/02 13:24

編集2020/02/02 23:05

DataFrameにて、2つの行があり、ひとつ目の行を横軸に、ふたつ目の行を縦軸にした棒グラフを描くには、どのようにしたら良いのでしょうか。具体的には、下記のとおり、「地域」を横軸に、「出荷量」を縦軸にしたいと思っております。

python

1import pandas as pd 2 3# excelからデータを読み込む 4df=pd.read_excel('地域出荷量.xlsx') 5 6# 読み込みの確認 7df

イメージ説明

python

1import matplotlib.pyplot as plt 2plt.rcParams['font.family'] = 'IPAPGothic' 3 4# 棒グラフを描いてみよう~ 5plt.bar(df) 6 7#エラーコード 8TypeError: bar() missing 1 required positional argument: 'height' 9

エラーになったので、ちがうアプローチに。

python

1# 「地域」のデータをリスト化、さらにndarray化する 2area=df['地域'] 3area = area.values.tolist() 4area=np.array(area) 5 6# 「出荷量」のデータをリスト化、さらにndarray化する 7shipment=df['出荷量'] 8shipment=shipment.values.tolist() 9shipment=np.array(shipment) 10 11plt.bar(area,shipment) 12

イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下のような感じでしょうか。

Python

1import pandas as pd 2import matplotlib.pyplot as plt 3import numpy as np 4 5#df=pd.read_excel('地域出荷量.xlsx') の代わり 6# 7df = pd.DataFrame({ '地域':['北海道','東北','北陸','関東・東山','東海','近畿','中国','四国','九州','沖縄'], 8 '出荷量':[50500,64600,13800,0,85600,0,20200,19800,196800,3000]}) 9 10 11# 方法1:pandasで描画 12# 13df.plot.bar(x='地域', rot=0) 14plt.show() 15 16# 方法2:nmatplotlibで描画 17# 18plt.bar(df['地域'], df['出荷量']) 19plt.show() 20 21# 方法3:numpyにデータ変換してmatplotlibで描画 22# 23area=df['地域'] 24area = area.values.tolist() 25area=np.array(area) 26 27# 「出荷量」のデータをリスト化、さらにndarray化する 28shipment=df['出荷量'] 29shipment=shipment.values.tolist() 30shipment=np.array(shipment) 31 32plt.bar(area,shipment) 33plt.show()

イメージ説明

投稿2020/02/02 13:40

編集2020/02/03 01:05
can110

総合スコア38234

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

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

okahijiki

2020/02/02 23:18

データを辞書化して、棒グラフにするアイデア、ありがとうございまーす。説明不足でした。申し訳ありません。excelからのでデータを生かして(数値や文字列を打たず、出来るだけ、手間をかけずに)やりたいと存じます。汗) 「地域」「出荷量」のリスト化ではグラフがうまく描けないのかなと思い、さらに、そのリスト化したデータをndarray化してみました。質問内容は新たに、そのように編集しております。結果は、ご覧の通りに。たしかの「地域」と「出荷量」は対応していますが、「出荷量」の数値が順番に整列しておりません。汗) 当てずっぽうですけれど、seabornとか、つかった方が、よろしいでしょうかね。お手数をおかけしております。
can110

2020/02/03 01:08

df = pd.DataFrameとしているのは、あくまで回答コードをコピペするだけで動作できるようにテストデータとして用意しているだけです。実際にはread_excelのままでよいです。 > 出荷量」の数値が順番に整列しておりません。 ちょっと解せない結果ですね。 修正された質問のコードを見ましたが、コードには問題はないと思います。
okahijiki

2020/02/03 02:15

いろいろの方法、ありがとうございます。 すべて、うまく表示されました。追って、勉強してまいりたいと存じます。 >> 出荷量」の数値が順番に整列しておりません。 >ちょっと解せない結果ですね。 >修正された質問のコードを見ましたが、コードには問題はないと思います。 原因が分かりました ! DataFrameの「関東・東山」と「近畿」の「出荷量」が「・・・」となっています。 元のデータ(Excel)の「・・・」に、任意の数字を入れて、同様の方法でやってみたところ、縦軸の数値の順番は整った、ノーマルな表示となりました。お手数をおかけしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問