JC-4、Matplotlib学习笔记

Matplotlib-Beginner

  1. 程序结尾处的和plt.show()是显示命令,注意不要忘记括号。
  2. plt.legend()中的loc=01234,对所有绘图的图例均适用。
  3. 创建plt.figure()实质是创建了一个窗口,内部有4个边框,实际是没有横纵轴的,(只是一般默认设置为底左侧边框为横纵轴)需要制定两个边框为轴。
  4. plt.plot是绘制折线图的命令,plt.bar是绘制柱状图命令,plt.scatter散点图,直方图histogram。
  5. 图像的属性:color颜色,lw线宽,alpha透明度(结合OpenCV内容,仅有png图才有alpha属性)

pytorch预备知识中的plt

import matplotlib.pyplot as plt
import numpy as np


# 线型图
np.random.seed(42)
y = np.random.randn(30)
plt.plot(y,'r:*')
plt.show()
# 总结:表示生成30个服从正态分布的随机数y,并且将其索引作为x坐标绘图。
# 'r--o'表示用red颜色填充,--线性,o形标记点


# 标签和图例
np.random.seed(42)
y1 = np.random.randn(30)
y2 = np.random.randn(30)

plt.title('Example')# 标题
plt.xlabel('x')# 标签
plt.ylabel('y')
y1, = plt.plot(y1,'r--o')# 定义线型并赋值给变量   变量,   此处一定要用  变量,  
y2, = plt.plot(y2,'b-*')# 赋值是为了做图例
plt.legend([y1,y2],['y1','y2'],loc=0)# 图例,前列表时保存线性定义的变量,后列表是图例文字描述
plt.show()


# 子图subplot
a = np.random.randn(30)
b = np.random.randn(30)
c = np.random.randn(30)
d = np.random.randn(30)

fig = plt.figure()# 实例化
x1 = fig.add_subplot(2,2,1)# 放在2*2阵的第一个位置
x2 = fig.add_subplot(2,2,2)
x3 = fig.add_subplot(2,2,3)
x4 = fig.add_subplot(2,2,4)

a, = x1.plot(a,'r--o')# 注意区别此处是子图x1.plot()而不是全图plt.plot()
x1.legend([a],'a')# 绘制图例,仍然是子图操作范围内
b, = x2.plot(b,'b-*')
x2.legend([b],'b')
c, = x3.plot(c,'g-.+')
x3.legend([c],'c')
d, = x4.plot(d,'m:x')
x4.legend([d],['d'])
plt.show()# 显示的仍是全图,所以用plt.show()


# 散点图scatter
np.random.seed(42)
y1 = np.random.randn(30)
y2 = np.random.randn(30)

plt.title('Example')
plt.xlabel('x')
plt.ylabel('y')
plt.scatter(y1,y2, color='g',marker='o',label='(x,y)')
plt.legend(loc=0)
plt.show()
# 总结:总体思路区别于线型图,线型图绘图命令是plt.plot(),而散点图绘图命令是
# plt.scatter()。线型图只需要输入y轴的值,而x的值对应的是y值的索引,从而确定一个点;但散点图
# 需要输入x,y的值来确定一个点。


# 直方图histogram
np.random.seed(42)
x = np.random.randn(1000)

plt.title('Example')
plt.xlabel('x')
plt.ylabel('y')
plt.hist(x,bins=20,color='g')
plt.show()
# 总结:直方图绘图命令plt.hist(),区别于散点图,直方图仅需输入一个x值,来统
# 计x的个数y,并设置直方图条纹的数量bins=20,颜色color=绿色


