python——numpy,pandas学习(2)

本文分享了作者在学习低潮期如何通过调整笔记、利用Matplotlib进行数据可视化、设置图例和注释,以及使用多种图形对象和布局技巧来提升学习效率和动力的故事。包括图形制作、刻度调整、特殊点标记和图例添加等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近进入了低迷期,感觉有点提不起劲,但是还是要加油学习呀。

这是这两天的笔记,明显量下降了很多。

1.图例:显示两条曲线的图例,并测试loc属性
mp.legend(loc = ' ')   # best0     upper right/left 1/2    lower right/left 

2.特殊点: mp.scatter(xarray,yarray,marker='',s='',edgecolor='',facecolor='',zorder=3)
marker:点型,
s:大小;
edgecolor:边缘色;
facecolor:填充色;
zorder:绘制图层编号(编号越大,图层越靠上)

3.备注:为在某条曲线上的点添加备注,指明函数方程与值(这里api有点多)
mp.annotate(文本内容,xycoords='data',xy=(x,y),textcoords='offset points'偏移位置,xytext=(x,y),fontsize=14文本字母大小,arrowprops=dict()箭头样式)

4.图形对象(图形窗口)
绘制多个窗口:
mp.figure(       
' '  窗口标题栏文本
figsize = (4,3)  窗口大小<元组>
dpi = 120,     像素密度,密度越高越清晰
facecolor = ' '    图表背景色
)
设置当前窗口的参数
mp.title(title,fontsize = 12 )   # 设置图表标题,显示在图表上方
mp.xlabel(x_label_str,fontsize = 12)#  设置水平轴的文本
mp.ylabel(y_label_str,fontsize = 12)# 设置垂直轴的文本
mp.tick_params(labelsize = 8)# 设置刻度参数
mp.grid(linestyle=' ')# 设置图表网格线
mp..tight_layout()  # 设置紧凑布局,将图表相关参数都显示在窗口中

5.子图(一张图显示多张)

5.1矩阵式布局:
mp.figure('Subplot Layout',facecolor='lightgray')  # 构建窗口
# 拆分矩阵
mp.subplot(rows,cols,num)  # 几行几列的第几数字图  给每个图编号num

5.2网格式布局:支持单元格的合并
# 构建窗口
gs = mg.GridSpec(3,3)  # 拆成3行3列
mp.subplot(gs[0, :2])   #合并
mp.text()

5.3自由式布局(不常使用)


6.刻度定位器
ax = mp.gca()      # 获取当前坐标轴
ax.xaxis.set_major_locator(mp.NullLocator())       #设置水平坐标轴的主刻度器
ax.xaxis.set_miinor_locator(mp.MultipleLocator(0.1))       #设置水平坐标轴的次刻度器为多点定位器,间隔0.1

7.刻度网格线
ax.grid(
	which = ' ',   # major/minor  主刻度/次刻度
	axis = ' ',   # x/y/both    绘制x或y轴
	linewidth = 1,  # 线宽
	linestyle = ' ',   # 线型
	color = ' ',   # 颜色
	alpha = 0.5     # 透明度
)
半对数坐标:y轴将以指数方式递增。基于半对数坐标绘制第二个子图
mp.semilogy(y)


8.散点图(!!!)
可以通过每个点的坐标、颜色、大小和形状表示不同的特征值
mp.scatter(
	x,  # x轴坐标数组
	y,  # y轴坐标数组
	marker=' ',  # 点型
	s=10,  # 大小
	color=' ',  # 颜色
	edgecolor=' '  # 边缘颜色
	facecolor =' '  # 填充色
	zorder = ' '  # 图层序号	
)
numpy.random提供了normal函数用于产生符合正态分布的随机数
n = 100
# 172:期望值(最高)       20:标准差(震荡幅度,越大越猛,越小越平缓)      n:数字生成数量
x = np.random.normal(172,20,n)
y = np.random.normal(60,10,n)



