亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

matplotlibplot_surface顏色圖不隨z軸縮放

matplotlibplot_surface顏色圖不隨z軸縮放

叮當貓咪 2023-09-19 14:08:58
我嘗試使用 matplotlib 的plot_surface 制作簡單的 3D 繪圖,下面是最小的示例:import numpy as npimport matplotlib.pyplot as pltfrom matplotlib import cmx_test = np.arange(0.001, 0.01, 0.0005)y_test = np.arange(0.1, 100, 0.05)fig = plt.figure()ax = fig.add_subplot(111, projection='3d')Xtest, Ytest = np.meshgrid(x_test, y_test)Ztest = Xtest**-1 + Ytestsurf = ax.plot_surface(Xtest, Ytest, Ztest,                       cmap=cm.plasma, alpha=1,                       antialiased=False)fig.colorbar(surf, shrink=0.5, aspect=5)ax.set_ylabel(r'$ Y $', fontsize=16)ax.set_xlabel(r'$ X $', fontsize=16)ax.set_zlabel(r'$ Z $', fontsize=16)結果給出了奇怪的顏色圖,它并不代表 z 尺度的大小,正如您可以從這里看到的3D 繪圖結果。我的意思是,如果你沿著 Z 軸不變的直線,你不會看到相同的顏色。我嘗試更改ccountandrcount內部plot_surface函數或更改 Xtest 或 Ytest 數據的間隔,但沒有任何幫助。我嘗試了這里和這里的一些建議。但似乎沒有關聯。你能幫我解決這個問題嗎?這似乎是一個簡單的問題,但我無法解決。謝謝!編輯我添加了示例,但使用了我沒有在這里寫的原始方程(它很復雜),請看一下:Comparison。左圖是在 Matlab 中完成的(由我的顧問完成),右圖是使用 matplotlib 完成的。您可以清楚地看到左側的圖確實很有意義,最亮的顏色始終位于最大 z 軸上。不幸的是,我不懂matlab。我希望我可以使用 python 來做到這一點,希望這次編輯能讓問題更清楚。編輯2 我確信這不是最好的解決方案。這就是為什么我把它放在這里,而不是作為答案。正如 @swatchai 建議使用contour3D. 由于曲面是一組線,因此我可以通過繪制大量輪廓線來生成正確的結果,方法是:surf = ax.contour3D(Xtest, Ytest, Ztest, 500, cmap=cm.plasma,                  alpha=0.5, antialiased=False)正如您可以從這里看到的那樣,顏色圖是正確的alternative1 但情節非常沉重。當你放大時,它看起來不太好,除非你再次增加輪廓的數量。歡迎任何建議:)。
查看完整描述

3 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

我不知道如何實現這一點,但也許可以解釋一下為什么會發生這種情況。 plot_surface生成一個網格,其中頂點由xy和定義z。每個面片都有 4 個角,并獲得與其 z 值相對應的顏色。查看該圖,它可能是 4 個角的最大 z 值(只是猜測)。如果您仔細觀察,當您向 +y 方向移動時,色塊的顏色實際上會變淺。但更明顯的是x方向上的顏色變化,產生了你提到的斜坡。

但如果每個補丁只有單一顏色,這就無法避免。

如果將公式更改為,您可能會更清楚地看到這一點Z = (X**-1 + 10 * Y)

https://img1.sycdn.imooc.com//65093b3000011e8206510542.jpg

查看完整回答
反對 回復 2023-09-19
?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

曲面圖的行為不是您所期望的。只有contour3D 或contourf3D 可以顯示此類行為。這是相關代碼,您可以嘗試獲取以下情節:

surf = ax.plot_surface(Xtest, Ytest, Ztest, cmap=cm.plasma, alpha=0.55)
ax.contourf3D(Xtest, Ytest, Ztest, cmap=cm.plasma)

顯示曲面和輪廓的圖:

https://img1.sycdn.imooc.com//65093b3e00017d5705190353.jpg

查看完整回答
反對 回復 2023-09-19
?
弒天下

TA貢獻1818條經驗 獲得超8個贊

我想,繪制這種曲面的正式答案是使用Axes3D.contourAxes3D.contourf。例如:

surf2?=?ax.contourf(Xtest,?Ytest,?Ztest,?250,?cmap=cm.plasma,
????????????????????alpha=0.6,?antialiased=False)
surf?=?ax.contour(Xtest,?Ytest,?Ztest,?250,?cmap=cm.plasma,
??????????????????alpha=0.6,?antialiased=False)

顏色圖顯示正確的 z 比例。它不像光滑表面那么完美,因為這取決于我們縮放多少或放置輪廓多少。我不知道是否有辦法通過plot_surface創建它。


查看完整回答
反對 回復 2023-09-19
  • 3 回答
  • 0 關注
  • 207 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號