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

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

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

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

Python

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

Q&A

1回答

973閲覧

python matplotlibについて

sss2384

総合スコア0

Matplotlib

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

Python

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

0グッド

0クリップ

投稿2023/04/27 17:34

編集2023/04/29 06:02

実現したいこと

contourf関数を使用して表示したグラフのX軸を0:00から24:00で十分間隔に表示させたい

  • ▲▲機能を動作するようにする

前提

ここに質問の内容を詳しく書いてください。
コンター図を作成しています。

発生している問題・エラーメッセージ

unhashable type: 'numpy.ndarray'

エラーメッセージ ```Traceback (most recent call last): File "c:\Users\name\Documents\c_program\.conda\my python\RSL22.py", line 42, in <module> contour=ax[0].contourf(X, Y, Z,) File "C:\Users\name\Documents\c_program\.conda\lib\site-packages\matplotlib\__init__.py", line 1423, in inner return func(ax, *map(sanitize_sequence, args), **kwargs) File "C:\Users\name\Documents\c_program\.conda\lib\site-packages\matplotlib\axes\_axes.py", line 6414, in contourf contours = mcontour.QuadContourSet(self, *args, **kwargs) File "C:\Users\name\Documents\c_program\.conda\lib\site-packages\matplotlib\contour.py", line 794, in __init__ kwargs = self._process_args(*args, **kwargs) File "C:\Users\name\Documents\c_program\.conda\lib\site-packages\matplotlib\contour.py", line 1435, in _process_args x, y, z = self._contour_args(args, kwargs) File "C:\Users\name\Documents\c_program\.conda\lib\site-packages\matplotlib\contour.py", line 1473, in _contour_args x, y, z = self._check_xyz(args[:3], kwargs) File "C:\Users\name\Documents\c_program\.conda\lib\site-packages\matplotlib\contour.py", line 1494, in _check_xyz x, y = self.axes._process_unit_info([("x", x), ("y", y)], kwargs) File "C:\Users\name\Documents\c_program\.conda\lib\site-packages\matplotlib\axes\_base.py", line 2585, in _process_unit_info axis.update_units(data) File "C:\Users\name\Documents\c_program\.conda\lib\site-packages\matplotlib\axis.py", line 1608, in update_units default = self.converter.default_units(data, self) File "C:\Users\name\Documents\c_program\.conda\lib\site-packages\matplotlib\category.py", line 116, in default_units axis.set_units(UnitData(data)) File "C:\Users\name\Documents\c_program\.conda\lib\site-packages\matplotlib\category.py", line 192, in __init__ self.update(data) File "C:\Users\name\Documents\c_program\.conda\lib\site-packages\matplotlib\category.py", line 225, in update for val in OrderedDict.fromkeys(data): TypeError: unhashable type: 'numpy.ndarray' ### 該当のソースコード ```python import pandas as pd import matplotlib.pyplot as plt import numpy as np df =pd.read_csv('kad.csv',header=None) df.replace(999, np.nan, inplace=True) # 時間の範囲と間隔を指定 start_time = '0:00' end_time = '24:00' interval = 10 # 分 times = [] current_time = start_time while current_time <= end_time: times.append(current_time) # 時間を10分進める hours, minutes = map(int, current_time.split(':')) minutes += interval if minutes >= 60: hours += 1 minutes -= 60 current_time = f'{hours:02d}:{minutes:02d}' heights=df.iloc[0,5:] Z=df.iloc[1:,5:].T times=np.array(times) X,Y=np.meshgrid(times,heights) fig = plt.figure() ax = fig.add_subplot(111) contour=ax.contourf(X, Y, Z,) fig.colorbar(contour) ax.minorticks_on() ax.set_ylim(0, 5) ax.set_xlabel('Time') ax.set_ylabel('heights') ax.set_title('200') plt.show()

試したこと

時間を表しているtimesをX軸に表示させようと思いX,Y=np.meshgrid(times,heights)
と設定したが上記のエラーメッセージがでてきのでtimesをnp.arrayでnumpy配列に変換させて問題解決を図ったがまた同じエラーメッセージが出た。
timeをtime= pd.date_range(start='2004/4/20 00:05:00', end='2004/4/21', freq='10min')としたときはエラーメッセージが出なくできたが年月日もX軸に表示されてしまう。年月日は表示させずに時間だけにしたい。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

jbpb0

2023/04/27 22:01

pythonのコードの一番最初の行のすぐ上に ```python だけの行を追加してください また、pythonのコードの一番最後の行のすぐ下に ``` だけの行を追加してください または、 https://teratail.storage.googleapis.com/uploads/contributed_images/56957fe805d9d7befa7dba6a98676d2b.gif を見て、そのようにしてみてください 現状、コードがとても読み辛いです 質問にコードを載せる際に上記をやってくれたら、他人がコードを読みやすくなり、コードの実行による現象確認もやりやすくなるので、回答されやすくなります
quickquip

2023/04/27 23:39

https://teratail.com/help/question-tips#questionTips34 > 表示されたエラーメッセージをそのままコピー&ペーストしましょう。自分でタイプしなおしたり、自分で解釈・要約しようとしてはいけません。 > 大事な部分が抜け落ちたり情報が違うものになってしまう可能性があるからです。 Tracebackが表示されているはずですのでそちらをすべて載せてください。 ユーザ名のようなものを別の文字(xxxxx とか)に置き換えるのは大丈夫です。
jbpb0

2023/04/28 01:07

質問に記載のエラーメッセージよりも上に「Traceback」と書かれてたら、そこから下をできるだけ省略せずに質問に記載してください (ここに書くのではなく、質問を編集して追記する) ユーザー名等の個人情報は伏せ字でいいですが、それ以外はできるだけそのまま記載してください (quickquipさんのコメントと同内容です)
sss2384

2023/04/29 05:51

わかりました。「ありがとうございます
guest

回答1

0

エラーの原因はX軸を文字列(time = ['00:00', '00:10', ...])でプロットしようとしていることなので、X軸を数値にしてプロットしてやればいいです。やり方はいろいろあると思いますが、とりあえず2パターンを参考までに。

  • X軸を時刻でプロットして、Formatterで日付を表示しないようにする。

matplotlib.dates.DateFormatterを使います。
https://matplotlib.org/stable/api/dates_api.html#matplotlib.dates.DateFormatter

python

1from matplotlib.dates import DateFormatter 2 3time = pd.date_range(start='2004/4/20 00:00:00', end='2004/4/21', freq='10min') 4 5contour = ax.contourf(time, heights, Z) 6ax.xaxis.set_major_formatter(DateFormatter('%H:%M'))

こちらの問題点としては、あくまでも時刻なので 24:00 にはならず 00:00 になることです。
24時間以上を扱うためには timedelta がいいのですが、DateFormatter が使えないので独自のFormatterを定義してやる必要が出てきます。

  • 適当な数値でプロットして、目盛りの位置とラベルを直接指定する。

python

1time = np.linspace(0, 24, Z.shape[1]) 2 3contour = ax.contourf(time, heights, Z) 4 5pos = list(range(0, 25, 3)) 6label = [f'{x:02d}:00' for x in pos] 7ax.set_xticks(pos, label)

投稿2023/05/02 05:02

bsdfan

総合スコア4571

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問