社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

代码共享 | 详谈Python散点密度图

happy科研 • 3 年前 • 457 次点击  

1 Python散点密度图

import matplotlib.pyplot as plt from scipy.stats import gaussian_kdefrom mpl_toolkits.axes_grid1 import make_axes_locatableimport numpy as npx = np.random.normal(size=10000)y = np.random.normal(size=10000)xy = np.vstack([x,y])z = gaussian_kde(xy)(xy)idx = z.argsort()x, y, z = x[idx], y[idx], z[idx]fig, ax = plt.subplots(figsize=(7,5),dpi=100)maxNum = max(x)minNum = min(x)ax.plot(x, x, color='r', linewidth=2)#添加45°直线plt.xlim(minNum, maxNum)plt.ylim(minNum, maxNum)#最小二乘法线性拟合## xy 的均值xcord=xycord=y(xcord*ycord).mean()## x 的均值乘以 y 的均值xcord.mean()* ycord.mean()## x 的平方均值pow(xcord,2).mean()## x 的均值的平方pow(xcord.mean(),2)# m 分子是 xy 的均值减去 x 的均值乘以 y 的均值;# m 分母是 x 平方的均值 减去 x 的均值的平方m = ((xcord*ycord).mean() - xcord.mean()* ycord.mean())/(pow(xcord,2).mean()-pow(xcord.mean(),2))# c 等于 y 的均值 - m 乘以 x 的均值c = ycord.mean() - m*xcord.mean()# 绘图y1=m*x+c  scatter=ax.scatter(x,y,marker='o',c=z,edgecolors='',s=15,label='LST',cmap='Spectral_r')divider=make_axes_locatable(ax)cax = divider.append_axes("right",size="3%",pad=0.1)#cbar = fig.colorbar(scatter, cax=cax, label='frequency')cbar = fig.colorbar(scatter,cax=cax,extend='both',aspect=30,fraction=.03,pad=0.01)#最小二乘法线性拟合  ax.plot(x,y1,color='k', linewidth=2)#出图plt.savefig('F:/Rpython/lp36/plot82.1.png',dpi=800,bbox_inches='tight',pad_inches=0)plt.show()print('Finished.')


2 基于Python的Savitzky-Golay滤波器

# 实现数据可视化中的数据平滑import numpy as npimport matplotlib.pylab as plt'''其它的一些知识点:raise:当程序发生错误,python将自动引发异常,也可以通过raise显示的引发异常一旦执行了raise语句,raise语句后面的语句将不能执行'''def moving_average(interval, windowsize):    window = np.ones(int(windowsize)) / float(windowsize)    re = np.convolve(interval, window, 'same')    return redef LabberRing():    t = np.linspace(-4, 4, 100)   # np.linspace 等差数列,从-4到4生成100个数    print('t=', t) # np.random.randn 标准正态分布的随机数,np.random.rand 随机样本数值    y = np.sin(t) + np.random.randn(len(t)) * 0.1   # 标准正态分布中返回1个,或者多个样本值    print('y=', y)    plt.plot(t, y, 'k')     # plot(横坐标,纵坐标, 颜色)    y_av = moving_average(y, 10)    plt.plot(t, y_av, 'b')    plt.xlabel('Time')    plt.ylabel('Value')    # plt.grid()网格线设置    plt.grid(True)    plt.savefig('F:/Rpython/lp36/plot79.png',dpi=500,bbox_inches='tight'


    
,pad_inches=0)    plt.show()    returnLabberRing()  # 调用函数


3 Python一元线性回归1