# 饼图pie
plt.title('Example')
labels = ['dogs','cats','birds']
sizes = [15,50,35]
plt.pie(sizes,explode=(0,0,0.1),labels=labels,autopct='%1.1f%%',startangle=90)
plt.axis('equal')
plt.show()
# 饼图pie的制作。核心代码plt.pie(sizes,explode=(0,0,0.1),labels=labels,autopct='%1.1f%%',startangle=90),其中sizes=[15,50,35]中的三个数字确定了每部分数据系列在整个圆形中的占比;explode定义每部分数据系列间的间隔,如果设置前两块为0第三块0.1,意为第三块与左右邻居相距0.1,能突出第3部分;autopct其实就是将sizes中的数据以所定义的浮点精度显示;startangle是绘制第1块饼图时该饼图与x轴正方形夹角,默认为0,此处设为90;plt.axis('equal')必不可少,用于是x轴和y轴的刻度保持一致,只有这样得到的饼图才是圆形。

重要提示:

  1. 子图subplot的制作。先定义出子图在全图中的位置x1 = fig.add_subplot(2,2,1),后续的操作都是分别基于子图在操作用x1.命令,而非全图操作plt.命令。
  2. 散点图scatter的制作。线型图绘图命令是plt.plot(),而散点图绘图命令是plt.scatter()。线型图只需要输入y轴的值,而x的值对应的是y值的索引,从而确定一个点;但散点图需要同时输入x,y的值来确定一个点。注意plt.scatter()中的参数:y1,y2的值,color=颜色,marker=点的形状,label=图例。
  3. 直方图histogram的制作。直方图绘图命令plt.hist(),区别于散点图,直方图仅需输入一个x值,来统计x的个数y。注意plt.histogram()中的参数:x的值,直方图条纹数量bins=20,颜色color=绿色。
  4. 饼图pie的制作。核心代码plt.pie(sizes,explode=(0,0,0.1),labels=labels,autopct=’%1.1f%%’,startangle=90),其中sizes=[15,50,35]中的三个数字确定了每部分数据系列在整个圆形中的占比;explode定义每部分数据系列间的间隔,如果设置前两块为0第三块0.1,意为第三块与左右邻居相距0.1,能突出第3部分;autopct其实就是将sizes中的数据以所定义的浮点精度显示;startangle是绘制第1块饼图时该饼图与x轴正方形夹角,默认为0,此处设为90;plt.axis(‘equal’)必不可少,用于是x轴和y轴的刻度保持一致,只有这样得到的饼图才是圆形。

1. figure学习(2020.06.11)

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(42)
x = np.random.randn(30)# 获得30个服从正态分布的数
plt.plot(x,'r-o')
plt.show()# 显示索引和生成的随机数

x = np.linspace(-3,3,50)# -3到3间等间距产生50个数
y1 = 2*x+1
y2 = x**2

plt.figure()
plt.title('Example')
plt.plot(x,y1)
plt.show()

plt.figure(num=3,figsize=(8,5))
# 对窗口的设置,窗口名称为figure 3,尺寸figsize=(长,宽)
plt.title('Example')
plt.plot(x,y1)
plt.plot(x,y2,color='r',linewidth=1.0,linestyle='--')
# 横轴值,纵轴值,颜色,线宽,线样式
plt.show()
# 总结:plt.figure()相当于创建了一个窗口,将plt.figure()后且plt.show()之前
# 绘制的所有线都放在该窗口内

重要提示:

  1. 线条颜色、标记形状、线型在引号中的顺序可更改。
  2. 制作标题plt.title('Example)、标签plt.xlabel(‘x’) plt.ylabel(‘y’)。
  3. plt.figure()相当于创建了一个窗口,将plt.figure()后且plt.show()之前绘制的所有线都放在该窗口内。
  4. 在plt.figure()中可设置窗口的属性,如名字、尺寸等。
  5. 在绘图命令plt.plot等中,可以设置横轴轴代表的数据,线的颜色,宽度,风格等。
  6. linewidth可以简写为lw意为线宽

拓展知识:线条颜色、标记形状、线型常用参数如下:

参数线条颜色
‘b’蓝色blue
‘g’绿色green
‘r’红色red
‘c’蓝绿色
‘m’洋红色
‘y’黄色yellow
‘k’黑色black
‘w’白色white
参数标记参数点形状
‘o’实心圆点
‘*’'*'符号
‘+’'+'符号
‘x’'x’符号
参数两点间线条形状
‘-’实线
‘–’虚线
‘-.’点实线
‘:’点线

点击参考更多线型参数

2. 设置坐标轴(2020.06.11)

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3,3,50)# -3到3间等间距产生50个数
y1 = 2*x+1
y2 = x**2

