shirousagi123
@shirousagi123 (Y K)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

1つの散布図に複数のデータを載せたい_Python3

解決したいこと

1つのフォルダの複数のサブフォルダから1つずつデータを取り出して,グラフに装飾を加えても1つの散布図に複数のデータを載せられるようにするには,どのように下記②のスクリプトを変更すればよいでしょうか.
使っているのはpython 3.7.8です.

経緯

1:下記①のスクリプトを作成しました.(守秘のため簡略化しています.) すると,別々の1つのデータを載せた散布図がN個出てきました.
2:アドバイス頂き,②のようにplt.show()のインデントのみ削除したところ複数のデータを載せた散布図を1つ出力することに成功しました.しかしながら,グラフに装飾をしようとコードを追加したところ,再度1つのデータを載せたグラフが複数出力されるようになってしまいました.

コード①,②

①.py
for sub_folder in folders:
    all_avg = []
    all_std =[]
    avg = a
    std = b

    all_avg.append(avg)
    all_std.append(std)

    X = []
    Y = []
    for x in all_avg:
        for y in all_std:
            X.append(x)
            Y.append(y)

    plt.scatter(X, Y)
    plt.show()
②.py
for sub_folder in folders:
    all_avg = []
    all_std =[]
    avg = a
    std = b

    all_avg.append(avg)
    all_std.append(std)

    X = []
    Y = []
    for x in all_avg:
    for y in all_std:
        X.append(x)
        Y.append(y)

    # グラフの装飾
    # 画像サイズ
    fig, ax = plt.subplots( figsize=( 10, 5 ) )
    # タイトル,ラベル
    plt.title( "XX" )
    plt.xlabel( "XX" )
    plt.ylabel( "XX" )
    # 主目盛線
    plt.grid( which="major", color="black", linestyle="-" )
    # 補助目盛線
    plt.grid( which="minor", color="grey", linestyle="-" )

    plt.scatter(X, Y)
plt.show()
0

2Answer

こんな感じでどうでしょう.
以下のコードは二つ以上のデータ群を一つの散布図に描画するためのサンプルになります.

import matplotlib.pyplot as plt
from numpy.random import *

#サンプルデータになります.
x1 = rand(100)
y1= rand(100)

x2 = rand(100)
y2= rand(100)

## 散布図の設定になります.
fig = plt.figure(
    figsize = (16,9), #縦横比を変更(横,縦)
    facecolor = 'white' #後ろの色を変更できます.デフォルトは透明
)
ax = fig.add_subplot(1,1,1)
ax.set_ylabel('label_y' ,fontsize=15)
ax.set_xlabel('label_x', fontsize=25)
ax.set_ylim(0,1) #y軸の範囲指定
ax.set_xlim(0,1) #x軸の範囲指定
ax.grid()#グリッド描画

## ここにからforでデータを追加していくと良いと思います
ax.plot(x1,y1,'o') #一つ目のデータ
ax.plot(x2,y2, 'v') #二つ目のデータ

## ここはforの外にすれば良いと思います
plt.show()

0Like

Comments

  1. @shirousagi123

    Questioner

    @iratuko 様
    アドバイスありがとうございます.
    ご教示頂いたスクリプトで自身のデータを当てはめて試してみましたが,変わらず1つのデータを載せた散布図が複数出力されました.
    しかしながら,頂いたスクリプトをそのまま実行したところ,複数のデータを載せた散布図が1つ出力されました.したがって,おそらく原因としては繰り返し処理の中でサブフォルダから1つずつデータを取り出し,繰り返し処理を脱して1つの変数に収めるところへ何かしら一工夫が必要なのだと思います.
    お手数をおかけしてしまいすみません.

おそらくですが,グラフの装飾と書かれている部分をすべてforから外にだしてみてください.以下のコードのように直せば行けると思います.


import matplotlib.pyplot as plt
from numpy.random import *

#サンプルデータになります.
x1 = rand(100)
y1= rand(100)

x2 = rand(100)
y2= rand(100)



## 散布図の設定になります. for分の外に出しましょう.
## 毎回読み出すとグラフが複数出力されます.

fig = plt.figure(
    figsize = (16,9), #縦横比を変更(横,縦)
    facecolor = 'white' #後ろの色を変更できます.デフォルトは透明
)
ax = fig.add_subplot(1,1,1)
ax.set_ylabel('label_y' ,fontsize=15)
ax.set_xlabel('label_x', fontsize=25)
ax.set_ylim(0,1) #y軸の範囲指定
ax.set_xlim(0,1) #x軸の範囲指定
ax.grid()#グリッド描画

## 散布図の設定終了


## ここにからforでデータを追加していくと良いと思います
for i in range(100): ## folder内の sub_folderのデータを取得する.
    X = []
    Y = []
    for x in range(20): ## aveを追加
        #X.append(x) ## こちらが正しいものになると思います
        X.append(rand(1)) 
    for y in range(20):
        #Y.append(y) ## こちらが正しいものになると思います
        Y.append(rand(1))

    ax.scatter(X,Y)

## ここはforの外にすれば良いと思います
plt.show()
0Like

Your answer might help someone💌