Python数据可视化(3):图表辅助元素的定制

目录

3.1 图表常用的辅助元素

3.2 设置坐标轴的标签、刻度范围和刻度标签

​编辑 3.2.1 设置坐标轴标签

(1)对于普通对象

(2)对于Axes对象

3.2.2 设置刻度范围和刻度标签

(1)对于普通对象的刻度设置

(2)对于Axes对象的刻度设置 (实例1:2019年中国电影票房排行榜)

3.3 添加标题和图例

3.3.1 添加标题

3.3.2 添加图例

(1)实例:一般和ax相同

(1)_1 有handles参数

(1)_2 没有handles参数(实例2:支付宝月长的那报告(添加标签、图例))

3.4 显示网格

3.4.1 显示指定样式的网格

3.5 添加参考线和参考区域

3.5.1 参考线

(1)水平参考线

(2)垂直参考线

(3)实例:一般和ax的参考线设置方式相同

3.5.2 参考区域

(1)水平参考区域

(2)垂直参考区域

(3) 实例:一般和ax设置方式相同

3_1

3_2

3.6 添加注释文本

3.6.1 添加指向型注释文本

3.6.2 添加无指向型注释文本

3.6.3 实例5:2013-2019年某电商平台的GMV

3.7 添加表格

3.7.1 table()函数

​编辑

3.1 图表常用的辅助元素

3.2 设置坐标轴的标签、刻度范围和刻度标签

 3.2.1 设置坐标轴标签

xlabel(xlabel,fontdict=None,labelpad=None,**kwargs)

xlabel:表示x轴标签的文本
fontdict:表示控制标签文本样式的字典
labelpad:表示标签与坐标轴边框(包括刻度与刻度标签)的距离

设置y同理

(1)对于普通对象

import numpy as np 
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
x = np.linspace(-np.pi,np.pi,256,endpoint = True)
y1,y2 = np.sin(x),np.cos(x)
plt.plot(x,y1,x,y2)
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.show()

(2)对于Axes对象

参加3.2.2 的(2),使用ax.set_xlabel

3.2.2 设置刻度范围和刻度标签

1、设置刻度范围

xlim(left=None,right=None,emit=True,auto=False,*,xmin=None,xmax=None)

该函数常用参数含义如下:

left:表示x轴刻度取值区间的左位数
right:表示x轴刻度取值区间的右位数
emit:表示是否通知限制变化的观察值,默认为True
auto:表示是否允许自动缩放x轴,默认为True
xmin:表示x轴刻度的最小值
xmax:表示x轴刻度的最大值
同理也可以换位ylim()

2、设置刻度标签

xticks(ticks=None,labels=None,**kwargs)

ticks:表示刻度显示的位置列表
labels:表示指定位置刻度的标签列表

(1)对于普通对象的刻度设置

import numpy as np 
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
x = np.linspace(-np.pi,np.pi,256,endpoint = True)
y1,y2 = np.sin(x),np.cos(x)
plt.plot(x,y1,x,y2)
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.xlim(x.min()*1.5,x.max()*1.5)  #即-1.5pi到1.5pi
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r'-$\pi$',r'-$\pi/2$',0,r'$\pi/2$',r'-$\pi$'])
plt.show()

(2)对于Axes对象的刻度设置 (实例1:2019年中国电影票房排行榜)

要点: Axes对象的刻度设置!!

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
labels=["哪吒之魔童降世","流浪地球",
        "复仇者联盟4:终局之战","疯狂外星人",
        "飞驰人生","烈火英雄","蜘蛛侠:英雄远征",
        "速度与激情:特别行动","扫毒2:天地对决","大黄蜂",
        "惊奇队长","比悲伤更悲伤的故事","哥斯拉2:怪兽之王",
        "阿丽塔:战斗天使","银河补习班"]
bar_width=[48.57,46.18,42.05,21.83,16.70,14.01,13.81,
           12.98,11.89,10.25,9.46,9.27,8.88,8.64,8.20]
y_data=range(len(labels))
fig=plt.figure()
ax=fig.add_subplot(111)
ax.barh(y_data,bar_width,height=0.2,color='pink')
ax.set_xlabel("总票房(亿元)")
ax.set_ylabel("电影名称")  #Axes对象!!用set_ylabel!!!!!!!
ax.set_yticks(y_data)
ax.set_yticklabels(labels)
plt.title('2020080603042')
plt.show()

3.3 添加标题和图例

3.3.1 添加标题

title(label, fontdict=None, loc='center', pad=None, **kwargs)

该函数常用参数的含义如下:

label:表示标题的文本
fontdict:表示控制标题文本样式的字典
loc:表示标题的对齐样式,包括’left’,‘right’和’center’三种取值,默认取值为’center’,即居中显示标题
pad:表示标题与图表顶部的距离,默认为None

Axes用set_title()函数添加标题

plt.title("正弦余弦曲线") #当出现中文时,一定要有那两个

3.3.2 添加图例

legend(handles,labels,loc,bbox_to_anchor,nncol,title,shadow,fancbox,*arg,**kwarges)

handles:表示由图形标识构成的列表,可以不写(如(1)_2)
labels:表示由图例项构成的列表
loc:用于控制图例在图表中的位置.
bbox_to_anchor:用于控制图例的布局,该参数接受一个包含两个数值的元组,其中第一个数值用于控制图例显示的水平位置,值越大则说明图例显示的位置越偏右;第二个数值用于控制图例的垂直位置,值越大则说明图例显示的位置越偏上
ncol:表示图例的列数,默认值为1
title:表示图例的标题,默认为None
shadow:控制图例后面显示阴影,默认值为None
fancybox:控制是否为图例设置圆角边框,默认值为None

注意:如果在绘制图像的函数中已经带有参数lable时,就不需要在legend中设置!!参见3.5.2_(3)_2

(1)实例:一般和ax相同

(1)_1 有handles参数
import numpy as np 
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
x = np.linspace(-np.pi,np.pi,256,endpoint = True)
y1,y2 = np.sin(x),np.cos(x)
lines = plt.plot(x,y1,x,y2)  ###变化在这里
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.xlim(x.min()*1.5,x.max()*1.5)  #即-1.5pi到1.5pi
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r'-$\pi$',r'-$\pi/2$',0,r'$\pi/2$',r'-$\pi$'])
plt.legend(lines,['正弦','余弦'],shadow=True,fancybox =True)  ###变化在这里!!
plt.show()

(1)_2 没有handles参数(实例2:支付宝月长的那报告(添加标签、图例))
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
kinds=['购物','人情往来','餐饮美食','通信物流','生活日用','交通出行','休闲娱乐','其他']
money_scale=[800/3000,100/3000,1000/3000,300/3000,
200/3000,200/3000,200/3000,200/3000]
dev_position=[0.1,0.1,0.3,0.1,0.1,0.1,0.1,0.1]
lines = plt.pie(money_scale,labels=kinds,autopct='%3.lf%%',
shadow=True,explode=dev_position,startangle=90)#逆时针开始绘制90度
plt.title('2020080603042')
plt.legend(kinds,loc='upper right',bbox_to_anchor=[1.5,1.1])
plt.show()

3.4 显示网格

3.4.1 显示指定样式的网格

grid(b=None,which='major',axis='both',**kwargs)

该函数参数如下:

b:表示是否显示网格,若提供其它关键字参数,则b参数设为True
which:表示显示网格的类型,支持major,minor,both这三种类型,默认为major
axis:表示显示哪个方向的网格,该参数支持both、x和y这三个选项,默认为both
linewidth或lw:表示网格线的宽度
如果坐标轴没有刻度,就无法显示网格.

import numpy as np 
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
x = np.linspace(-np.pi,np.pi,256,endpoint = True)
y1,y2 = np.sin(x),np.cos(x)
lines = plt.plot(x,y1,x,y2) 
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.xlim(x.min()*1.5,x.max()*1.5)  #即-1.5pi到1.5pi
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r'-$\pi$',r'-$\pi/2$',0,r'$\pi/2$',r'-$\pi$'])
plt.legend(['正弦','余弦'],shadow=True,fancybox =True)  
plt.grid(axis = 'y',linewidth=0.3) #变化在这里!!!
plt.show()

沿着y轴的刻度延申的网格

3.5 添加参考线和参考区域

3.5.1 参考线

(1)水平参考线

axhline(y=0,xmin=0,xmax=1,linestyle='-',**kwargs)

y:表示水平参考线的纵坐标
xmin:表示水平参考线的起始位置,默认为0
xmax:表示水平参考线的终止位置,默认为1
linestyle:表示水平参考线的的类型,默认为实线

(2)垂直参考线

和上方一样

(3)实例:一般和ax的参考线设置方式相同

import numpy as np 
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
x = np.linspace(-np.pi,np.pi,256,endpoint = True)
y1,y2 = np.sin(x),np.cos(x)
lines = plt.plot(x,y1,x,y2) 
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.xlim(x.min()*1.5,x.max()*1.5)  #即-1.5pi到1.5pi
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r'-$\pi$',r'-$\pi/2$',0,r'$\pi/2$',r'-$\pi$'])
plt.legend(['正弦','余弦'],shadow=True,fancybox =True)  
plt.grid(axis = 'y',linewidth=0.3)
plt.axvline(x=0,ls = "--")
plt.axhline(y=0,ls = "--")
plt.show()

3.5.2 参考区域

(1)水平参考区域

axhspan(ymin,ymax,xmin=0,xmax=1,**kwargs)

