前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python绘制3D色温球

Python绘制3D色温球

作者头像
梁佐佐
发布2021-09-08 16:14:00
1K0
发布2021-09-08 16:14:00
举报
文章被收录于专栏:人芳觅人芳觅

对于二维数组的球坐标色温展示效果,现有教程不尽人意,如何按照数组中数值的大小赋予颜色值,下文通过函数定义方式,一步到位达到绘制目的。

代码语言:javascript
复制
deflxz_plotball(mapdata,alpha=0.6,colormap='plasma'):
#deflxz_plotball(phinum,thetanum,mapdata,alpha=0.6,colormap='plasma'):
 
   %matplotlib widget
   from mpl_toolkits.mplot3d import Axes3D
   import matplotlib.pyplot as plt
   import numpy as np
   #from matplotlib import cm
   mapdata=np.rot90(mapdata);#行列的物理意义换算到显示维度。
   mycolormap = plt.get_cmap(colormap);
   mapminvalue=mapdata.min();mapmaxvalue=mapdata.max();
    #根据三维数组中的最大和最小值来定义每个数值的相对强度,范围0~1.0
 
   relativevalue=np.zeros((mapdata.shape[0],mapdata.shape[1]));
    #色温强度矩阵大小与xyz测试数组大小一致
 
   for i in range(0,relativevalue.shape[0]):
       for j in range(0,relativevalue.shape[1]):
                relativevalue[i][j]=round(mapdata[i][j]/mapmaxvalue,1);#保留1位小数,意味着10个色度,不过肉眼已经难以区分。
 
   colorsvalues = np.empty(mapdata.shape, dtype=object)
 
 
   for i in range(0,relativevalue.shape[0]):
       for j in range(0,relativevalue.shape[1]):
           tempc=mycolormap(relativevalue[i][j]);
   #tempc为tuple变量,存储当前数值的颜色值(R,G,B,Alpha)
   
           colorreal=(tempc[0],tempc[1],tempc[2],alpha);
   #tuple为不可变数据类型,所以替换自定义alpha值时需要重新定义
   
           colorsvalues[i][j]=colorreal;
    #最终每个数值所对应的颜色
   fsize = 15
   tsize = 18
   
   tdir = 'in'
   
   major = 5.0
   minor = 3.0
   
   style = 'default'
   plt.style.use(['science','ieee','no-latex'])
   plt.style.use(style)
   #plt.rcParams['text.usetex'] = True
   plt.rcParams['font.size'] = fsize
   plt.rcParams['legend.fontsize'] = tsize
   plt.rcParams['xtick.direction'] = tdir
   plt.rcParams['ytick.direction'] = tdir
   plt.rcParams['xtick.major.size'] = major
   plt.rcParams['xtick.minor.size'] = minor
   plt.rcParams['ytick.major.size'] = major
   plt.rcParams['ytick.minor.size'] = minor
 
   fig = plt.figure(num=1,figsize=(8,6));
   #ax = fig.add_subplot(111, projection='3d')
   ax = Axes3D(fig);#在窗口上添加3D坐标轴
   
    u= np.linspace(0,2*np.pi, mapdata.shape[0]);
    v= np.linspace(0, np.pi, mapdata.shape[1]);
   
    x= np.outer(np.cos(u), np.sin(v));
    y= np.outer(np.sin(u), np.sin(v));
    z= np.outer(np.ones(np.size(u)), np.cos(v));
    #
   #C = np.cos(x)
   #testc=cm.jet(x);
   #testc[2][2][2]=0.2;
   #c = np.random.random((32,16, 4))
    #
   #aa=ax.plot_surface(x, y, z, facecolors = c,edgecolor=None,cmap =plt.get_cmap('Spectral')) # Look how I gave a variable to the facecolors.
   #figmap=ax.plot_surface(x, y, z,edgecolor=None,cmap = plt.get_cmap(colormap),rstride=1,cstride=1) # Look how I gave a variable to the facecolors.
   figmap=ax.plot_surface(x, y, z, facecolors=colorsvalues,edgecolor=None,cmap = plt.get_cmap(colormap),rstride=1,cstride=1) # Look how I gave a variable to the facecolors.
 
   #ax.plot_surface(x, y, z, facecolors = cm.jet(C), rstride=4, cstride=4)# Look how I gave a variable to the facecolors.
   plt.colorbar(figmap,shrink=0.8);#防止bar太高
   
   plt.show();#plt.axis('equal');#plt.axis('scaled');

补充一点外部数据测试:

1. 创建excel表格,录入16*32元素数组。

2.读入数据:

代码语言:javascript
复制
test_mapdata=pd.read_excel('test0816.xlsx',header=None)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人芳觅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档