# 用于生成问题描述中示例曲线的代码如下:import numpy as npimport pylab as plfrom matplotlib import pyplot as pltSize=100x=np.linspace(1,Size,Size)data = np.random.randint(1, Size, Size)print(data)# 可视化图线plt.plot(x,data)# 使用Savitzky-Golay 滤波器后得到平滑图线from scipy.signal import savgol_filtery = savgol_filter(data,5,3,mode='nearest')# 可视化图线plt.plot(x, y,'b',label='savgol')# http://bbs.06climate.com/forum.php?mod=viewthread&tid=100317&extra=page%3D1# 添加趋势线和趋势方程def plot_trendline(x, y, n, style):        parameter = np.polyfit(x, y, n)  # n=1为一次函数,返回函数参数        f = np.poly1d(parameter)  # 拼接方程        pl.plot(x, f(x), style,lw=1)        plt.text(15,90,'y=%.4fx'%parameter[0]+'+ %.4f'%parameter[1],fontsize=12)plot_trendline(x,data,1,"r--")#出图plt.savefig('F:/Rpython/lp36/plot78.png',dpi=500,bbox_inches='tight',pad_inches=0)plt.show()print('Finished.')


4 Python一元线性回归2

# 用于生成问题描述中示例曲线的代码如下:import numpy as npimport pylab as plfrom matplotlib import pyplot as pltfrom matplotlib import rcParamsconfig = {"font.family":'Times New Roman',"font.size":12,"mathtext.fontset":'stix'}rcParams.update(config)x=np.linspace(-4,4,50)   # np.linspace 等差数列,从-4到4生成100个数data=np.sin(x)+np.random.randn(len(x))*0.1   # 标准正态分布中返回1个,或者多个样本值# Size=100# x=np.linspace(1,Size,Size)# data = np.random.randint(1, Size, Size)print(data)# 可视化图线plt.plot(x,data,c='k',lw=2)# 使用Savitzky-Golay 滤波器后得到平滑图线from scipy.signal import savgol_filtery = savgol_filter(data,5,3,mode='nearest')# 可视化图线plt.plot(x, y,'b',lw=2,label='savgol')# http://bbs.06climate.com/forum.php?mod=viewthread&tid=100317&extra=page%3D1


    
# 添加趋势线和趋势方程def plot_trendline(x,y,n,style):        parameter=np.polyfit(x,y,n)  # n=1为一次函数,返回函数参数        f=np.poly1d(parameter)  # 拼接方程        pl.plot(x,f(x),style,lw=2)        R2=round(np.corrcoef(y,f(x))[0,1]**2,2)        plt.text(0.25,-0.4,'y=%.4fx'%parameter[0]+'+ %.4f'%parameter[1],fontsize=12)        plt.text(0.25,-0.3,r'$R^2=$'+str(R2),fontsize=12)        print(parameter)        print(f)        print('r^2为',round(np.corrcoef(y,f(x))[0,1]**2,2))plot_trendline(x,data,1,"r-")#出图plt.savefig('F:/Rpython/lp36/plot81.png',dpi=800,bbox_inches='tight',pad_inches=0)plt.show()print('Finished.')


5 Python一元线性回归3

# 用于生成问题描述中示例曲线的代码如下:import numpy as npimport pylab as plfrom matplotlib import pyplot as pltfrom matplotlib import rcParamsconfig = {"font.family":'Times New Roman',"font.size":12,"mathtext.fontset":'stix'}rcParams.update(config)Size=100x=np.linspace(1,Size,Size)data = np.random.randint(1, Size, Size)print(data)# 可视化图线plt.plot(x,data,c='k',lw=2)# 使用Savitzky-Golay 滤波器后得到平滑图线from scipy.signal import savgol_filtery = savgol_filter(data,5,3,mode='nearest')# 可视化图线plt.plot(x, y,'b',lw=2,label='savgol')# http://bbs.06climate.com/forum.php?mod=viewthread&tid=100317&extra=page%3D1# 添加趋势线和趋势方程def plot_trendline(x,y,n,style):        parameter=np.polyfit(x,y,n)  # n=1为一次函数,返回函数参数        f=np.poly1d(parameter)  # 拼接方程        pl.plot(x,f(x),style,lw=2)        plt.text(0.25,-0.4,'y=%.4fx'%parameter[0]+'+ %.4f'%parameter[1],fontsize=12)        print(parameter)        print(f)        print('r^2为',round(np.corrcoef(y,f(x))[0,1]**2,2))plot_trendline(x,data,1,"r-")#出图plt.savefig('F:/Rpython/lp36/plot82.png',dpi=800,bbox_inches='tight',pad_inches=0)plt.show()print('Finished.')


