文章传送门
简述 / 前言
这篇来分享一些可以增加的图形内容来美化图形:设置图例、设置中文标题、设置网格效果。
1. 设置图例
显示图例关键语句:matplotlib.pyplot.legend(loc=loc)
注意:在显示图例前必须要在画图是加入 label
属性(比如下面的例子在 plot
时都会加上 label
属性),否则图例为空!
那么 loc
有哪些值可以选呢?
参数 | 图例位置 |
---|---|
best | 最合适的位置(常用) |
upper right | 右上角(常用) |
upper left | 左上角 |
lower left | 左下角 |
lower right | 右下角 |
right | 右侧 |
center left | 左侧中间 |
center right | 右侧中间 |
lower center | 下侧中间 |
upper center | 上侧中间 |
center | 中间 |
示例:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-10, 11)
plt.xlim(-11, 11)
plt.plot(x, -2 * x, color="r", label='y=-2x')
plt.plot(x, x, color="g", label='y=x')
plt.plot(x, 2 * x, color="b", label='y=2x')
plt.legend(loc='best') # 绘制图例
plt.show()
输出:
有时候我也会先用 best
来让 python 自动选位置放图例,然后再根据给出的图形修改图例位置,不过大多数时候图例位置选择 best
都不需要修改。
注:内置颜色可以用缩写字母代替(单词首字母),比如 red 可以写成 r,green 可以写成 g,blue 可以写成 b,其它的类似,如果缩写之后报错,说明你要的颜色不是内置颜色,那么就要用 RGB
代码替代。
2. 设置中文标题
显示图例关键语句:matplotlib.pyplot.title()
一般用法:matplotlib.pyplot.title(title, color=color, fontname=fontname, fontsize=fontsize, fontweight=fontweight, fontstyle=fontstyle, verticalalignment=verticalalignment, horizontalalignment=horizontalalignment)
,其中各属性含义如下:
属性 | 含义 |
---|---|
title | 要显示的标题文字 |
color | 标题颜色 |
fontname | 字体格式 |
fontsize | 字体大小 |
fontweight | 字体粗细(light , normal , medium , semibold , bold , heavy , black ) |
fontstyle | 字体类型(normal , italic , oblique ) |
verticalalignment | 水平对齐方式,可以选:top , bottom , center , baseline , center_baseline |
horizontalalignment | 垂直对齐方式,可以选:center , right , left |
- fontsize
参数 含义 16 数值型,字号大小 xx-small 极小 x-small 较小 small 小 medium 中等 large 大 x-large 较大 xx-large 极大
示例:
import matplotlib.pyplot as plt
sizes = [10, 20, 15, 18, 50]
explode = (0.1, 0.1, 0.1, 0.1, 0.1)
labels = ['class1', 'class2', 'class3', 'class4', 'class5']
colors = ['blue', 'red', 'green', 'yellow', 'pink', 'black']
plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%.1f%%', shadow=True, startangle=30, radius=0.8)
# 设置标题
plt.title("分班比例", fontname='FangSong', fontsize='xx-large', color='green', fontweight='bold', fontstyle='italic', verticalalignment='center', horizontalalignment='center')
plt.show()
输出:
注:可以看到显示标题并没有斜体,下面试试英文标题有没有效果~
示例:
import matplotlib.pyplot as plt
sizes = [10, 20, 15, 18, 50]
explode = (0.1, 0.1, 0.1, 0.1, 0.1)
labels = ['class1', 'class2', 'class3', 'class4', 'class5']
colors = ['blue', 'red', 'green', 'yellow', 'pink', 'black']
plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%.1f%%', shadow=True, startangle=30, radius=0.8)
# 设置标题
plt.title("Class placement ratio", fontsize='xx-large', color='green', fontweight='bold', fontstyle='italic', verticalalignment='center', horizontalalignment='center')
plt.show()
注:可以看到英文标题显示为斜体,看来字体类型(fontstyle
)只对英文字符生效,而不对中文字符生效~
3. 设置网格效果
关键方法:matplotlib.pyplot.grid()
一般用法:matplotlib.pyplot.grid(linewidth=linewidth, linestyle=linestyle, color=color, alpha=alpha)
属性 | 含义 |
---|---|
linewidth | 网格线宽度 |
linestyle | 网格线类型 |
color | 网格线颜色 |
alpha | 透明度,取值:[0, 1],值越小越透明 |
示例:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5, 6] # x轴刻度
y = [70, 93, 85, 89, 100, 60] # y轴刻度
color = ['red', 'green', 'blue', 'pink', 'cyan', 'magenta']
x_label = ['一班', '二班', '三班', '四班', '五班', '六班']
# 绘制x刻度标签
plt.xticks(x, x_label)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文
# s设置标题
plt.title("班级平均分对照表", fontdict={'fontsize': 20, 'color': 'y'})
# 绘制柱状图
plt.bar(x, y, color=color)
plt.grid(linewidth='1.5', linestyle=':', color='yellow', alpha=0.8)
plt.show()
输出:
但是一般我们只看横着的线,所以还可以设置一下 axis='y'
,这样只画垂直于的y轴的网格线了
改进用法:matplotlib.pyplot.grid(linewidth=linewidth, linestyle=linestyle, color=color, alpha=alpha, axis=axis)
,添加的参数含义如下:
参数 | 含义 |
---|---|
axis | 垂直于axis轴,axis可选参数:x , y , both (默认值) |
示例:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5, 6] # x轴刻度
y = [70, 93, 85, 89, 100, 60] # y轴刻度
color = ['red', 'green', 'blue', 'pink', 'cyan', 'magenta']
x_label = ['一班', '二班', '三班', '四班', '五班', '六班']
# 绘制x刻度标签
plt.xticks(x, x_label)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文
# s设置标题
plt.title("班级平均分对照表", fontdict={'fontsize': 20, 'color': 'y'})
# 绘制柱状图
plt.bar(x, y, color=color)
plt.grid(linewidth='1.5', linestyle=':', color='gray', alpha=0.8, axis='y')
plt.show()
输出: