最近一直忙著做實(shí)驗(yàn)述么,最后需要將實(shí)驗(yàn)結(jié)果用圖表的方式展示出來(lái)剃根。
其中有一個(gè)二維表先舷,我打算用3d柱狀圖來(lái)表示艰管,并且為了與其他實(shí)驗(yàn)圖的畫(huà)風(fēng)一致,需要修改各軸的格式蒋川,刻度等
其中x y軸的格式容易改牲芋,z軸的格式改起來(lái)很麻煩,期待matplotlib下次更新吧捺球。
這里需要用到Axes3D 模塊
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter,FuncFormatter
# This import registers the 3D projection, but is otherwise unused.
from mpl_toolkits.mplot3d import Axes3D
'''
"#9467bd"紫色
"#ff7f0e"橙色
'#1f77b4'藍(lán)色
'#2ca02c'綠色
'#d62728'紅色
'''
def to_zoomX1(temp, position):
? ? return int(50*temp)
def to_zoomX2(temp, position):
? ? return int(-50*temp)
fig = plt.figure(figsize=(5, 5))? # 畫(huà)布寬長(zhǎng)比例
axes3d = Axes3D(fig)
_x = np.arange(1, 5)
_y = np.arange(1, 5)
print(_x, _y)
_xx, _yy = np.meshgrid(_x, _y)
x, y = _xx.ravel(), _yy.ravel() #ravel扁平化
top = [這里是設(shè)置的16個(gè)數(shù)據(jù)缸浦,表示柱子的高度如,1.2氮兵,2.3等]
bottom = np.zeros_like(top)#每個(gè)柱的起始位置
width = depth = 0.34 #x,y方向的寬厚
new_colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#9467bd']
for fail in range(1, 5):
? ? color = new_colors[fail-1]#每一排的顏色一樣
? ? for success in range(1, 5):
? ? ? ? axes3d.bar3d(success-0.1, fail-0.25, 0, width, depth,
? ? ? ? ? ? ? ? ? top[(fail-1)*4 + (success-1)], color=color, shade=True)? #每次畫(huà)一個(gè)柱
xmajorLocator = MultipleLocator(1) #將x主刻度標(biāo)簽設(shè)置為1的倍數(shù)
ymajorLocator = MultipleLocator(1) #將x主刻度標(biāo)簽設(shè)置為1的倍數(shù)
axes3d.xaxis.set_major_locator(xmajorLocator)
axes3d.yaxis.set_major_locator(ymajorLocator)
axes3d.xaxis.set_major_formatter(FuncFormatter(to_zoomX1))#將X,Y,軸的坐標(biāo)軸放大50倍裂逐,原來(lái)是1234,這樣就會(huì)顯示50泣栈,100卜高,150弥姻,200
axes3d.yaxis.set_major_formatter(FuncFormatter(to_zoomX2))
plt.tick_params(labelsize=12)
labels = axes3d.get_xticklabels() + axes3d.get_yticklabels() + axes3d.get_zticklabels()
[label.set_fontsize(12) for label in labels]
[label.set_fontweight('bold') for label in labels]#主要是這三行代碼,將三個(gè)軸的格式統(tǒng)一設(shè)置為大小為12掺涛,粗體
axes3d.set_xlabel('Postive Rewards',fontsize=12, fontweight="bold", labelpad=4.2)#labelpad用于調(diào)整標(biāo)簽到x軸之間的距離庭敦,越大則標(biāo)簽離軸越遠(yuǎn)
axes3d.set_ylabel('Negative Rewards',fontsize=12, fontweight="bold", labelpad=4.2)
axes3d.set_zlabel('Average Turns',fontsize=12, fontweight="bold")
plt.savefig("3d.pdf")
plt.show()
如果要畫(huà)其他的3d圖形,推薦官網(wǎng)api