6 Python双Y轴绘制

"""该源代码作者,CSDN:EWBA_GIS_RS_ER."""# 1. 相关包的导入import numpy as npimport pandas as pdimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei']  #显示中文plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号from matplotlib.pyplot import MultipleLocator# 2. 创建绘图数据month = np.arange(1,13)precipitation = [10,15,30,40,50,80,100,120,55,45,30,10]temperature = [-15,-10,5,15,20,27,35,30,26,15,5,-10]# 3. 双y轴图绘制fig = plt.figure(figsize=(10,6),dpi=600) # 创建绘图窗口# 3.1 降水ax_pre = fig.add_subplot(111)pre_bar = ax_pre.bar(month,precipitation,color='blue',label='降水')fontdict1 = {'size':11,'color':'k','weight':'normal','family':'SimHei'}ax_pre.set_ylabel('降水(mm)',fontdict=fontdict1,labelpad=0)ax_pre.set_xlabel('月')# 3.2 温度ax_tem = ax_pre.twinx() # 共用x轴tem_line = ax_tem.plot(month,temperature,marker='o',markersize=3,color='r',linewidth=1,label='温度')ax_tem.set_ylabel('温度(℃)',fontdict=fontdict1,labelpad=0)# 添加图例fig.legend(loc=0,bbox_to_anchor=(1,1), bbox_transform=ax_pre.transAxes)# 4. 制图结果保存plt.savefig('F:/Rpython/lp36/plot76.png',dpi=800,bbox_inches='tight',pad_inches=0)plt.show()


7 Python三Y轴绘制

"""该源代码作者,博客园:dajunma21。"""from mpl_toolkits.axisartist.parasite_axes import HostAxes, ParasiteAxesimport matplotlib.pyplot as pltfig = plt.figure(1)host = HostAxes(fig, [0.15, 0.1, 0.65, 0.8])par1 = ParasiteAxes(host, sharex=host)par2 = ParasiteAxes(host, sharex=host)host.parasites.append(par1)host.parasites.append(par2)host.set_ylabel('Denstity')host.set_xlabel('Distance')host.axis['right'].set_visible(False)par1.axis['right'].set_visible(True)par1.set_ylabel('Temperature')par1.axis['right'].major_ticklabels.set_visible(True)par1.axis['right'].label.set_visible(True)par2.set_ylabel('Velocity')offset = (60, 0)


    
new_axisline = par2._grid_helper.new_fixed_axis  # "_grid_helper"与"get_grid_helper()"等价,可以代替#new_axisline = par2.get_grid_helper().new_fixed_axis  # 用"get_grid_helper()"代替,结果一样,区别目前不清楚par2.axis['right2'] = new_axisline(loc='right', axes=par2, offset=offset)fig.add_axes(host)host.set_xlim(0,2)host.set_ylim(0,2)host.set_xlabel('Distance')host.set_ylabel('Density')host.set_ylabel('Temperature')p1, = host.plot([0, 1, 2], [0, 1, 2], label="Density")p2, = par1.plot([0, 1, 2], [0, 3, 2], label="Temperature")p3, = par2.plot([0, 1, 2], [50, 30, 15], label="Velocity")par1.set_ylim(0,4)par2.set_ylim(1,60)host.legend()#轴名称,刻度值的颜色host.axis['left'].label.set_color(p1.get_color())par1.axis['right'].label.set_color(p2.get_color())par2.axis['right2'].label.set_color(p3.get_color())par2.axis['right2'].major_ticklabels.set_color(p3.get_color()) #刻度值颜色par2.axis['right2'].set_axisline_style('-|>',size=1.5) #轴的形状色par2.axis['right2'].line.set_color(p3.get_color()) #轴的颜色plt.savefig('F:/Rpython/lp36/plot82.91.png',dpi=800,bbox_inches='tight',pad_inches=0)plt.show()print('Finished.')print('Done!')


8 Python多Y轴绘制

