matplotlib實現三維柱狀圖


matplotlib實現三維柱狀圖

 1 import cv2
 2 
 3 img = cv2.imread("1.png", 0)
 4 
 5 #特征點在圖片中的坐標位置
 6 m = 448
 7 n = 392
 8 
 9 import numpy as np
10 import matplotlib.pyplot as plt
11 
12 # This import registers the 3D projection, but is otherwise unused.
13 from mpl_toolkits.mplot3d import Axes3D  # noqa: F401 unused import
14 
15 # setup the figure and axes
16 fig = plt.figure(figsize=(10, 5))  # 畫布寬長比例
17 ax1 = fig.add_subplot(121, projection='3d')
18 ax2 = fig.add_subplot(122, projection='3d')
19 ax1.set_title('Shaded')
20 ax2.set_title("colored")
21 
22 # fake data
23 _x = np.arange(444, 453)
24 _y = np.arange(388, 397)
25 _xx, _yy = np.meshgrid(_x, _y)
26 x, y = _xx.ravel(), _yy.ravel()#ravel扁平化
27 # 函數
28 top = []
29 for i in range(-4, 5):
30     for j in range(-4, 5):
31         top.append(img[i+n][j+m])
32 
33 bottom = np.zeros_like(top)#每個柱的起始位置
34 width = depth = 1#x,y方向的寬厚
35 
36 ax1.bar3d(x, y, bottom, width, depth, top, shade=True)  #x,y為數組
37 
38 ax1.set_xlabel('X')
39 ax1.set_ylabel('Y')
40 ax1.set_zlabel('pixel value')
41 
42 for i in range(-4, 5):
43     for j in range(-4, 5):
44         z = img[i+n][j+m] #該柱的高
45         color = np.array([255, 255, z])/255.0#顏色 其中每個元素在0~1之間
46         ax2.bar3d(j+m, i+n, 0, width, depth, z, color=color)   #每次畫一個柱
47 
48 ax2.set_xlabel('X')
49 ax2.set_ylabel('Y')
50 ax2.set_zlabel('pixel value')
51 plt.show()

以上程序將特征點周圍四個像素的像素點三維化,ax1用數組的方式畫柱狀圖,同時繪制多個柱。ax2用數值的方式畫柱狀圖,每次畫一個柱。

結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM