数据分析——matplotlib(3)图片的基本操作

上一节:数据分析——matplotlib(2)第一个分析图

上一次我们使用matplotlib制作了第一个分析图,接下来我们对这个分析图进行一些基本操作。

主要操作有:

  1. 设置图片大小(想要一个高清无码大图)
  2. 保存到本地
  3. 描述信息(比如x轴和y轴表示什么,这个图表示什么)
  4. 调整x或者y的刻度的间距
  5. 调整字体大小
  6. 线条的样式(比如颜色,透明度等)
  7. 绘制网格
  8. 图例
  9. 标记出特殊的点(比如告诉别人最高点和最低点在哪里)
  10. 给图片添加一个水印(防伪,防止盗用)

1、设置图片大小(想要一个高清无码大图)

import matplotlib.pyplot as plt

# figsize:图片大小(宽,高),整数的元组(以英尺为单位,一英尺为2.54厘米),默认为none
#dpi:分辨率,整数,默认为none
plt.figure(figsize=(12,8),dpi=80)

x = range(2,26,2)
y = [16,13,11.5,17,24,25,26,22,25,22,18,15]

plt.plot(x,y) #传入x、y,通过plot绘制折线图

plt.show() #执行程序时展示图形

效果
在这里插入图片描述

2、保存到本地

import matplotlib.pyplot as plt

# figsize:图片大小(宽,高),整数的元组(以英尺为单位,一英尺为2.54厘米),默认为none
#dpi:分辨率,整数,默认为none
plt.figure(figsize=(12,8),dpi=80)

x = range(2,26,2)
y = [16,13,11.5,17,24,25,26,22,25,22,18,15]

plt.plot(x,y) #传入x、y,通过plot绘制折线图

#在绘制图片后才保存,可以保存为svg这种矢量格式,图片放大后不会锯齿
plt.savefig('./demo1.svg')

plt.show() #执行程序时展示图形

效果
在这里插入图片描述

3、描述信息

import matplotlib.pyplot as plt

# figsize:图片大小(宽,高),整数的元组(以英尺为单位,一英尺为2.54厘米),默认为none
#dpi:分辨率,整数,默认为none
plt.figure(figsize=(12,8),dpi=80)

x = range(2,26,2)
y = [16,13,11.5,17,24,25,26,22,25,22,18,15]

plt.plot(x,y) #传入x、y,通过plot绘制折线图

plt.xlabel('时间') #设置x轴信息
plt.ylabel('温度') #设置y轴信息
plt.title('某一天温度随时间变化情况') #设置标题

#在绘制图片后才保存,可以保存为svg这种矢量格式,图片放大后不会锯齿
#plt.savefig('./demo1.svg')

plt.show() #执行程序时展示图形

在这里插入图片描述
这里可以看到,中文并没有正确显示,因为matplotlib默认不支持中文字符,因此需要先设置中文。
首先,找到matplotlib位置

import matplotlib
print(matplotlib.matplotlib_fname())

