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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Matplotlib

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

Python

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

pandas

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

Q&A

解決済

2回答

1005閲覧

python matplotlibで「ラベル」ごとに散布図で表示したい。

west_urad

総合スコア13

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Matplotlib

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

Python

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

pandas

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

0グッド

0クリップ

投稿2022/07/10 02:51

イメージ説明

1.実現したいこと
matplotlibでx軸がvegetable、y軸がsaltの値を「スコアラベル(1~4)」ごとに散布図で表示したい。

2.ソースコード
from google.colab import auth
from google.auth import default
import gspread
import numpy as np

auth.authenticate_user()
creds, _ = default()
gc = gspread.authorize(creds)
worksheet = gc.open_by_key('任意のスプレッドシートキー').sheet1
import pandas as pd

rows = worksheet.get_all_values()
header = rows.pop(0)
df = pd.DataFrame.from_records(rows, columns=header)#indexの''は自由に変更
df = df.where(df != '')

#matplotlibで可視化
import matplotlib.pyplot as plt
import seaborn as sns

sns.set(font='IPAexGothic')
x = np.linspace(min(df["Vegetables[g]"].astype(int)), max(df["Vegetables[g]"].astype(int)))
y = np.linspace(min(df["Salt[g]"].astype(float)), max(df["Salt[g]"].astype(float)))#範囲指定

if(df["Score(1:worst 2:bad 3:good 4:best)"].astype(int) == 4).all():
plt.scatter(df["Vegetables[g]"].astype(int), df["Salt[g]"].astype(float),s=10,color = "red")
elif(df["Score(1:worst 2:bad 3:good 4:best)"].astype(int) == 3).all():
plt.scatter(df["Vegetables[g]"].astype(int), df["Salt[g]"].astype(float),s=10,color = "blue")
elif(df["Score(1:worst 2:bad 3:good 4:best)"].astype(int) == 2).all():
plt.scatter(df["Vegetables[g]"].astype(int), df["Salt[g]"].astype(float),s=10,color = "yellow")
elif(df["Score(1:worst 2:bad 3:good 4:best)"].astype(int) == 1).all():
plt.scatter(df["Vegetables[g]"].astype(int), df["Salt[g]"].astype(float),s=10,color = "green")

plt.title("データの確認・可視化")
plt.xlabel('vegetable')
plt.ylabel('salt')
plt.show()

3.結果
イメージ説明
何も表示されないです。表示できる方法を教えてほしいです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

python

1import pandas as pd 2import io 3import matplotlib.pyplot as plt 4import seaborn as sns 5 6sns.set(font='IPAexGothic') 7 8csv_data = ''' 9Salt[g],Vegetables[g],Score 100.2,29,2 110.1,0,1 122.8,116,2 130.7,189,4 146.4,54,2 152.3,33,1 162,6,4 171.6,299,3 18''' 19df = pd.read_csv(io.StringIO(csv_data)) 20 21colors = {1:'green', 2:'yellow', 3:'blue', 4:'red'} 22df.plot.scatter(x='Vegetables[g]', y='Salt[g]', c=df['Score'].map(colors)) 23 24plt.title("データの確認・可視化") 25plt.xlabel('vegetable') 26plt.ylabel('salt') 27 28legend = [ 29 plt.plot([], [], marker='o', ls='', color=colors[i], label=l)[0] 30 for i, l in enumerate(['worst', 'bad', 'good', 'best'], start=1)] 31plt.legend(handles=legend, title='Score', loc='upper left', bbox_to_anchor=(1,1)) 32 33plt.tight_layout() 34plt.show()

イメージ説明

投稿2022/07/10 03:56

編集2022/07/10 05:04
melian

総合スコア19771

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

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

west_urad

2022/07/10 07:54

plot.scatterのx,yそれぞれに.astype(int)を加えることで表示することができました。
guest

0

以下のようにgroupbyScore毎に描画することができます。

Python

1import pandas as pd 2from io import StringIO 3import matplotlib.pyplot as plt 4 5# テストデータ 6s = """Salt,Veg,Score 70.2,29,2 80.1,0,1 92.8,116,2 101.6,299,3""" 11df = pd.read_csv(StringIO(s)) 12 13colors = {1:'green', 2:'yellow', 3:'blue', 4:'red'} 14for score, dfg in df.groupby('Score'): 15 plt.scatter(dfg['Veg'], dfg['Salt'], s=1000, color=colors[score]) 16 17# もっと余裕を持たせたほうがよいが 18plt.xlim(df['Veg'].min(), df['Veg'].max()) 19plt.ylim(df['Salt'].min(), df['Salt'].max()) 20 21plt.xlabel('vegetable') 22plt.ylabel('salt') 23plt.show()

イメージ説明

投稿2022/07/10 03:34

can110

総合スコア38266

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問