educoder行與縮進闖關答案,Educoder Matplotlib和Seaborn 三維圖 第一關繪制三維圖

 2023-11-30 阅读 22 评论 0

摘要:第一關 繪制三維圖? 任務描述相關知識 matplotlib畫三維圖線框圖和曲面圖編程要求測試說明 任務描述 本關任務:使用matplotlib繪制三維圖。 相關知識 educoder行與縮進闖關答案,matplotlib原本只能畫二維圖,隨著版本更新matplotlib實現了一些建立在二維圖上的三

第一關 繪制三維圖?

  • 任務描述
  • 相關知識
    • matplotlib畫三維圖
    • 線框圖和曲面圖
  • 編程要求
  • 測試說明

任務描述

本關任務:使用matplotlib繪制三維圖。

相關知識

educoder行與縮進闖關答案,matplotlib原本只能畫二維圖,隨著版本更新matplotlib實現了一些建立在二維圖上的三維圖。

  • 適用場景:視覺上層次分明色彩鮮艷,具有很強的視覺沖擊力,讓觀看的人駐景時間長,留下深刻的印象。

matplotlib畫三維圖

要畫三維圖需要先導入from mpl_toolkits import mplot3d。導入這個子模塊后,就可以在創建任意一個普通坐標軸的過程中添加projection='3d'參數,從而創建一個三維坐標軸。三維圖的優點是在notebook中可以交互瀏覽。

 
  1. from mpl_toolkits import mplot3d
  2. import matplotlib.pyplot as plt
  3. fig = plt.figure()
  4. ax = plt.axes(projection='3d')
  5. plt.show()

最基本的三維圖是由(x,y,z)三維坐標點構成的線圖與散點圖。與之前普通二維圖類似,可以用ax.plot3Dax.scatter3D函數來創建。不僅創建方式類似,三維圖函數的參數也和二維圖函數的參數基本相同。

下面來畫一個三角螺旋線并在線上隨機分布一些散點:

 
  1. from mpl_toolkits import mplot3d
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4. ax = plt.axes(projection='3d')
  5. # 三維線的數據
  6. zline = np.linspace(0, 15, 1000)
  7. xline = np.sin(zline)
  8. yline = np.cos(zline)
  9. ax.plot3D(xline, yline, zline, 'gray')
  10. # 三維散點的數據
  11. zdata = 15 * np.random.random(100)
  12. xdata = np.sin(zdata) + 0.1 * np.random.randn(100)
  13. ydata = np.cos(zdata) + 0.1 * np.random.randn(100)
  14. ax.scatter3D(xdata, ydata, zdata, c=zdata, cmap='Greens');
  15. plt.show()

educoder官網、與二維ax.contour圖形一樣,ax.contour3D要求所有數據都是二維網格數據的形式,并且由函數計算z軸數值。

下面用三維正弦函數畫三維等高線圖:

 
  1. def f(x, y):
  2. return np.sin(np.sqrt(x ** 2 + y ** 2))
  3. x = np.linspace(-6, 6, 30)
  4. y = np.linspace(-6, 6, 30)
  5. X, Y = np.meshgrid(x, y)
  6. Z = f(X, Y)
  7. fig = plt.figure()
  8. ax = plt.axes(projection='3d')
  9. ax.contour3D(X, Y, Z, 50, cmap='binary')
  10. ax.set_xlabel('x')
  11. ax.set_ylabel('y')
  12. ax.set_zlabel('z');
  13. plt.show()

默認的初始顯示角度有時不是最優的,matplotlib提供了view_init可以調整觀察角度與方位角。下面我們把俯仰角調整為60度(x-y平面的旋轉角度),方位角調整為35度(繞z軸順時針旋轉35度)。

 
  1. ax.view_init(60,35)
  2. plt.show()

其實,也可以在matplotlib的交互式后端界面直接通過點擊、拖拽圖形,實現同樣的交互旋轉效果。

線框圖和曲面圖

matplotlib畫圖?接下來我們將學習線框圖和曲面圖。它們都是將網格數據映射成三維曲面,得到的三維形狀非常容易可視化:

 
  1. def f(x, y):
  2. return np.sin(np.sqrt(x ** 2 + y ** 2))
  3. x = np.linspace(-6, 6, 30)
  4. y = np.linspace(-6, 6, 30)
  5. X, Y = np.meshgrid(x, y)
  6. Z = f(X, Y)
  7. fig = plt.figure()
  8. #繪制線框圖
  9. ax = plt.axes(projection='3d')
  10. ax.plot_wireframe(X, Y, Z, color='black')
  11. plt.show()

曲面圖和線框圖類似,只不過線框圖的每個面都是由多邊形構成的。需要注意的是,畫曲面圖需要二維數據,但可以不是直角坐標系。

 
  1. #繪制曲面圖
  2. ax = plt.axes(projection='3d')
  3. ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
  4. cmap='viridis', edgecolor='none')
  5. plt.show()

下面創建一個局部的極坐標網絡,當我們把它畫成surface3D圖形時,可以獲得一種使用了切片的可視化效果:

 
  1. def f(x, y):
  2. return np.sin(np.sqrt(x ** 2 + y ** 2))
  3. r = np.linspace(0, 6, 20)
  4. theta = np.linspace(-0.9 * np.pi, 0.8 * np.pi, 40)
  5. r, theta = np.meshgrid(r, theta)
  6. X = r * np.sin(theta)
  7. Y = r * np.cos(theta)
  8. Z = f(X, Y)
  9. ax = plt.axes(projection='3d')
  10. ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
  11. cmap='viridis', edgecolor='none')
  12. plt.show()

編程要求

本關的編程任務是補全右側上部代碼編輯區內的相應代碼,根據輸入數據構建曲面,并設置顏色條為viridis,具體格式化要求如下:

  • 文件名為Task1/img/T1.png
  • 具體要求請參見后續測試樣例。

matplotlib的方法,請先仔細閱讀右側上部代碼編輯區內給出的代碼框架,再開始你的編程工作!

測試說明

平臺會對你編寫的代碼進行測試,對比你輸出的數值與實際正確的數值,只有所有數據全部計算正確才能進入下一關。

測試輸入:

無測試輸入

matplotlib中文手冊,預期輸出:

你的答案與正確答案一致


開始你的任務吧,祝你成功!

import matplotlib
matplotlib.use("Agg")
from mpl_toolkits import mplot3d
import matplotlib.pyplot as plt
import numpy as npdef student(x,y,z):# ********* Begin *********#ax = plt.axes(projection='3d')ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap='viridis', edgecolor='none')plt.savefig('Task1/img/T1.png')plt.show()# ********* End *********#

pythonmatplotlib?

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/185862.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息