在这里插入图片描述
更改路径为/home/pyvip/.virtualenvs/pro_analysis/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf
网上下载SimHei.tff字体,通过Xftp 6(po jie 版下载地址:https://www.7down.com/soft/268955.html)导入tff文件夹中(如图)
在这里插入图片描述
接着,添加如下代码

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

整体代码

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

# figsize:图片大小(宽,高),整数的元组(以英尺为单位,一英尺为2.54厘米),默认为none
#dpi:分辨率,整数,默认为none
plt.figure(figsize=(12,8),dpi=80)

x = range(2,26,2)
y = [16,13,11.5,17,24,25,26,22,25,22,18,15]

plt.plot(x,y) #传入x、y,通过plot绘制折线图

plt.xlabel('时间') #设置x轴信息
plt.ylabel('温度') #设置y轴信息
plt.title('某一天温度随时间变化情况') #设置标题

#在绘制图片后才保存,可以保存为svg这种矢量格式,图片放大后不会锯齿
#plt.savefig('./demo1.svg')

plt.show() #执行程序时展示图形

效果
在这里插入图片描述

4、调整x或者y的刻度的间距

1. 显示刻度

#设置x、y轴上的刻度
_x_ticks = ['{}时'.format(i) for i in x]
_y_ticks = ['{}℃'.format(i) for i in y]

#传入的x和_x_ticks数据会在x轴上一一对应,二者数据长度必须一样,否则不能完全覆盖,rotation表示旋转度数
plt.xticks(x,_x_ticks,rotation=45)
plt.yticks(y,_y_ticks)

整体代码

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

# figsize:图片大小(宽,高),整数的元组(以英尺为单位,一英尺为2.54厘米),默认为none
#dpi:分辨率,整数,默认为none
plt.figure(figsize=(12,8),dpi=80)

x = range(2,26,2)
y = [16,13,11.5,17,24,25,26,22,25,22,18,15]

plt.plot(x,y) #传入x、y,通过plot绘制折线图

plt.xlabel('时间') #设置x轴信息
plt.ylabel('温度') #设置y轴信息
plt.title('某一天温度随时间变化情况') #设置标题

#设置x、y轴上的刻度
_x_ticks = ['{}时'.format(i) for i in x]
_y_ticks = ['{}℃'.format(i) for i in y]

#传入的x和_x_ticks数据会在x轴上一一对应,二者数据长度必须一样,否则不能完全覆盖,rotation表示旋转度数
plt.xticks(x,_x_ticks,rotation=45)
plt.yticks(y,_y_ticks)

#在绘制图片后才保存,可以保存为svg这种矢量格式,图片放大后不会锯齿
#plt.savefig('./demo1.svg')

plt.show() #执行程序时展示图形

效果
在这里插入图片描述

2. 调整距离
简单来讲,修改步长就可以了

plt.xticks(x[::4],_x_ticks[::4],rotation=45) #设置步长为4

效果
在这里插入图片描述
那么,如果像在原来的基础上缩小刻度呢?
其实很简单,重新定义x变量就可以了(重新定义x时,代码需要放在ptl.plot(x,y)后面,因为x和y必须相对应),定义y轴同理

plt.plot(x,y) #传入x、y,通过plot绘制折线图

#重新定义x
x = [i/2 for i in range(4,49,2)]

整体代码

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

# figsize:图片大小(宽,高),整数的元组(以英尺为单位,一英尺为2.54厘米),默认为none
#dpi:分辨率,整数,默认为none
plt.figure(figsize=(12,8),dpi=80)

x = range(2,26,2)
y = [16,13,11.5,17,24,25,26,22,25,22,18,15]

plt.plot(x,y) #传入x、y,通过plot绘制折线图

#重新定义x
x = [i/2 for i in range(4,49,2)]

plt.xlabel('时间') #设置x轴信息
plt.ylabel('温度') #设置y轴信息
plt.title('某一天温度随时间变化情况') #设置标题

#设置x、y轴上的刻度
_x_ticks = ['{}时'.format(i) for i in x]
_y_ticks = ['{}℃'.format(i) for i in y]

#传入的x和_x_ticks数据会在x轴上一一对应,二者数据长度必须一样,否则不能完全覆盖,rotation表示旋转度数
plt.xticks(x,_x_ticks,rotation=45)
plt.yticks(y,_y_ticks)

#在绘制图片后才保存,可以保存为svg这种矢量格式,图片放大后不会锯齿
#plt.savefig('./demo1.svg')

plt.show() #执行程序时展示图形

效果
在这里插入图片描述

5、调整字体大小

添加参数fontsize=xx,如:

plt.xlabel('时间',fontsize=20) #设置x轴信息
plt.ylabel('温度',fontsize=20) #设置y轴信息
plt.title('某一天温度随时间变化情况',fontsize=20) #设置标题
plt.xticks(x,_x_ticks,rotation=45,fontsize=20)
plt.yticks(y,_y_ticks,fontsize=20)

效果
在这里插入图片描述

6、线条的样式

plot参数 含义
color 颜色
linestyle 线条风格
linewidth 线条粗细
alpha 透明度
color颜色样式 linestyle风格字符
r 红色 - 实线
g 绿色 – 虚线
-. 点划线
#00ff00 16进制 : 点虚线
0.8 灰度值字符串 ’ ’ 无线条
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

# figsize:图片大小(宽,高),整数的元组(以英尺为单位,一英尺为2.54厘米),默认为none
#dpi:分辨率,整数,默认为none
plt.figure(figsize=(12,8),dpi=80)

x = range(2,26,2)
y_1 = [16,13,11.5,17,24,25,26,22,25,22,18,15]
y_2 = [11,15,10.5,17,25,25,27,22,25,21,18,17]

plt.plot(x,y_1,linewidth=6,color='0.5',alpha=0.5) #传入x、y,通过plot绘制折线图,linewidth:线条粗细  alpha:透明度,0-1
plt.plot(x,y_2,linewidth=3,linestyle='-.') #传入x、y,通过plot绘制折线图,linestyle表示线条风格

#重新定义x
x = [i/2 for i in range(4,49,2)]

plt.xlabel('时间',fontsize=15) #设置x轴信息
plt.ylabel('温度',fontsize=15) #设置y轴信息
plt.title('某一天温度随时间变化情况',fontsize=15) #设置标题

#设置x、y轴上的刻度
_x_ticks = ['{}时'.format(i) for i in x]
# _y_ticks = ['{}℃'.format(i) for i in y]

#传入的x和_x_ticks数据会在x轴上一一对应,二者数据长度必须一样,否则不能完全覆盖,rotation表示旋转度数
plt.xticks(x,_x_ticks,rotation=45,fontsize=15)
# plt.yticks(y,_y_ticks,fontsize=15)

#在绘制图片后才保存,可以保存为svg这种矢量格式,图片放大后不会锯齿
#plt.savefig('./demo1.svg')

plt.show() #执行程序时展示图形

效果
在这里插入图片描述

7、绘制网格

方法:grid

plt.grid(alpha=0.7,linewidth=0.5,color='black') #绘制网格

效果
在这里插入图片描述

8、图例

每一条线都有自己的意义,因此需要添加对应的图例。

参数 含义
label 标签、图例内容
loc 图例位置

loc参数对应的值
在这里插入图片描述

plt.plot(x,y_1,linewidth=6,color='0.5',alpha=0.5,label='A') #传入x、y,通过plot绘制折线图,linewidth:线条粗细  alpha:透明度,0-1  label:图例内容
plt.plot(x,y_2,linewidth=3,linestyle='-.',label='B') #传入x、y,通过plot绘制折线图,linestyle表示线条风格

plt.legend(loc='best') #loc:图例位置

效果
在这里插入图片描述

9、标记出特殊的点

颜色 参数:color
支持的颜色缩写:

‘b’:蓝色(blue)
‘g’:绿色(green)
‘r’:红色(red)
‘c’:青色(cyan)
‘m’:品红(magenta)
‘y’:黄色(yellow)
‘k’:黑色(black)
‘w’:白色(white)

标记点 参数:marker
支持的类型:

‘.’:点(point marker)
‘,’:像素点(pixel marker)
‘o’:圆形(circle marker)
‘v’:朝下三角形(triangle_down marker)
‘^’:朝上三角形(triangle_up marker)
‘<‘:朝左三角形(triangle_left marker)
‘>’:朝右三角形(triangle_right marker)
‘1’:(tri_down marker)
‘2’:(tri_up marker)
‘3’:(tri_left marker)
‘4’:(tri_right marker)
‘s’:正方形(square marker)
‘p’:五边星(pentagon marker)
‘*’:星型(star marker)
‘h’:1号六角形(hexagon1 marker)
‘H’:2号六角形(hexagon2 marker)
‘+’:+号标记(plus marker)
‘x’:x号标记(x marker)
‘D’:菱形(diamond marker)
‘d’:小型菱形(thin_diamond marker)
‘|’:垂直线形(vline marker)
‘_’:水平线形(hline marker)

示例图:
在这里插入图片描述

#获取y最大值
max_y_1 = max(y_1)
max_y_2 = max(y_2)

#获取y最大值对应的x下标
index_x_1 = y_1.index(max_y_1)
index_x_2 = y_2.index(max_y_2)

#绘制对应的标记
plt.plot(x[index_x_1],max_y_1,color='k',marker='*') # marker:标记
plt.plot(x[index_x_2],max_y_2,color='red',marker='o')

效果

在这里插入图片描述

10、给图片添加一个水印

方法:text

参数 含义
x,y 坐标值
s 内容
fontsize 字体大小
verticalalignment 垂直对齐方式 (参数:‘center’、‘top’、‘bottom’、‘baseline’)
horizontalalignment 方式 (参数:’center’、‘right’、‘left’)
bbox 标题的外框
bbox参数 含义
boxstyle 方框
facecolor(简写fc) 背景颜色
edgecolor(简写ec) 边框线条颜色
#设置水印 bbox:水印外框(boxstyle:外框类型,fc:背景颜色,ec:边框颜色)
plt.text(6, 15, '这是一个水印!!!',color='red',fontsize=50,rotation=30,alpha=0.2,
         bbox=dict(boxstyle='round',fc='pink',ec='red')
         )

#绘制水印
plt.draw()

效果
在这里插入图片描述
下一节:数据分析——matplotlib(4)绘制常用统计图

猜你喜欢

转载自blog.csdn.net/qq_35526165/article/details/102148813