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

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

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

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

Python

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

Q&A

解決済

1回答

682閲覧

matplotlibでグラフが表示されません!

programmm

総合スコア4

Matplotlib

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

Python

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

0グッド

0クリップ

投稿2020/12/12 06:47

実現したいこと

複数のデータを同じ領域に散布図として表示したいです。

前提

以下の画像は散布図として表示したいデータです。「mcAllTrend」と名付けています。
データフレーム
散布図の理想形については、

  • x軸ラベルはhour
  • y軸ラベルはrank
  • rankUpp、rankLow、rankAbbそれぞれに関して、hourに対する1時間ごとの数値(ランク)をプロット

というイメージです。

ここで、複数データを1つの領域に散布図として表示する方法をネットで一度調べたところ、以下のように言及されていました。

複数のプロットを重ねる場合は1つ目のplot()で取得できるAxesSubplotを2つ目以降のplot()の引数axに指定する。

ax = df.plot.scatter(x='sepal_length', y='petal_length', alpha=0.5)

df.plot.scatter(x='sepal_length', y='petal_width',
marker='s', c='r', s=50, alpha=0.5, ax=ax)

そのため、まずは1つのカラムに絞って散布図として表示し、そこに別のカラムに関するデータを追加していく方法をとるべきだと考えました。

以下は、まずrankUppカラムに関するhourに対応する散布図の画像とコードです。
mcTrendのrankUppに関する散布図

python

1mcAllTrend.plot.scatter(x = "hour", y="rankUpp", title = "transition in rank", c = "r").set_ylim([30, 0]) 2plt.ylabel("rank")

さらに、ここにrankLowカラムに関する散布図も重ねたのが以下の画像とコードです。
mcTrendのrankUppとrankLowに関する散布図

python

1ax = mcAllTrend.plot.scatter(x="hour", y="rankUpp", title = "transition in rank", c = "r") 2mcAllTrend.plot.scatter(x="hour", y="rankLow", title = "transition in rank", c="b", ax=ax).set_ylim([30, 0]) 3plt.ylabel("rank")

困っているエラー(問題点)

上記の手順でrankAbbに関する散布図も重ねようと考えたのですが、以下の画像のようになりグラフが表示されません。
問題点
コードは以下の通りです。

python

1ax2 = mcAllTrend.plot.scatter(x="hour", y="rankLow", title = "transition in rank", c="b", ax=ax) 2mcAllTrend.plot.scatter(x="hour", y="rankAbb", title="transition in rank", c="g", ax=ax2).set_ylim([30,0])

グラフが表示されない原因を教えていただきたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず、元になるデータは画像ではなく、テキストで提供してください。回答者が試すのに障害となります。

参考にしたページは、おそらく「note.nkme.me」の以下のページですよね。ちゃんとリンクで示しましょう。

pandasのplotメソッドでグラフを作成しデータを可視化 | note.nkmk.me

あなたも引用しているように、

上の共通の設定の項で説明したように、複数のプロットを重ねる場合は1つ目のplot()で取得できるAxesSubplotを2つ目以降のplot()の引数axに指定する。

のですから、素直に読めば、「AxesSubplotを取得するのは最初の1つだけ」で、「2つめ以降に指定するのは、同じAxesSupblotでいい」とわかります。

Python

1import matplotlib.pyplot as plt 2import pandas as pd 3import io 4 5txt = """ 6hour,rankUpp,rankLow,rankAbb 70,23.375000,13.0,18.8333333 81,17.727273,13.0,19.0000000 92,NaN,NaN,NaN 103,27.166667,NaN,NaN 114,19.285714,NaN,21.200000 125,18.062500,13.0,25.250000 136,NaN,NaN,NaN 147,25.000000,NaN,20.000000 158,16.500000,13.0,26.142857 169,NaN,NaN,NaN 1710,12.666667,NaN,19.000000 1811,21.285714,NaN,26.000000 1912,16.000000,NaN,27.000000 2013,18.500000,NaN,38.000000 2114,17.777778,NaN,29.000000 2215,15.714286,NaN,30.666667 2316,17.800000,NaN,23.000000 2417,NaN,NaN,NaN 2518,NaN,NaN,NaN 2619,NaN,NaN,NaN 2720,18.454545,NaN,22.200000 2821,14.866667,NaN,19.625000 2922,15.923077,NaN,21.200000 3023,20.571429,NaN,22.750000 31""" 32 33mcAllTrend = pd.read_csv(io.StringIO(txt)) 34print(mcAllTrend) 35 36ax = mcAllTrend.plot.scatter(x="hour", y="rankUpp", title="transition in rank", c="r") 37mcAllTrend.plot.scatter(x="hour", y="rankLow", title="transition in rank", c="b", ax=ax).set_ylim([30, 0]) 38mcAllTrend.plot.scatter(x="hour", y="rankAbb", title="transition in rank", c="g", ax=ax).set_ylim([30, 0]) 39plt.ylabel("rank") 40 41plt.show()

結果

投稿2020/12/12 07:51

Daregada

総合スコア11990

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

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

programmm

2020/12/12 08:28

ありがとうございます!ご指摘いただいた点は以後気を付けます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問