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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Q&A

1回答

828閲覧

ヒートマップ作成したい

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

0グッド

0クリップ

投稿2022/12/02 04:00

編集2022/12/02 08:23

実現したいこと

Excelデータからヒートマップを作成したい

現時点での結果

イメージ説明

データの中身

1 2 3 4 5 6 7 8 10 11 12 13 0 0.441917 0.571579 0.668751 0.527957 0.370908 0.584363 0.486324 0.370908 0.767294 0.658079 0.321843 0.396239 1 0.492767 0.640370 0.651971 0.527950 0.554962 0.617620 0.504206 0.539643 0.579781 0.666144 0.370908 0.449357 2 0.448931 0.692970 0.650659 0.697246 0.642706 0.635657 0.689731 0.695371 0.721158 0.621455 0.553356 0.450163 3 0.487369 0.605293 0.650659 0.664098 0.682370 0.718008 0.632971 0.654054 0.614775 0.692358 0.597424 0.597116 4 0.412695 0.737857 0.754797 0.687051 0.670295 0.739909 0.623594 0.649123 NaN 0.723128 0.580822 0.571987 .. ... ... ... ... ... ... ... ... ... ... ... ... 146 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.711146 NaN 147 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.731036 NaN 148 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.780622 NaN 149 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.802218 NaN 150 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.826274 NaN

該当のソースコード

python

1import pandas as pd 2import seaborn as sns 3import matplotlib.pyplot as plt 4import numpy as np 5 6path=r"C:\test\Book3.xlsx" 7df=pd.read_excel(path) 8print(df) 9sns.heatmap(df,yticklabels='0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0', square=True) 10plt.show()

質問

x軸を1から13
y軸を0~1までにして0.1ごとに区切りたいです.
また,正方形にしたいです.
現時点でだとこのようにぐちゃぐちゃになってしまっている状態です.
yticklabelsなしだと,y軸には行が表示されます.(1から150までの数字が)
square=Trueにしても四角形にうまくなりません.
元のデータが悪いんでしょうか?
どうすればいいですか?

以前にもこの質問はさせて頂きました.
また,改めてわからないことがあったので,質問させて頂きました.

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

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

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

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

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

pig_vba

2022/12/02 04:13

四角形にはなってます。単にxに対してyの総数が多すぎて全体が縦長になってるだけです。
退会済みユーザー

退会済みユーザー

2022/12/02 04:18

なるほど.これを綺麗に四角形にするには元データをどのようにすればいいですか? 1 0.4444 1 0.4444 1 0.5 1 0.1 .....略します 13 0.4444 みたいにすればいいでしょうか?
退会済みユーザー

退会済みユーザー

2022/12/02 04:19

また,yticklabelが上手く表示されていない状態なので,これも改善したいです
jbpb0

2022/12/02 06:32 編集

> 正方形にしたい 「sns.heatmap」に「square=True」を付けずに、 https://www.delftstack.com/ja/howto/seaborn/size-of-seaborn-heatmap/ で説明されてる三つの方法のどれかで縦横のサイズをそれぞれ指定したら、グラフのサイズは変えられるはずです (三つの方法のどれも、指定する数値の順番は「横, 縦」です) なお、三つ目の方法は、「sns.heatmap」と「plt.show()」の間に追加します
jbpb0

2022/12/02 06:47 編集

> y軸を0~1までにして df = df.set_axis(np.linspace(0, 1, df.shape[0]), axis=0) として、「sns.heatmap」に「yticklabels=...」を付けなければ、縦軸の数値が0.0~1.0になるはずです (数値が重ならないように間引かれて表示されるので、一番下に表示されるのは「1.0」ではないかもしれませんが)
退会済みユーザー

退会済みユーザー

2022/12/02 09:57 編集

import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import numpy as np import plotly.express as px sns.set() path=r"C:\test\Book3.xlsx" df=pd.read_excel(path) df=df.set_axis(np.linspace(0, 1, df.shape[0]),axis=0) print(df) plt.figure(figsize=(13,13)) sns.heatmap(df) plt.show()
退会済みユーザー

退会済みユーザー

2022/12/02 08:22

このようにコードを修正しました.
退会済みユーザー

退会済みユーザー

2022/12/02 08:24

実行結果も修正しなおしました.y軸を0から1までにして0.1ごとに目盛りを付けたい場合はどのようにすればいいでしょうか?
jbpb0

2022/12/05 08:23 編集

> y軸を0から1までにして0.1ごとに目盛りを付けたい sns.heatmap(df) ↓ 変更 heat_map = sns.heatmap(df) heat_map.set_yticks(np.arange(0, df.shape[0], 0.1*df.shape[0]).astype('int')) heat_map.set_yticklabels((np.arange(0, df.shape[0], 0.1*df.shape[0])/df.shape[0]).round(1)) で、一番下の「1.0」以外は表示されると思います
guest

回答1

0

正方形にしたい

「sns.heatmap」に「square=True」を付けずに、
Seaborn ヒートマップのサイズを設定する
で説明されてる三つの方法のどれかで縦横のサイズをそれぞれ指定したら、グラフのサイズは変えられるはずです
(三つの方法のどれも、指定する数値の順番は「横, 縦」です)

なお、三つ目の方法は、「sns.heatmap」と「plt.show()」の間に追加します

 

y軸を0~1までにして0.1ごとに区切りたい

python

1sns.heatmap(df,yticklabels='0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0', square=True)

↓ 変更

python

1heat_map = sns.heatmap(df) 2heat_map.set_yticks(np.arange(0, df.shape[0], 0.1*df.shape[0]).astype('int')) 3heat_map.set_yticklabels((np.arange(0, df.shape[0], 0.1*df.shape[0])/df.shape[0]).round(1))

で、一番下の「1.0」以外は表示されると思います

投稿2022/12/05 08:02

編集2022/12/05 08:26
jbpb0

総合スコア7651

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問