plt.figure(num=2.1,figsize=(8,5))# 创建窗口

plt.plot(x,y2)# 画线
plt.plot(x,y1,color='g',linewidth=2.0,linestyle=':')

plt.xlim(-1,2)# 设置横轴范围
plt.ylim(-2,3)

plt.xlabel('价格',fontproperties='SimHei')# 设置横轴标签
# 英文直接写,中文需在后面加上fontproperties属性才能正常显示
plt.ylabel('利润',fontproperties='SimHei')

new_ticks = np.linspace(-1,2,5)# 
print (new_ticks)
plt.xticks(new_ticks)# 设置横轴刻度
new_ticks1 = np.linspace(-2,3,5)
plt.yticks(new_ticks1,
[u'非常糟糕','糟糕',r'$good\ \alpha$',r'$really\ good$','超级好'],fontproperties='SimHei')
'''
设置对应坐标用汉字或英文表示,后面的属性fontproperties表示中文可见,不乱码,
内部英文$$表示将英文括起来,r、u可以调整字体(可有可无)
如果要显示特殊字符,比如阿尔法,则用转意符\alpha,前面的\ 表示空格转意
'''

plt.show()






plt.figure(num=.2,figsize=(8,5))

plt.plot(x,y2)
plt.plot(x,y1,color='m',linewidth='2.0',linestyle='-.')

gca = 'get current axis/获取当前轴线'
ax = plt.gca()# 设置边框/坐标轴

ax.spines['right'].set_color('none')# 设置右侧边框颜色为无色,即取消右侧框
ax.spines['top'].set_color('none')

ax.xaxis.set_ticks_position('bottom')# 设置横轴为底部边框
ax.yaxis.set_ticks_position('left')

# 设置(0,-1)为原点
ax.spines['bottom'].set_position(('data',-1))# 将x轴(实质是底部边框)放在y=-1的位置
ax.spines['left'].set_position(('data',0))

plt.yticks([-2,-1.8,-1,1.22,3.],
           [u'非常糟糕','糟糕',r'$good\ \alpha$',r'$really\ good$','超级好'],fontproperties='SimHei')
plt.show()
# 总结:窗口内本来是没有横纵轴的,只有4条边框,只是后来将其中的两条边框设置为轴
# 一般默认底部边框为x轴,左侧边框为y轴

重要提示:

  1. 设置轴的范围plt.xlim(a,b),plt.ylim(c,d)。
  2. 设置轴的标签plt.xlabel(‘x’),plt.ylabel(‘纵轴’,fontproperties=‘SimHei’),注意括号中英文直接写,而中文需补fontproperties=‘SimHei’。cf第三节的图例的中文显示。
  3. 设置轴的刻度plt.xticks=(),括号中为数组列表,存储横轴的刻度。将刻度值修改为指定内容的方法。
  4. 处理边框 / 轴的函数ax = plt.gca(),处理边框ax.spines,处理轴ax.xaxis。
  5. ax.xaxis.set_ticks_position(‘bottom’)将底框设为横轴。
  6. 修改字体的字母。
  7. 窗口中的刻度位置似乎都是已经标好的,与轴的位置无关。都是以窗口的正中心为(0,0)点。

3. legend图例(2020.06.11)

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3,3,50)# -3到3间等间距产生50个数
y1 = 2*x+1
y2 = x**2

plt.figure(num=3,figsize=(8,5))
# 对窗口的设置,窗口名称为figure 3,尺寸figsize=(长,宽)
a, = plt.plot(x,y1)
b, = plt.plot(x,y2,color='r',linewidth=1.0,linestyle='--')