1.填充:以某种颜色自动填充两条曲线的闭合区域
mp.fill_between(
	x,  # x轴的水平坐标
	sin_x,  # 下边界曲线上点的垂直坐标
	cos_x,  # 上边界曲线上点的垂直坐标
	sin_x < cos_x,   # 填充条件,为True时填充
	color = ' ' ,   # 填充颜色
	alpha = 0.2    # 透明度 	
)
import matplotlib.pyplot as mp
import numpy as np
import matplotlib.gridspec as mg

# 基本绘图
a = np.array([1,2,3,4,5,6])
b = np.array([12,54,7,45,78,65])
mp.plot(a,b)

# 绘制水平线
mp.hlines([10,20,30],1,6) # 可以多条线
mp.vlines(2,10,40)

mp.show()

# 线性拆分1000个点
x = np.linspace(-np.pi,np.pi,1000)
# print(x,x.shape)
y = np.sin(x)  # 正弦函数
z = np.cos(x)/2  # 余弦函数

# 设置坐标轴的范围
# mp.xlim(0,np.pi)
# mp.ylim(0,1.2)

# 修改x轴的刻度文本
vals = [-np.pi,-np.pi / 2,0,np.pi / 2,np.pi]
texts = [r'$-\pi$',r'$-\frac{\pi}{2}$','0', r'$\frac{\pi}{2}$',r'$\pi$']
mp.xticks(vals,texts)

# 设置坐标轴
ax = mp.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
mp.yticks([-1.0,-0.5,0.5,1.0])

mp.plot(x,y,linestyle='--',linewidth=2,color='blue',alpha=0.8,label=r'$y=sin(x)$')
mp.plot(x,z,linestyle='-.',linewidth=2,color='yellow',alpha=0.5,label=r'$y=\frac{1}{2}cos(x)$')

# 绘制特殊点
pointx = [np.pi/2,np.pi/2]
pointy = [1,0]
mp.scatter(pointx,pointy,marker='o',s=70,color='red',label='sample points',zorder=3)

# 添加备注点
mp.annotate(r'$[frac{\pi}{2},1]$',xycoords='data',xy=(np.pi/2,1),textcoords='offset points',xytext=(50,30),fontsize=14,arrowprops=dict(arrowstyle='->',connectionstyle='arc'))

# 添加图例
mp.legend()  # 上面得有传入label值
# 展示
mp.show()

# 测试mp的窗口
mp.figure('A figure',facecolor='gray')
mp.plot([0,1],[1,2])  # 作用于a
mp.figure('B figure',facecolor='lightgray')
mp.plot([1,2],[2,1])

# 如果标题已经创建就不会新建窗口,而是将就窗口置为当前窗口
mp.figure('A figure',facecolor='gray')  # 再次绘制a窗口
mp.plot([1,2],[2,1])

# 设置窗口的参数
mp.title('A figure',fontsize = 18)
mp.xlabel('time',fontsize=14)
mp.ylabel('price',fontsize=14)
mp.tick_params(labelsize=10 )
mp.grid(linestyle=':')
mp.tight_layout()  # 界面中出现异常情况

mp.show()

# 矩阵式布局
mp.figure('Subplot',facecolor='lightgray')

for i in range(1,10):  # 遍历
    mp.subplot(3,3,i)
    mp.text(0.5,0.5,i,ha='center',va='center',size=36,alpha=0.6)
    mp.xticks([])  # 去掉x轴的数字
    mp.yticks([])
    mp.tight_layout()  # 紧凑布局

mp.show()

import matplotlib.gridspec as mg
# 网格式布局
# 1:[0,:2]   2:[:2,2]    3:[1,1]
# 4:[1:,0]   5:[-1,1:]
mp.figure('Grid',facecolor='lightgray')
gs = mg.GridSpec(3,3)
mp.subplot(gs[0,:2])  # 0行前两列
mp.text(0.5,0.5,'1',size=36,alpha=0.6,
        ha='center',va='center')
mp.xticks([])  # 去掉x轴的数字
mp.yticks([])
mp.tight_layout()

mp.subplot(gs[:2,2])  # 0行前两列
mp.text(0.5,0.5,'2',size=36,alpha=0.6,
        ha='center',va='center')
