上一节:数据分析——matplotlib(2)第一个分析图
上一次我们使用matplotlib制作了第一个分析图,接下来我们对这个分析图进行一些基本操作。
主要操作有:
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() #执行程序时展示图形
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() #执行程序时展示图形
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() #执行程序时展示图形
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() #执行程序时展示图形
添加参数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)
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() #执行程序时展示图形
方法:grid
plt.grid(alpha=0.7,linewidth=0.5,color='black') #绘制网格
每一条线都有自己的意义,因此需要添加对应的图例。
参数 | 含义 |
---|---|
label | 标签、图例内容 |
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:图例位置
颜色 参数: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')
效果
方法: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()