Py学习  »  Python

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

happy科研 • 2 年前 • 327 次点击  

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
 
327 次点击