🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Matplotlib

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

Python

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

Q&A

解決済

2回答

1678閲覧

3変数を2Dへのプロット

youkan619

総合スコア9

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Matplotlib

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

Python

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

0グッド

0クリップ

投稿2019/09/26 02:44

編集2019/09/26 02:51

前提・実現したいこと

3つの変数(x,y,z)を持つデータを2次元のグラフで表そうと試みております

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

知識が疎いせいか,グラフについて調べましたが,
2次元のグラフでは2変数,3変数のものは3Dのものしか見つけられませんでした

該当のソースコード

言語:python
使用しているもの:anaconda Jupyter Notebook

試したこと

現在3変数のデータを抽出することはできております

data = []#空のリスト作成
with open('vortex_change_program9.csv') as f:
for line in map(str.strip, f):
data.append(line.split(','))#1行ずつ追加していく

x1=data[2]
x2=x1[1:]
x3=len(x2)

y1=data[3]
y2=y1[1:]

z1=data[6]
z2=z1[1:]
z3=(z2)
print(x2)
print(y2)
print(z3)
↓出力結果
['3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14']
['37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49']
['-0.0504979267716408', '-0.0190037358552217', '0.00128990481607616', '-0.0153453582897782', '-0.0076450458727777', '-0.0451858378946781', '-0.0266639478504658', '-0.0406735427677631', '-0.0153768770396709', '-0.00610945280641317', '-0.00500635616481304', '-0.00752125680446625']

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

データはこのようになっています
1行目は列番号を表しており,1列目は行番号を表しております.
x方向に列番号,y方向に行番号,z方向にそれぞれの値を与えたいと思っています
イメージ説明

グラフのイメージとしては以下のようにしたいと考えております
イメージ説明

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

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

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

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

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

guest

回答2

0

ベストアンサー

とりあえず、現状のデータ形式のままではグラフを書くことができませんのでデータを

data = [[-0.0505, -0.019, 0.00129, ・・・], [-0.05172, -0.03713, -0.03176, ・・・], ・・・ [-0.05305, -0.03148, -0.02636, ・・・, -0.01619]]

の形式に変換する必要があります。

現状のデータには不要な箇所が含まれていそうですので、不要な箇所を削除し、更にデータを文字列から**数値(float)**データに変換する必要がありそうです。

質問に記述されているコードから推測するとデータ('vortex_change_program9.csv')の構成は

  • 3行目の2列目以降に Xのラベル値が格納されている
  • 4行目の2列目以降に Yのラベル値が格納されている
  • 7行目の2列目以降に 実際のデータが格納されている

と読み取れるのですが間違いないでしょうかね。

とすると、変換部のサンプルコード(実際のデータがないのであくまでも推測によるコード)は

data = []#空のリスト作成 with open('vortex_change_program9.csv') as f: for line in map(str.strip, f): data.append(line.split(',')) # 3行目Xのラベル値が格納かな? x1=data[2] x_label=x1[1:] # 4行目にYのラベル値が格納かな? y1=data[3] y_label=y1[1:] # データの行数をラベル値から得る y_length = len(y_label) # 7行目以降、上の行数分ループするし、変換したデータを d に入れる d = [] for row in data[6:6+y_length]: # 2つ目からのデータを float に変換して、リスト d に入れる d.append(list(map(float, row[1:])))

のようになるかと思います。

あとは pcolor()imshow()に上記で作成したデータ(d)を入れてあげると描画できるかと思います。

Python

1ax = plt.subplot() 2ax.pcolor(d, cmap=plt.cm.Blues) 3 4ax.set_xticks(np.arange(len(x_label)) + 0.5) 5ax.set_xticklabels(x_label, minor=False) 6ax.set_yticks(np.arange(len(y_label)) + 0.5) 7ax.set_yticklabels(y_label, minor=False) 8 9plt.show()

投稿2019/09/26 06:41

magichan

総合スコア15898

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

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

youkan619

2019/09/27 03:32

無事に作成することが出来ました. 自分では気づけなかった点もご指摘頂き本当に助かりました. ありがとうございます.
guest

0

ヒートマップのことですかね。
Creating annotated heatmaps が参考になると思います。

質問にあるデータをもとにサイトのサンプルを少し変えてみました。
質問にあるデータのままだと数値ではなく文字列になってしまっているので気をつけてください。

python

1import numpy as np 2import matplotlib 3import matplotlib.pyplot as plt 4# sphinx_gallery_thumbnail_number = 2 5 6# 縦軸 7vegetables = ['37'] 8 9# 横軸 10farmers = ['3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14'] 11 12harvest = np.array([[-0.0504979267716408, -0.0190037358552217, 0.00128990481607616, -0.0153453582897782, -0.0076450458727777, -0.0451858378946781, -0.0266639478504658, -0.0406735427677631, -0.0153768770396709, -0.00610945280641317, -0.00500635616481304, -0.00752125680446625]]) 13 14fig, ax = plt.subplots() 15im = ax.imshow(harvest) 16 17# We want to show all ticks... 18ax.set_xticks(np.arange(len(farmers))) 19ax.set_yticks(np.arange(len(vegetables))) 20# ... and label them with the respective list entries 21ax.set_xticklabels(farmers) 22ax.set_yticklabels(vegetables) 23 24# Rotate the tick labels and set their alignment. 25plt.setp(ax.get_xticklabels(), rotation=45, ha="right", rotation_mode="anchor") 26 27ax.set_title("Harvest of local farmers (in tons/year)") 28fig.tight_layout() 29plt.show()

イメージ説明

投稿2019/09/26 06:10

mistn

総合スコア1191

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

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

youkan619

2019/09/27 03:38

無事にグラフを作ることが出来ました. ありがとうございます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問