图表辅助元素的定制(含实例)1

1.设置坐标轴的标签

   (1)设置x,y轴坐标
   x轴语法:xlabel(xlabel,  fontdict=none,  labelpad=none,  **kwargs)

   y轴语法:ylabel(ylabel,  fontdict=none,  labelpad=none,  **kwargs)

   假设有一张正弦余弦曲线图表,为其插入xy轴。

#导入模块
import numpy as np
import matplotlib.pyplot as plt

#设置中文
plt.rcParams['font.family'] = '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)

#设置x,y轴标签
plt.xlabel("x轴")
plt.ylabel("y轴")

#展示图像
plt.show()

  (2) 设置刻度范围
  xlim() 语法: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轴刻度的最大值。
  此外,Axes 对象可以使用 set_xlimO 和 set_ylimO 方法分别设置x轴和y轴的刻度范围。

  (3)设置刻度标签

  tick()语法:xtick(tick=None, labels=None, **kwargs)

#设置x轴的刻度范围和刻度标签
plt.xlim(x.min() * 1.5, x.max * 1.5)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
           [r'$-\r'$', r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$'])

其他数学公式及符号可参考Matplotlib 中文用户指南 4.6 编写数学表达式 - 简书 (jianshu.com)

实例1:根据下列要求用面向对象绘制图表

代码如下:
#导入模块
import numpy as np
import matplotlib.pyplot as plt
 
#显示中文
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
 
#设置电影名称
labels=["哪吒之魔童降世","流浪地球","复仇者联盟4:终局之战","疯狂的外星人",
        "飞驰人生","烈火英雄","蜘蛛侠:英雄远征","速度与激情:特别行动",
        "扫毒2:天地对决","大黄蜂","惊奇队长","比悲伤更悲伤的故事",
        "哥斯拉2:怪兽之王","阿丽塔:战斗天使","银河补习班"]
 
#设置总票房(亿元)
bar_width = [48.57, 46.18,42.05,21.83,17.03,16.70,14.01,
             13.84,12.85,11.38,10.25,9.46,9.27,8.88,8.64]
 
#设置条数
y_data = range(len(labels)) 
 
fig = plt.figure ()               #创建代表画布的Figure类的对象fig
ax = fig.add_subplot (111)        #在画布fig上添加坐标系风格的绘画区域ax
ax.barh(y_data,bar_width, height=0.2,color='orange' )  #绘制图表
 
# 设置x轴和y轴的标签
ax.set_xlabel("总票房(亿元)") 
ax.set_ylabel("电影名称")
 
# 设置y轴的刻度线位置、刻度标签
ax.set_yticks(y_data)
ax.set_yticklabels(labels)
 
plt.show ()                        #展示图表

运行如图所示:

2.添加标题和图例,显示网格

(1)添加标题
语法:title(label, fontdict=None, loc='center', pad=None, **kwargs)

#添加标题
plt.title("正弦曲线和余弦曲线")#默认为居中

(2)添加图例
语法:ax.plot([1, 2, 3], label='Inline label')  ax.legend() 

或    ax.legend((line1, line2, line3), ('label1', 'label2', 'label3'))

语法:legend (handles, labels, loc, bbox to anchor, ncol,title, shadow, fancybox, *args, **kwargs)

(1)handles和labels参数
handles参数表示由图形标识构成的列表,labels参数表示由图例项构成的列表。需要注意的是,handles和labels参数应接收相同长度的列表,若接收的列表长度不同,则会对较长的列表进行截断处理,使较长列表与较短列表长度相等。
(2)loc参数
loc 参数用于控制图例在图表中的位置,该参数支持字符串和数值两种形式的取值,每种取值及其对应的图例位置的说明如表


(3)bbox_to_anchor 参数
bbox_to_anchor 参数用于控制图例的布局,该参数接收一个包含两个数值的元组,其中第一个数值用于控制图例显示的水平位置,值越大则说明图例显示的位置越偏右;第二个数值用于控制图例的垂直位置,值越大则说明图例显示的位置越偏上。
(4)ncol参数
ncol参数表示图例的列数,默认值为1。
(5)title参数
title参数表示图例的标题,默认值为None。
(6)shadow参数
shadow 参数控制是否在图例后面显示阴影,默认值为None.
(7)fancybox参数
fancybox 参数控制是否为图例设置圆角边框,默认值为None。

#添加图例
lines = plt.plot(x,y1,x,y2)
plt.legend(lines,['正弦','余弦'], shadow=True, fancybox=True)

实例2:用面向对象绘制图表(要求将饼图中全部的标注文字移到图例中)

代码如下:

#导入模板
import matplotlib.pyplot as plt
import matplotlib as mpl
 
# 设置中文
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
 
# 外侧说明文字
kinds = ['购物', '人情往来', '餐饮美食', '通信物流', 
         '生活日用', '交通出行', '休闲娱乐', '其他']
 
# 原有数据
money_scale = [800, 100, 1000, 200, 300, 200, 200, 200]
 
# 爆炸程度
dev_position = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
 
#创建画布并添加绘画区域:
fig = plt.figure( )                #创建代表画布的Figure类的对象fig
ax = fig.add_subplot(111)          #在画布fig上添加坐标系风格的绘画区域ax
 
# 绘制图表
ax.pie(money_scale,autopct='%.1f%%',shadow=True,
       explode=dev_position,startangle=90)
 
plt.title('支付宝月账单报告')     #添加标题
 
plt.legend(kinds,loc='upper right',bbox_to_anchor=[1.3,1.1])
 
 
plt.show()                   #展示图表

运行如图所示:

(3)显示网格
语法:grid(b=None, which='major', axis='both', **kwargs)

b:表示是否显示网格。若提供其他关键字参数,则b参数设为True。
which:表示显示网格的类型,支持 major、minor、both这3种类型,默认为major。                axis:表示显示哪个方向的网格,该参数支持both、x和y这3个选项,默认为both。              linewidth 或 lw:表示网格线的宽度。

#显示网格
plt.grid(b=True, axis='y', linewidth=0.3)

实例3:用面向对象绘制图表(在散点图中显示网格,并调整坐标轴刻度)

代码如下:

#导入模块
import numpy as np
import matplotlib.pyplot as plt
 
#显示中文
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
 
# 准备 x 轴和 y 轴的数据
x_speed = np.arange(10, 210, 10)
y_distance = np.array([0.5, 2.0, 4.4, 7.9, 12.3,
                       17.7, 24.1, 31.5, 39.9, 49.2,
                       59.5, 70.8, 83.1, 96.4, 110.7,
                       126.0, 142.2, 159.4, 177.6, 196.8])
 
 
# 绘制气泡图
area=np.linspace(20,300,20)         #生成一个等距递增数列
 
#创建画布并添加绘画区域:
fig = plt.figure( )                 #创建代表画布的Figure类的对象fig
ax = fig.add_subplot(111)           #在画布fig上添加坐标系风格的绘画区域ax
 
#绘制图表
ax.scatter(x_speed,y_distance,s=area)
 
#设置x轴、y轴的标签、刻度标签
plt.xlabel('速度(km/h)')
plt.ylabel('制动距离(m)')
 
plt.xticks(x_speed)                #令每个点都在坐标上
 
plt.grid(b=True,linewidth=0.3)    #显示网格
 
# 展示图表
plt.show()

运行如图所示:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值