LoginSignup
pyth_on_bigi
@pyth_on_bigi

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Python Matplotlib 箱ひげグラフで重ねたい

解決したいこと

Pythonの学習を今年の2月から始めたビギナーです。

データのグラフ化で、カテゴリごとの数値のレンジと、現在の値を可視化したいと思いまして、簡単なデータフレームで試してますが、
うまく重なりません。
どなたか解決策分かる方いらしたら教えていただきたく
お願いします。

patplotlib

例1)

image.png
例2)
image.png

該当するソースコード

import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],
                  columns=['col01','col02','col03'],
                  index=['idx01','idx02','idx03'])
df_now1 = pd.DataFrame([[6,5,4]],columns=['col01',
                  'col02','col03'],index=['now1'])

例1)

fig, ax1 = plt.subplots(figsize=(9,6))
ax1 = df.boxplot(patch_artist=True)
ax1.scatter(df.columns,df_now1[df_now1.index=='now1'],color='salmon',label='Efficiency')

例2)

fig, ax1 = plt.subplots(figsize=(9,6))
ax1 = df.boxplot(patch_artist=True)
ax2 = ax1.twinx()
ax2.scatter(df.columns,df_now1[df_now1.index=='now1'],color='salmon',label='Efficiency')

自分で試したこと

発生している問題・エラー

下の該当コードのところでデータフレーム作成し、
普通にグラフを重ねたら例1のようなグラフになったので、
2軸グラフ(例2)にしてみましたが、なぜか横にズレる現象が出ました。
1軸グラフにしてみたら(例1)やはり、最初と同じで、点が一番左だけになりました。

ネットで調べても箱ひげで、重ねている人がいないので、無理なのかなあと思ったのですが、どうなのでしょうか。

推察では、データフレーム.○○plot(○○)のコード形式は重ねられないのかなあと思いました。

よろしくお願いします

0

2Answer

fig, ax1 = plt.subplots(figsize=(9, 6))
ax1 = df.boxplot(patch_artist=True)

ax1.scatter(
    list(range(1, df.shape[1]+1))  # == [1, 2, 3]
    df_now1[df_now1.index == "now1"],
    color="salmon",
    label="Efficiency",
    zorder=2,
)
  • x軸の値を1始まりにします。
  • 点が箱の後ろに隠れてしまっているので、zorderパラメータを1よりも大きい値にします。
0

Comments

  1. @pyth_on_bigi

    Questioner
    ご回答ありがとうございました。重なりました!感激です!
    zorderコマンドも初めて知りました。プロット順で重なるかと考えてました。
    ホント、ありがとうございました。

    できれば質問させていただきたいのですが、
    同じカラムだとなんでダメなんでしょうか。
    しかも中途半端にズレたりしてるんです。


  2. matplotlibでグラフを描画する際はデータを数値として扱います。
    `df.plot()`は、列名を1はじまりの数値に変換します。
    `Axes.plot()`では0はじまりの数値に変換されるので、ずれます。

Your answer might help someone💌