【问题标题】:Painting a surf graph in Python whit several colors用多种颜色在 Python 中绘制冲浪图
【发布时间】:2020-08-15 05:38:03
【问题描述】:

下一张图片

可以使用下一个代码生成

下一个代码

#%%

try:
    from IPython import get_ipython

    get_ipython().magic('clear')                # to clear the terminal
    get_ipython().magic('reset -f')             # to reset the kernel
    # get_ipython().magic('matplotlib qt')      # plots out line
    get_ipython().magic('matplotlib', 'inline') # plots in line
    
except:
    pass

import numpy as np 
from numpy import * 

import sympy as smp
from sympy import *

import matplotlib.pyplot as plt 
from mpl_toolkits import mplot3d

import scipy as scp
from scipy.optimize import *
from scipy.integrate import *

import control as co

# import pandas            as pd 
# import sklearn           as sk
# import math
# import os
# import tarfile
# import urllib

np.set_printoptions(precision=4, suppress=True) # number of decimals in the expre.

init_printing(use_unicode=True)                 # to show in pretty symboic

#%%

x , n = symbols( 'x n' )

T = 2*pi

xt = np.arange( 0 , 2*np.pi , 1e-3)
xt = np.array([ xt ])

armo = 50



#%%


a0 = (1/(T))*( integrate( 1 , (x , 0 , T/2) ) +\
              integrate( -1 , (x , T/2 , T) ) )
a0 = simplify(a0)
    
an = (2/(T))*( integrate( 1*cos((2*pi/T)*n*x) , (x , 0 , T/2) ) +\
              integrate( -1*cos((2*pi/T)*n*x) , (x , T/2 , T) ) )
an = simplify(an)

bn = (2/(T))*( integrate( 1*sin((2*pi/T)*n*x) , (x , 0 , T/2) ) +\
              integrate( -1*sin((2*pi/T)*n*x) , (x , T/2 , T) ) )
bn = simplify(bn)

#%%

S, S1, S2 = 0, 0, 0

M1   = np.zeros( (armo , len( xt[0,:] ) ) )
M2   = np.zeros( (armo , len( xt[0,:] ) ) )
ante = np.zeros( ( 1 , len( xt[0,:] ) ) )
ArC  = np.zeros( ( 1 , armo ) )
ArCn = np.array( [np.arange( 1 , armo+1 ) ] )

for N in range( 1 , armo+1 ):
    
    An = float( an.subs( n , N ).evalf() )
        
    Bn = float( bn.subs( n , N ).evalf() )
    
    S1 = An*cos( (2*pi/T)*N*x )
    
    S2 = Bn*sin( (2*pi/T)*N*x )
    
    Lda = lambdify( x , S1 , 'numpy' )
    Ldb = lambdify( x , S2 , 'numpy' )
    
    M1[[N-1],:] = ( Lda( xt )+Ldb( xt ) )
    
    if (N == 1):
        M2[[N-1],:] = M1[[N-1],:]
        
    if (N > 1):
        M2[[N-1],:] = M2[[N-2],:] + M1[[N-1],:]
    
    ArC[[0],N-1] = np.max( M1[[N-1],:] )
      
Fourier = a0 + sum(M1 , axis=0)


fig = plt.figure()
ax = fig.add_subplot( projection='3d' )
ax.plot_surface(ArCn.T , xt , M2)

它是周期函数在其谐波中的 3D 表示。我希望你帮我弄两件东西。

第一个,擦掉表面的白线。

第二个(更难),用颜色绘制表面。例如,在第一次谐波的地方,涂上绿色,然后,当我们走到图形底部时,绿色变成蓝色。这可能吗?我该怎么做?

【问题讨论】:

    标签: python image matplotlib plot


    【解决方案1】:

    对于第一个,尝试基于this answerantialiased=False 选项。

    对于第二个,您需要使用颜色图绘制曲面。有一个很好的例子here

    【讨论】:

    • 非常感谢(Y)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 2022-01-22
    • 2015-11-07
    相关资源
    最近更新 更多