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

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

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

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

Python

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

Q&A

0回答

1012閲覧

Python 3Dグラフの値の幅が大きい場合の軸の値の設定

aoiriyu0406

総合スコア54

Matplotlib

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

Python

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

0グッド

0クリップ

投稿2022/06/10 01:30

編集2022/06/10 11:44

xの最小値 -186263.189598281
xの最大値 1819285.84776096
yの最小値 -376.008444356234
yの最大値 8436059.44764122
zの最小値 -254231.049692706
zの最大値 1231131.94751136

3Dのグラフに点で値を44個出したいのですが、
上記のように最小と最大のそれぞれの軸の値の幅が広いです。

見真似で書いてみると

Pyhthon

1import openpyxl as excel 2 3book = excel.load_workbook("riat.xlsx") 4sheet = book["riat1"] 5 6import matplotlib.pyplot as plt 7from mpl_toolkits.mplot3d import Axes3D 8import matplotlib.pyplot as plt 9import numpy as np 10 11 12#axオブジェクト作成 13fig = plt.figure(figsize=(100, 100)) # 図の設定 14ax = fig.add_subplot(111, projection='3d') 15 16#軸ラベル 17ax.set_xlabel("x") 18ax.set_ylabel("y") 19ax.set_zlabel("z") 20 21ax.set_xticks(np.arange(-254232, 8436060, 1000)) 22ax.set_xlim(-186264,181929) 23ax.set_ylim(-377,8436060) 24ax.set_zlim(-254232,1231132) 25#ax.set_aspect('equal') 26#ax.view_init(elev=2000, azim=-1000) 27ax.view_init(elev=None, azim=None) 28 29#データのプロット 30ax.plot(x1, y1, z1, "o", color="blue") 31ax.plot(x2, y2, z2, "o", color="red") 32ax.plot(x3, y3, z3, "o", color="blue") 33ax.plot(x4, y4, z4, "o", color="red") 34ax.plot(x5, y5, z5, "o", color="blue") 35ax.plot(x6, y6, z6, "o", color="red") 36ax.plot(x7, y7, z7, "o", color="blue") 37ax.plot(x8, y8, z8, "o", color="red") 38ax.plot(x9, y9, z9, "o", color="blue") 39ax.plot(x10, y10, z10, "o", color="red") 40ax.plot(x11, y11, z11, "o", color="blue") 41ax.plot(x12, y12, z12, "o", color="red") 42ax.plot(x13, y13, z13, "o", color="blue") 43ax.plot(x14, y14, z14, "o", color="red") 44ax.plot(x15, y15, z15, "o", color="blue") 45ax.plot(x16, y16, z16, "o", color="red") 46ax.plot(x17, y17, z17, "o", color="blue") 47ax.plot(x18, y18, z18, "o", color="red") 48ax.plot(x19, y19, z19, "o", color="blue") 49ax.plot(x20, y20, z20, "o", color="red") 50ax.plot(x21, y21, z21, "o", color="blue") 51ax.plot(x22, y22, z22, "o", color="red") 52ax.plot(x23, y23, z23, "o", color="blue") 53ax.plot(x24, y24, z24, "o", color="red") 54ax.plot(x25, y25, z25, "o", color="blue") 55ax.plot(x26, y26, z26, "o", color="red") 56ax.plot(x27, y27, z27, "o", color="blue") 57ax.plot(x28, y28, z28, "o", color="red") 58ax.plot(x29, y29, z29, "o", color="blue") 59ax.plot(x30, y30, z30, "o", color="red") 60ax.plot(x31, y31, z31, "o", color="blue") 61ax.plot(x32, y32, z32, "o", color="red") 62ax.plot(x33, y33, z33, "o", color="blue") 63ax.plot(x34, y34, z34, "o", color="red") 64ax.plot(x35, y35, z35, "o", color="blue") 65ax.plot(x36, y36, z36, "o", color="red") 66ax.plot(x37, y37, z37, "o", color="blue") 67ax.plot(x38, y38, z38, "o", color="red") 68ax.plot(x39, y39, z39, "o", color="blue") 69ax.plot(x40, y40, z40, "o", color="red") 70ax.plot(x41, y41, z41, "o", color="blue") 71ax.plot(x42, y42, z42, "o", color="red") 72ax.plot(x43, y43, z43, "o", color="blue") 73ax.plot(x44, y44, z44, "o", color="red") 74 75#グラフの表示 76plt.show()

軸の値の範囲が狭くなってしまいます。
イメージ説明

重すぎてうまく表示されていませんがコードの結果です。
データそのものはexcelから持ってきています。

オブジェクトの作成、軸ラベルの作成がよくわからず、進めることができなくなりました。
オブジェクトの作成、軸ラベルの作成をわかりやすく教えていただきたいです。
お願いいたします。

やったこと

  • fig = plt.figure(figsize=(100, 100)) # 図の設定  の100,100を-100,100とかにしてみた
  • ax.set_xlim等の値を変えてみた

等はしてみましたが、うまくいかず…。

ネットで見ても3Dのグラフバージョンを見つけることができませんでした。
2Dとやり方は同じなのでしょうか?

値を小さくしてやり直してみた

Python

1#axオブジェクト作成 2fig = plt.figure(figsize=(10, 10)) # 図の設定 3ax = fig.add_subplot(111, projection='3d') 4 5#軸ラベル 6ax.set_xlabel("x") 7ax.set_ylabel("y") 8ax.set_zlabel("z") 9 10ax.set_xticks(np.arange(-20, 20, 1)) 11ax.set_yticks(np.arange(-20, 20, 1)) 12ax.set_zticks(np.arange(-20, 20, 1)) 13ax.set_xlim(-10, 10) 14ax.set_ylim(-10, 10) 15ax.set_zlim(-10, 10) 16#ax.set_aspect('equal') 17#ax.view_init(elev=2000, azim=-1000) 18ax.view_init(elev=None, azim=None)

すると
イメージ説明

このような結果になりました。
-10から10でしかできないのでしょうか?
10のところを全部20にしてみたりしたものの、上の画像の結果と同じになりました。

修正依頼の内容についての質問です。

1e6は10の6乗の意味です

→→→→→→ 1から8とかの書いてある数字に10の6条した値が正しい値ってことですか?

もしそうだとした場合、上の画像のような20個ずつの表記で大きい値をちゃんと記載することは難しいですか?

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

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

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

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

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

ozwk

2022/06/10 01:44

>というコードでやると軸の値が0から9と-0.2から1.2の範囲になってしまいます。 1e6は10の6乗の意味です
aoiriyu0406

2022/06/10 01:51

1から8とかの書いてある数字に10の6条した値が正しい値ってことですか?
jbpb0

2022/06/10 02:44 編集

x軸の表示を直したいなら、たとえば下記のようにするとか (質問内容を勘違いしてたら、ごめんなさい) ax.set_xticks(np.arange(-254232, 8436060, 1000)) ↓ 変更 ax.set_xticks(np.arange(-254232, 8436060, (181929-(-186264))/20)) 【追記】 「ax.set_xticks(...」の行を削除するだけでも、いい感じになります
ozwk

2022/06/10 02:25

はい。 とりあえず一番最初のコードの ax.set_xticks(np.arange(-254232, 8436060, 1000)) ax.set_xlim(-186264,181929) ax.set_ylim(-377,8436060) ax.set_zlim(-254232,1231132) を消して出た結果を貼ってそこからどうしたいかを追記してください
jbpb0

2022/06/10 02:39

軸の数値に「1e6」を付けたくないなら、下記を追加してみてください ax.ticklabel_format(style='plain')
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問