"""该源代码作者,博客园:dajunma21。"""from mpl_toolkits.axisartist.parasite_axes import HostAxes, ParasiteAxesimport matplotlib.pyplot as pltimport numpy as npfig = plt.figure(1) #定义figure,(1)中的1是什么ax_cof = HostAxes(fig, [0, 0, 0.9, 0.9])  #用[left, bottom, weight, height]的方式定义axes,0 <= l,b,w,h <= 1#parasite addtional axes, share xax_temp = ParasiteAxes(ax_cof, sharex=ax_cof)ax_load = ParasiteAxes(ax_cof, sharex=ax_cof)ax_cp = ParasiteAxes(ax_cof, sharex=ax_cof)ax_wear = ParasiteAxes(ax_cof, sharex=ax_cof)#append axesax_cof.parasites.append(ax_temp)ax_cof.parasites.append(ax_load)ax_cof.parasites.append(ax_cp)ax_cof.parasites.append(ax_wear)#invisible right axis of ax_cofax_cof.axis['right'].set_visible(False)ax_cof.axis['top'].set_visible(False)ax_temp.axis['right'].set_visible(True)ax_temp.axis['right'].major_ticklabels.set_visible(True)ax_temp.axis['right'].label.set_visible(True)#set label for axisax_cof.set_ylabel('cof')ax_cof.set_xlabel('Distance (m)')ax_temp.set_ylabel('Temperature')ax_load.set_ylabel('load')ax_cp.set_ylabel('CP')ax_wear.set_ylabel('Wear'


    
)load_axisline = ax_load.get_grid_helper().new_fixed_axiscp_axisline = ax_cp.get_grid_helper().new_fixed_axiswear_axisline = ax_wear.get_grid_helper().new_fixed_axisax_load.axis['right2'] = load_axisline(loc='right', axes=ax_load, offset=(40,0))ax_cp.axis['right3'] = cp_axisline(loc='right', axes=ax_cp, offset=(80,0))ax_wear.axis['right4'] = wear_axisline(loc='right', axes=ax_wear, offset=(120,0))fig.add_axes(ax_cof)''' #set limit of x, yax_cof.set_xlim(0,2)ax_cof.set_ylim(0,3)'''curve_cof, = ax_cof.plot([0, 1, 2], [0, 1, 2], label="CoF", color='black')curve_temp, = ax_temp.plot([0, 1, 2], [0, 3, 2], label="Temp", color='red')curve_load, = ax_load.plot([0, 1, 2], [1, 2, 3], label="Load", color='green')curve_cp, = ax_cp.plot([0, 1, 2], [0, 40, 25], label="CP", color='pink')curve_wear, = ax_wear.plot([0, 1, 2], [25, 18, 9], label="Wear", color='blue')ax_temp.set_ylim(0,4)ax_load.set_ylim(0,4)ax_cp.set_ylim(0,50)ax_wear.set_ylim(0,30)ax_cof.legend()#轴名称,刻度值的颜色#ax_cof.axis['left'].label.set_color(ax_cof.get_color())ax_temp.axis['right'].label.set_color('red')ax_load.axis['right2'].label.set_color('green')ax_cp.axis['right3'].label.set_color('pink')ax_wear.axis['right4'].label.set_color('blue')ax_temp.axis['right'].major_ticks.set_color('red')ax_load.axis['right2'].major_ticks.set_color('green')ax_cp.axis['right3'].major_ticks.set_color('pink')ax_wear.axis['right4'].major_ticks.set_color('blue')ax_temp.axis['right'].major_ticklabels.set_color('red')ax_load.axis['right2'].major_ticklabels.set_color('green')ax_cp.axis['right3'].major_ticklabels.set_color('pink')ax_wear.axis['right4'].major_ticklabels.set_color('blue')ax_temp.axis['right'].line.set_color('red')ax_load.axis['right2'].line.set_color('green')ax_cp.axis['right3'].line.set_color('pink')ax_wear.axis['right4'].line.set_color('blue')#出图plt.savefig('F:/Rpython/lp36/plot82.9.png',dpi=800,bbox_inches='tight',pad_inches=0)plt.show()print('Finished.')print('Done!')



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/118701
 
457 次点击