ymin:表示水平跨度的下限,以数据为单位
ymax:表示水平跨度的上限,以数据为单位
xmin:表示垂直跨度的下限,以轴为单位,默认为0
xmax:表示垂直跨度的上限,以轴为单位,默认为1 

(2)垂直参考区域

axvspan(xmin,xmax,ymin=0,ymax=1,**kwargs)

参数含义同上

(3) 实例:一般和ax设置方式相同

3_1
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(-np.pi,np.pi,256,endpoint=True)
y1, y2 = np.sin(x),np.cos(x)
lines = plt.plot(x,y1,x,y2)
plt.axvline(x=0,linestyle='--')
plt.axhline(y=0,linestyle='--')
plt.legend(lines, ['正弦','余弦'],shadow=True,fancybox=True)
plt.plot(x,y1,x,y2)
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.grid(axis='y',linewidth=1.3)
plt.xlim(x.min() *1.5, x.max() *1.5)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], [r'$-\pi$',r'$-\pi/2$',r'$0$',r'$-\pi/2$',r'$-\pi$',])
plt.axvspan(xmin=0.5,xmax=2.0,alpha=0.3)
plt.axhspan(ymin=0.5,ymax=1.0,alpha=0.3)
plt.title('2020080603042')
plt.show()

3_2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
men_means=(90.5,89.6,88.7,88.6,86.5,84.6)
women_means=(92.8,87.0,90.5,85.4,89.6,90.2)
ind=np.arange(len(men_means))
width=0.2
fig=plt.figure()
ax=fig.add_subplot(111)
ax.bar(ind-width/2,men_means,width,label='男生平均成绩')
ax.bar(ind+0.2,women_means,width,label='女生平均成绩')
ax.set_title('高二各班男生、女生英语平均成绩')
ax.set_ylabel('分数')
ax.set_xticks(ind)
ax.set_xticklabels(['高二1班','高二2班','高三3班','高三4班','高三5班','高三6班'])
ax.axhline(88.5,ls='--',linewidth=1.0,label='全体平均成绩')
ax.legend(loc="lower right")  #label已经设置的情况下,只需要调整位置即可
plt.title('2020080603042')
plt.show()

3.6 添加注释文本

3.6.1 添加指向型注释文本

annotate(x,xy,*args,**kwargs)

s:表示注释文本的内容
xy:表示被注释的点的坐标位置,接收元组(x,y)
xytext:表示注释文本所在的坐标位置,接收元组(x,y)
xycoords:表示xy的坐标系统,默认值为’data’,代表域折线图使用相同的坐标系统
arrowprops:表示指示箭头的属性字典
bbox:表示注释文本的边框属性字典
 

plt.annotate("最小值",xy=(-np.pi / 2, -1.0),
            xytext=(-(np.pi / 2), -0.5),
            arrowprops=dict(arrowstyle="->"))

3.6.2 添加无指向型注释文本

text(x,y,s,fontdict=None, withdash =<deprecated parameter>,**kwargs)

该函数常用参数含义如下:

x,y:表示注释文本的位置
s:表示注释文本的内容
fontdict:表示控制字体的字典
bbox:表示注释文本的边框属性字典
horizontalalignment或ha:表示水平对齐方式,可以取值为center、right或left.
vertcalalignment或va:表示垂直对齐的方式,可以取值为center、top、bottom、baseline或center_baseline.


3.6.3 实例5:2013-2019年某电商平台的GMV

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
x=np.arange(1,8)
y=np.array([10770,16780,24440,30920,37670,48200,57270])
bar_rects=plt.bar(x,y,tick_label=["FY2013","FY2014","FY2015","FY2016","FY2017","FY2018","FY2019"],width=0.5)
def autolabel(rects):
    for rect in rects:
        height=rect.get_height()
        plt.text(rect.get_x()+rect.get_width()/2,height+300,s='{}'.format(height),ha='center',va='bottom')
autolabel(bar_rects)
plt.ylabel('GMV(亿元)')
plt.title('2020080603042')
plt.show()

3.7 添加表格

3.7.1 table()函数

table()

cellText:表示表格单元格中的数据,是一个二维列表
cellColours:表示单元格的背景颜色
cellLoc:表示单元格文本的对齐方式,支持’left’,‘right’,‘center’三种取值,默认为’right’.
colWidths:表示每列的宽度
rowLabels:表示行标题的文本
rowColours:表示行标题所在单元格的背景颜色
rowLoc:表示行标题的对齐方式
colLabels:表示列标题的文本
colColours:表示列标题所在单元格的背景颜色
colLoc:表示列标题的对齐方式
loc:表示表格与绘图区域的对齐方式

plt.table(cellText=[[6,6,6,],[8,8,8]],
         colWidths=[0.1]*3,
         rowLabels=['第一行','第二行'],
         colLabels=['第一行','第二行','第三行'],loc='lower right')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值