mp.xticks([])  # 去掉x轴的数字
mp.yticks([])
mp.tight_layout()

mp.subplot(gs[1,1])  # 0行前两列
mp.text(0.5,0.5,'3',size=36,alpha=0.6,
        ha='center',va='center')
mp.xticks([])  # 去掉x轴的数字
mp.yticks([])
mp.tight_layout()

mp.subplot(gs[1:,0])  # 0行前两列
mp.text(0.5,0.5,'4',size=36,alpha=0.6,
        ha='center',va='center')
mp.xticks([])  # 去掉x轴的数字
mp.yticks([])
mp.tight_layout()

mp.subplot(gs[-1,1:])  # 0行前两列
mp.text(0.5,0.5,'5',size=36,alpha=0.6,
        ha='center',va='center')
mp.xticks([])  # 去掉x轴的数字
mp.yticks([])
mp.tight_layout()
mp.show()




locators = ['mp.NullLocator()',
            'mp.MaxNLocator(nbins=4)',
            'mp.FixedLocator([3,6,9])',
            'mp.AutoLocator()']

# 刻度定位器
mp.figure("locators",facecolor='lightgray')
for i,locator in enumerate(locators):
        mp.subplot(len(locators),1,i+1)
        # 整理坐标轴
        mp.xlim(1,10)
        # 获取当前坐标轴
        ax = mp.gca()
        # 隐藏除底轴以外的所有坐标轴
        ax.spines['top'].set_color('none')
        ax.spines['left'].set_color('none')
        ax.spines['right'].set_color('none')
        ax.spines['bottom'].set_position(('data',0.5))
        mp.yticks([])  # 去除轴
        loc = eval(locator)
        ax.xaxis.set_major_locator(loc)
        ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))

mp.show()

# 绘制曲线[1,10,100,1000,100,10,1],设置刻度网格线,测试刻度网格线的参数
mp.figure("Grid",facecolor='lightgray')
ax = mp.gca()
# 修改刻度定位器
ax.xaxis.set_major_locator(mp.MultipleLocator(1))
ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))

ax.yaxis.set_major_locator(mp.MultipleLocator(250))
ax.yaxis.set_minor_locator(mp.MultipleLocator(50))

ax.grid(which='major',axis='both',color='orangered',linewidth=0.75)
ax.grid(which='minor',axis='both',color='orangered',linewidth=0.25)

# 绘制曲线
y = [1,10,100,1000,100,10,1]
# mp.plot(y,'o-',color='dodgerblue')
# 半对数坐标
mp.semilogx(y,'o-',color='dodgerblue')
mp.show()

# 随机生成一组数据
n = 300
height = np.random.normal(175,5,n)
weight = np.random.normal(70,7,n)
mp.figure("Persons",facecolor='lightgray')
mp.title('Persons',fontsize=18)
mp.xlabel('height',fontsize=14)
mp.ylabel('weight',fontsize=14)
mp.grid(linestyle=':')
# 每个样本设置不同颜色
d = (height - 175) ** 2 +(weight - 70) ** 2
mp.scatter(height,weight,
           marker='o',s=70,
           label='persons',c=d,cmap='jet')
mp.legend()
mp.show()
import numpy as np
import matplotlib.pyplot as mp

# 填充
x = np.linspace(0,8 * np.pi,1000)
sinx = np.sin(x)
cosx = np.cos(x/2)/2

mp.figure('Fill',facecolor='lightgray')
mp.title('Fill',fontsize=18)
mp.grid(linestyle=':')
mp.plot(x,sinx,color='dodgerblue',
        label=r'$y=sin(x)$')
mp.plot(x,cosx,color='orangered',
        label=r'$y=\frac{1}{2}cos(\frac{x}{2})$')
mp.fill_between(x,sinx,cosx,sinx>cosx,
                color='dodgerblue',alpha=0.3)
mp.fill_between(x,sinx,cosx,sinx<cosx,
                color='orangered',alpha=0.3)
mp.legend()
mp.show()

工作和学习两头抓,希望在入学前能够先扫盲结束,跟上大部队的脚步,也希望能够让张老师收入门下。加油!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值