plt.legend(handles=[a,b],labels=['直线','曲线'],loc=4,prop={'family':'SimHei','size':15})
# 注意上两行是a,b,赋值为线型,不要忘了逗号。handles是图,labels是图例名字
# ,loc设置图例在图中的位置,若不指定则默认为0,prop是为了让中文正常显示
plt.show()

重要提示:

  1. 图例plt.legend(handles=[a,b],labels=[‘直线’,‘曲线’],loc=4,prop={‘family’:‘SimHei’,‘size’:15})的方法,创建图例时,都要将线型赋给:变量 加逗号,的形式,然后在把变量放在图例的列表中。
  2. 注意是a,b,赋值为线型,不要忘了逗号。handles是图线,labels是图例名字,loc设置图例在图中的位置,若不指定则默认为0,prop是为了让中文正常显示。cf第二节中轴标签和轴刻度的中文显示。

拓展知识:图例位置常用参数如下:

参数图例在图中位置
loc=0自动寻找最佳位置
loc=1强制右上角
loc=2强制左上角
loc=3强制左下角
loc=4强制右下角

4. Annotation标注(2020.06.11)

import matplotlib.pyplot as plt
import numpy as np 

x = np.linspace(-3,3,20)
y = 2*x+1

plt.figure(num=1,figsize=(8,5))
plt.plot(x,y)
ax = plt.gca()# 处理边框/轴
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

x0 = 1
y0 = 2*x0+1
plt.scatter(x0,y0,s=50,color='b',marker='+')
# 上述命令绘制散点图。s点的大小,color颜色,marker标记形状

plt.plot([x0,x0],[0,y0],'k--',linewidth=2.5)
# 把两个点放入plot,或出连接两点的线,[x0,x0]代表两点的x,[0,y0]代表两点的y
# k--表示黑色虚线,linewidth线宽

# 添加注释 annotate

'''
其中参数xycoords='data' 是说基于数据的值来选位置, xytext=(+30, -30) 和 textcoords='offset points'
对于标注位置的描述 和 xy 偏差值, arrowprops是对图中箭头类型的一些设置.
'''

plt.annotate(r'$2x+1=%s$'%y0,xy=(x0,y0),xycoords='data',xytext=(+30,-30),textcoords='offset points',fontsize=16,arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
# 添加注释 text

# 其中-3.7, 3,是选取text的位置, 空格需要用到转字符\ ,fontdict设置文本字体.
plt.text(-3.7,3,r'$This\ is\ the\ some\ text.\mu\ \sigma_i\ \alpha_t$',
         fontdict={'size':'16','color':'red'})

plt.show()

重要提示:

  1. 用plt.plot()连接两点的方法。
  2. 绘制散点图的命令plt.scatter()。
  3. 添加注释annotate和text

5. tick能见度(2020.06.11)

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 50)
y = 0.1*x

plt.figure()
# 设置 zorder 给 plot 在 z 轴方向排序
plt.plot(x, y, linewidth=10, zorder=1)
plt.ylim(-2, 2)
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))


# 调整坐标

# 对被遮挡的图像调节相关透明度,本例中设置 x轴 和 y轴 的刻度数字进行透明度设置
for label in ax.get_xticklabels()+ax.get_yticklabels():
    label.set_fontsize(12)
    '''
    其中label.set_fontsize(12)重新调节字体大小,bbox设置目的内容的透明度相关参,
    facecolor调节 box 前景色,edgecolor 设置边框, 本处设置边框为无,alpha设置透明度.
    '''
    # 其中label.set_fontsize(12)重新调节字体大小,bbox设置目的内容的透明度相关参,
#     facecolor调节 box 前景色,edgecolor 设置边框, 本处设置边框为无,alpha设置透明度.
    label.set_bbox(dict(facecolor='white',edgecolor='none',alpha=0.7))

plt.show()

重要提示:

  1. 用到了再来看吧,比较复杂。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毋小黑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值