matplotlib是python的一个绘图库。使用它可以很方便的绘制出版质量级别的图形。
官方文档:
matplotlib 基本功能
# 使用matplotlib前,先做如下操作
# 导包
import matplotlib.pyplot as plt
# 使中文正常显示
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
axhline() 方法创建 水平线
axvline() 方法创建 垂直线
- x 或 y:线的出发点
- c:线条颜色
- ls:线条风格
- 常见取值有实线(’-’)、虚线(’–’)、点虚线(’-.’)、点线(’:’)
- lw:线条宽度
# 绘制水平线 和 垂直线
plt.axhline(y=2, ls=":", c="blue", lw=5) # 添加水平直线
plt.axvline(x=4, ls="-", c="red") # 添加垂直直线
vlines() 方法, 绘制一条或多条垂直线
hlines() 方法, 绘制一条或多条水平线参数, 以vlines为例:
- x: 横坐标
- ymin,ymax:辅助线纵坐标的最小值、最大值
plt.vlines(x=[2, 3, 3.5], # 垂线的x坐标值
ymin=[10, 20, 30], # 每条垂线起始y坐标
ymax=[25, 35, 45], # 每条垂线结束y坐标
colors="red") # 线的颜色
plt.hlines(20, 2.2, 3.2, colors="blue")
axvspan() 与 axhspan() 绘制一个横跨当前图表的垂直/水平区域
主要参数, 以axvspan为例:
- xmin:参考区域的起始位置
- xmax:参考区域的终止位置
- ymin=0, ymax=1 占据图片的大小 ymin=0表示从图片最底部开始显示, ymax=1表示到图片最上部为止
- facecolor:参考区域的填充颜色
- alpha:参考区域的填充颜色的透明度
plt.hlines(5,1,10)
plt.vlines(5,1,10)
# 绘制纵向区域
plt.axvspan(xmin=3, # 确定纵向区域在x轴的起始点
xmax=4, # 确定纵向区域在x轴的结束点
ymin=0.2, # 确定纵向区域在图片底部中起始的百分比位置
ymax=0.8, # 确定纵向区域在图片上部中结束的百分比位置
facecolor='green', # 区域颜色
alpha=0.5) # 区域透明度
# 绘制横向区域
plt.axhspan(6,7,0,1,facecolor='black',alpha=0.3)
参数: ‘sub-fig’, #窗口标题栏文本
figsize=(4, 3), #窗口大小 <元组>
facecolor=’’ #图表背景色
plt.figure('A', # 图表名称, (显示在左上方)
figsize=(2, 2), # 图表大小
facecolor='yellow') # 图表的背景色
plt.xlim(0, 100)
plt.ylim(0, 100)
plt.show()
用PyCharm运行打开的图表
可以一次打开多个图表
plt.figure('A', figsize=(2, 2), facecolor='yellow')
plt.xlim(0, 100)
plt.ylim(0, 100)
plt.figure('B', figsize=(2, 2), facecolor='red')
plt.xlim(0, 100)
plt.ylim(0, 100)
plt.show()
- xlabel() 和 ylabel()
plt.xlabel("x轴")
plt.ylabel("y轴")
- xlim() 和 ylim()
plt.xlim(0, 100)
plt.ylim(100, 200)
- xticks() 和 yticks()
- 至少给vals参数: 设置轴刻度的数据
- 可以给texts参数: 设置轴刻度显示的字
vals = [1,2,3,4]
texts = ['壹', '贰', '叄', '肆']
plt.xticks(vals, texts)
plt.yticks([]) # 不想显示任何轴刻度, 直接给个空列表
- title()函数可以设置标题
- 字符串参数为标题
- fontsize为大小
- color, alpha…
plt.title('测试')
- 用gca()方法, 获取当前坐标系对象
- 然后通过坐标系对象的spines[ ] 方法获取想要的坐标轴, [ ] 内用字符串写坐标轴的名字
- 共有上下左右4个坐标轴, 名字分别是: top, bottom, left, right
- 坐标轴对象可以用set_color() 方法修改颜色
- 坐标轴对象可以用set_position() 方法修改位置
- 方法内参数固定写法: set_position((‘data’, num)) num为想要移动到的位置刻度
plt.xlim(-10, 10) # 修改x轴数据范围
plt.ylim(-10, 10) # 修改y轴数据范围
ax = plt.gca() # 获取当前坐标系对象
top_axis = ax.spines['top'] # 根据名字获取坐标轴对象
top_axis.set_color('none') # 将上轴设置为全透明
right_axis = ax.spines['right'].set_color('none') # 获取右坐标轴对象, 并设置为透明
left_axis = ax.spines['left'] # 获取做左标轴对象
left_axis.set_position(('data', 0)) # 将左坐标轴移动到x=0的位置
bottom_axis = ax.spines['bottom'].set_position(('data', 0)) # 获取下坐标轴对象, 并移动到y=0的位置
plt.yticks([10,5,0,-5,-10],[10,5,'',-5,-10]) # 修改y轴刻度,以及刻度的显示
plt.xticks([10,5,0,-5,-10],[10,5,0.0,-5,-10]) # 修改x轴刻度,以及刻度的显示
plt.title(r'$x^n+y^n=z^n$') # 用Latex写坐标系名称
plt.figure('A', # 图表名称
figsize=(5, 5), # 图表大小
facecolor='yellow') # 图表背景色
plt.title('Test-A', fontsize=18) # 图表显示的标题和大小
plt.grid() # 显示网格
plt.xlabel('x轴', fontsize=12) # 显示x轴标题
plt.ylabel('y轴', fontsize=12) # 显示y轴标题
plt.tick_params(axis='x', # 修改x轴相关数据 {x, y, both}
top=True, # 显示上轴标点
labeltop=True, # 显示说轴刻度值
labelsize=15, # 刻度值文字大小
labelcolor='g', # 刻度值文字颜色
width=10, # 刻度点宽度
length=10, # 刻度点长度
color='b', # 刻度点颜色
labelrotation=45) # 刻度值文字旋转度数
plt.xlim(0, 100) # x轴取值范围
plt.ylim(0, 100) # y轴取值范围
plt.figure('B', figsize=(4, 4))
plt.title('Test-B', fontsize=10)y
plt.grid(linestyle=":", color='y')
plt.xlabel('x轴', fontsize=12)
plt.ylabel('y轴', fontsize=12)
plt.tick_params(axis='both', labelsize=12)
plt.xlim(0, 100)
plt.ylim(0, 100)
plt.legend() 函数, 用于显示图例
- 在画线时候, 可以在方法内写一个label参数 (字符串), 用以显示图例
- 但是图例不会自动显示, 必须调用legend() 函数才能显示图例
- legend() 函数有一个loc参数 (字符串 or 整数code形式), 代表显示图例的位置, 默认为0 (best)
- 包含以下可选参数:
- ‘best’ 0
- ‘upper right’ 1
- ‘upper left’ 2
- ‘lower left’ 3
- ‘lower right’ 4
- ‘right’ 5
- ‘center left’ 6
- ‘center right’ 7
- ‘lower center’ 8
- ‘upper center’ 9
- ‘center’ 10
plt.xlim(0, 11)
plt.ylim(0, 10)
plt.hlines(5,1,10, label='横线')
# 用ledgend函数,否则label不显示
plt.legend()
# 将图例显示在左下方
plt.xlim(0, 11)
plt.ylim(0, 10)
plt.hlines(5,1,10, label='横线')
plt.legend(loc=3)
可以分开显示不同的图例
- 由于创建一个图例会覆盖的原先的图例, 所有在前面的图例需要用变量来保存, 然后用ass_artist() 函数传给当前坐标系对象
plt.xlim(0, 11)
plt.ylim(0, 11)
p1=plt.hlines(5,1,10, color='r', linestyle=':') # 创建横线对象
p2=plt.vlines(5,1,10, color='b', linestyle='-.') # 创建竖线对象
le1 = plt.legend([p1],['横线'], loc=7) # 给横线对象设置图例, 并指定位置
le2 = plt.legend([p2], ['竖线'], loc="upper center") # 给竖线对象设置图例, 并指定位置
plt.gca().add_artist(le1) # 将第一个图例添加给当前坐标系对象
plt.show() # 显示
基本参数:
- 用字符串表示要显示的文本内容
- xycoords=“data” 备注目标点所使用的坐标系("data"表示数据坐标系)
- xy=(x, y) 备注目标点的坐标
- textcoords=‘offset points’ 备注文本所使用的坐标方法(offset points表示参照点的偏移坐标系)
- xytext=(x, y) 备注文本的坐标
- fontsize=14 备注文本的字体大小
- arrowprops=dict() 使用字典定义文本指向目标点的箭头样式
- arrowstyle=" " 定义箭头样式
- ‘-’ None
- ‘->’ head_length=0.4,head_width=0.2
- ‘-[’ widthB=1.0,lengthB=0.2,angleB=None
- ‘|-|’ widthA=1.0,widthB=1.0
- ‘-|>’ head_length=0.4,head_width=0.2
- ‘<-’ head_length=0.4,head_width=0.2
- ‘<->’ head_length=0.4,head_width=0.2
- ‘<|-’ head_length=0.4,head_width=0.2
- ‘<|-|>’ head_length=0.4,head_width=0.2
- ‘fancy’ head_length=0.4,head_width=0.4,tail_width=0.4
- ‘simple’ head_length=0.5,head_width=0.5,tail_width=0.2
- ‘wedge’ tail_width=0.3,shrink_factor=0.5
- connectionstyle=" " 定义连接线的样式
- ‘angle’ angleA=90,angleB=0,rad=0.0
- ‘angle3’ angleA=90,angleB=0`
- ‘arc’ angleA=0,angleB=0,armA=None,armB=None,rad=0.0
- ‘arc3’ rad=0.0
- ‘bar’ armA=0.0,armB=0.0,fraction=0.3,angle=None
plt.xlim(0, 11)
plt.ylim(0, 11)
p1=plt.hlines(5,1,10, color='r', linestyle=':')
plt.annotate("测试", # 备注的文本
xycoords="data", # 目标点的坐标系
xy=(6,5), # 目标点的坐标
textcoords='offset points', # 备注文本的坐标用偏移坐标系表示
xytext=(50,50), # 文本坐标离目标点的偏移量
fontsize=14, # 备注文本的大小
arrowprops=dict(
arrowstyle= '->',
connectionstyle= 'arc'
))
plt.xlim(0, 11)
plt.ylim(0, 11)
p1=plt.hlines(5,1,10, color='r', linestyle=':')
plt.annotate("测试",
xycoords="data",
xy=(6,5),
xytext=(2,7), # 不写textcoords参数, 默认以坐标位置显示备注文本的位置
fontsize=14,
color='b',
arrowprops=dict(
arrowstyle= '-[',
connectionstyle= 'angle3'
))
text()函数可以在图表中显示文本
- x, y 参数: 用于指定显示位置
- 字符串参数: 显示的文本
- ha, va参数: 文本显示位于坐标点的位置, 默认坐标点位于文本的左下角
- size, color…
plt.xlim(0, 100)
plt.ylim(0, 100)
plt.text(50,50,'test',size=30)
显示的文字位置是以文本左下角为起始点
调用ha和va参数, 使位置在坐标点中间显示
plt.xlim(0, 100)
plt.ylim(0, 100)
plt.text(50,50,'test',size=30, ha='center', va='center')
善于生成复杂表格和数学公式,非常适用于生成高印刷质量的科技和数学类文档
在matplotlib中, 可以使用LaTex编写公式并输出; (Typora中也支持LaTex表达式)
写法:
例1 :
r'$x^n+y^n=z^n$', r'$\int\frac{1}{x} dx = \ln |x| + C$', r'$-\frac{\pi}{2}$'
输出: x n + y n = z n x^n+y^n=z^n xn+yn=zn, ∫ 1 x d x = ln ∣ x ∣ + C \int\frac{1}{x} dx = \ln |x| + C ∫x1dx=ln∣x∣+C, − π 2 -\frac{\pi}{2} −2π
用 subplot() 方法操作子图有:
- rows: 几行
- columns: 几列
- num: 第几个
plt.subplot(2,2,1) # 显示2x2图集中的第一个图表
plt.text(0.5,0.5,'1',size=55,ha='center',va='center') # 在第一个图表中显示文本'1'
plt.subplot(2,2,4) # 显示2x2图集中的第四个图表
plt.text(0.5,0.5,'4',size=55,ha='center',va='center') # 在第四个图表中显示文本'4'
循环输出9个图表
for i in range(1,10):
plt.subplot(3,3,i) # 显示3x3列表矩阵中的第N个
plt.xticks([]) # 隐藏x轴刻度
plt.yticks([]) # 隐藏y轴刻度
plt.title(i, color='red', fontsize=20) # 显示标题
plt.axhline(y=2) # 显示一条水平线,穿过y=2点
plt.axvline(x=2) # 显示一条垂直线,穿过x=2点
用matplotlib.gridspec库下的GridSpec() 函数创建图表
在用subplot() 函数来进行图表切割 (按0为1计数)
import matplotlib.gridspec as mg # 导包
gs = mg.GridSpec(3,3) # 创建一个3x3的网格式布局图表
plt.subplot(gs[0,:2]) # 切割: 切第1行,第1~2列
plt.text(0.5, 0.5,'1',size=30,ha='center',va='center')
plt.xticks([])
plt.yticks([])
plt.subplot(gs[:2,-1]) # 切割: 切第1~2行,最后1列
plt.text(0.5, 0.5,'2',size=30,ha='center',va='center')
plt.xticks([])
plt.yticks([])
plt.subplot(gs[1,1]) # 切割: 切第2行,第2列
plt.text(0.5, 0.5,'3',size=30,ha='center',va='center')
plt.xticks([])
plt.yticks([])
plt.subplot(gs[1:3,0]) # 切割: 切第2~3行,第1列
plt.text(0.5, 0.5,'4',size=30,ha='center',va='center')
plt.xticks([])
plt.yticks([])
plt.subplot(gs[2,1:3]) # 切割: 切第3行,第2~3列
plt.text(0.5, 0.5,'5',size=30,ha='center',va='center')
plt.xticks([])
plt.yticks([])
用plt.axes()函数自由设置图标的位置,给出左下角点坐标与宽高即可
- left_bottom_x 参数: 左下角点x坐标 (实际给出的不是坐标, 是一个比例)
- left_bottom_y 参数: 左下角点y坐标 (实际给出的不是坐标, 是一个比例)
- width 参数: 宽度
- height 参数: 高度
plt.figure('FlowLayout', facecolor='lightgray') # 以灰色基底创建图表,方便观察
plt.axes([0, 0, 0.5, 0.3]) # 在最左下角, 建一个宽=0.5高=0.3的图表
plt.text(0.5, 0.5, 1, ha='center', va='center', size=36)
plt.axes([0.25, 0.35, 0.5, 0.3]) # 在x=0.25y=0.35的位置, 建一个宽=0.5高=0.3的图表
plt.text(0.5, 0.5, 2, ha='center', va='center', size=36)
plt.axes([0.5, 0.7, 0.5, 0.3]) # 在x=0.5y=0.7的位置, 建一个宽=0.5高=0.3的图表
plt.text(0.5, 0.5, 3, ha='center', va='center', size=36)
plot()函数用于绘制一条直线, 将每个坐标点连接起来
plot([x], [y], label, color, marker, linestyle, linewidth, alpha)
[x] x轴的坐标点 (传参时, 不能给参数名), 可以传入array, 列表, series等一维序列
[y] y轴的坐标点 (传参时, 不能给参数名), 可以传入array, 列表, series等一维序列
- 如果只写了一个列表, 默认为y轴坐标点列表, x轴坐标点默认为y轴坐标对应数量的 [1,2,3,…] 递增
- 如果写了2个列表, 默认第一个列表为x轴坐标, 第二个列表为y轴坐标
linewidth: 表示线的粗细
alpha: 表示透明度
color: 颜色参数
可用 rgb 或 rgba 的三元色方法表示颜色; 第四个数表示透明的
- (0.2, 0.5, 0.6) 或 (0.2, 0.5, 0.6, 0.5)
用英文单词, 或英文单词缩写
- ``'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'
hexagon1 marker-
'H'
hexagon2 marker-
'+'
plus marker-
'x'
x marker-
'D'
diamond marker-
'd'
thin_diamond marker-
'|'
vline marker-
'_'
hline markerlinestyle: 线样式参数
-
'-'
solid line style 实线-
'--'
dashed line style 虚线-
'-.'
dash-dot line style 点画线-
':'
dotted line style 点线
# 设置轴值范围
plt.xlim(0, 10)
plt.ylim(0, 10)
# 写两个列表
plt.plot([1,2,4,5,6,7,7.6,9], # 写x轴的坐标
[0.1,1,3,3.5,7,7.2,9,9.5], # 写y轴的坐标
color='b', # 设置颜色
label='设置x和y', # 设置标签
linewidth=3, # 设置线宽
marker='+', # 设置坐标点样式
linestyle=':', # 设置线样式
alpha=0.7) # 设置透明度
# 写一个列表
plt.plot([8,9,7,6,8,4,5,6,4],color='y', label='只设置y',marker='o',linestyle='--')
# 用ledgend函数,否则label不显示
plt.legend()
- 当坐标点足够的的时候, 折线就变为了曲线
- 一个plot函数内可以设置多条线
- plot(x, y, [fmt], x2, y2, [fmt2], …)
- [fmt] 参数: 可以以字符串形式同时以简写方式设置颜色, 坐标样式和线样式
x = np.linspace(-np.pi,np.pi,200) # 将-3.1415到3.1415之间等分成200个点
y1 = np.cos(x) # 余弦
y2 = np.sin(x) # 正弦
# 绘制正弦曲线 以及 余弦曲线
plt.plot(x, y1, 'b--', x, y2, 'r:')
用fill_between()函数 以某种颜色自动填充两条曲线的闭合区域
- x, # x轴的水平坐标
- y1, # 下边界曲线上点的垂直坐标
- y2, # 上边界曲线上点的垂直坐标
- y1
- color=‘r’, # 填充颜色
- alpha=0.2 # 透明度
x = np.linspace(-np.pi,np.pi,200) # 将-3.1415到3.1415之间等分成200个点
y1 = np.cos(x) # 余弦
y2 = np.sin(x) # 正弦
# 绘制正弦曲线 以及 余弦曲线
plt.plot(x, y1, 'b:', x, y2, 'r:')
# 将y2线在y1线上的空间填充为红色
p1 = plt.fill_between(x, # x轴的坐标数组
y1, # y1线曲线上的y坐标点
y2, # y2线曲线上的y坐标点
y1<y2, # 设置条件: 当y1
color='r', # 设置填充颜色
alpha=0.5) # 设置透明度
# 将y2线在y1线下的空间填充为蓝色
p2 = plt.fill_between(x,
y1,
y2,
y1>y2,
color='b',
alpha=0.5)
# 显示图例
plt.legend([p1, p2],['sin(x)>cos(x)', 'cos(x)])
scatter()函数用于标记坐标点, 可生成散点图
plt.scatter( x, # x轴坐标数组 y, # y轴坐标数组 marker='', # 点型 s=10, # 大小 color='', # 颜色 edgecolor='', # 边缘颜色 facecolor='', # 填充色 zorder='' # 图层序号 )
x参数: 标记点的x轴坐标, 多个点可用列表,ndarray,series
y参数: 标记点的y轴坐标, 多个点可用列表,ndarray,series
s参数: 坐标点样式的大小, 可以传入数组, 使每个点的大小不一样
marker参数: 坐标点的图形样式
edgecolor参数: 边缘色
facecolor参数: 内部填充色
alpha参数: 透明度
zorder参数: 图层位置
c 参数: 定义每个散点的颜色值
cmap参数: 定义颜色映射方案, 为每个颜色设置颜色
在scatter()函数中标明x和y的位置即可,
- 第一个位置是x第二个是y
plt.xlim(0, 11)
plt.ylim(0, 11)
p1=plt.hlines(5,1,10, color='r', linestyle=':') # 画线
plt.scatter(6,5) # 标记特殊坐标点
在一个scatter()函数中标记多个特殊点
plt.xlim(0, 11)
plt.ylim(0, 11)
p1=plt.hlines(5,1,10, color='r', linestyle='--')
plt.scatter(x=[3,4,6], # 3个点的x轴的坐标
y=[5,5,5], # 3个点的y轴的坐标
s=200, # 点的大小
edgecolor='red', # 边缘色
facecolor='b', # 填充色
zorder=3, # 图层位置 (可用于覆盖其他图像)
alpha=0.9, # 透明度
marker='o') # 点的样式
随机生成正态分布的身高和年龄, 以身高为x轴坐标点, 年龄为为y轴坐标点, 绘制散点图
import numpy as np
import matplotlib.pyplot as plt
x = np.random.normal(175, 7, 300)
y = np.random.normal(30, 5, 300)
plt.scatter(x=x,
y=y,
s=20,
color='red',
label='身高年龄分布点',
marker='+')
plt.legend(loc=3)
将每个点的颜色, 根据年龄, 显示不同的颜色
- 用c参数 & cmap参数
import numpy as np
import matplotlib.pyplot as plt
x = np.random.normal(175, 7, 300)
y = np.random.normal(30, 5, 300)
plt.scatter(x,y,
s=30,
c=y, # c 参数: 定义每个散点的颜色值
cmap='brg', # cmap参数: 定义颜色映射方案, 为每个颜色设置颜色
label='身高年龄分布点',
marker='x')
plt.legend(loc=3)
将每个点的颜色, 根据离年龄和身高平均值的举例, 显示不同的颜色和大小
import numpy as np
import matplotlib.pyplot as plt
x = np.random.normal(175, 7, 300)
y = np.random.normal(30, 5, 300)
dis1 = np.sqrt((x-175)**2 + (y-30)**2)
dis2 = 25-dis1
plt.scatter(x,y,
s=dis2, # s参数控制点的大小, 可以传入数组
c=dis1,
cmap='brg', label='身高年龄分布点', marker='o')
plt.legend(loc=3)
plt.bar(
x, # 水平坐标数组
y, # 柱状图高度数组
width, # 柱子的宽度
color='', # 填充颜色
label='', #
alpha=0.2 #
)
# 导包
import numpy as np
import matplotlib.pyplot as plt
# 使图表能正常显示中文
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
apples = np.random.normal(60,10,12) # 以正态分布随机生成12个变量代表苹果销量
month = np.arange(12) # 生成1~12的数字代表月份
plt.bar(month, # 以月份为x轴
apples, # 以销量为y轴
0.8, # 柱状图宽度
color='blue', # 柱子颜色
alpha=0.4, # 透明度
label='苹果销量图') # 图例
# 修改x轴刻度的显示
plt.xticks(month, ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'])
# 修改x轴字体的旋转度
plt.tick_params(axis='x',labelrotation=45)
# 显示图例
plt.legend()
apples = np.random.normal(60,10,12) # 以正态分布随机生成12个变量代表苹果销量
oranges = np.random.normal(60,10,12) # 以正态分布随机生成12个变量代表橘子销量
month = np.arange(12) # 生成1~12的数字代表月份
# 苹果销量柱状图
plt.bar(month, # 以月份为x轴
apples, # 以销量为y轴
0.8, # 柱状图宽度
color='blue', # 柱子颜色
alpha=0.4, # 透明度
label='苹果销量图') # 图例
# 橘子销量柱状图
plt.bar(month, oranges, 0.8, color='orange', alpha=0.8, label='橘子销量图')
# 修改x轴刻度的显示
plt.xticks(month, ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'])
# 修改x轴字体的旋转度
plt.tick_params(axis='x',labelrotation=45)
# 显示图例
plt.legend()
两个柱状图是相互叠加的
由于设置了透明度, 所以还能看得出来哪个销量比哪个高
# 随机生成苹果和橘子的销量, 以及月份
apples = np.random.normal(60,10,12)
oranges = np.random.normal(60,10,12)
month = np.arange(12)
# 修改x轴参数可以达到左右移动柱子的效果, 在降低width宽度, 可以达到柱子并排显示的效果
plt.bar(month-0.2, apples, 0.4, color='blue', alpha=0.4, label='苹果销量图')
plt.bar(month+0.2, oranges, 0.4, color='orange', alpha=0.8, label='橘子销量图')
plt.xticks(month, ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'])
plt.tick_params(axis='x',labelrotation=45)
plt.legend()
常常用于统计数值的频数, 可以直观的看到哪些数值多, 哪些数值少
plt.hist(
x, # 值列表
bins, # 直方柱数量
color, # 颜色
edgecolor # 边缘颜色
)
# 随机生成服从正态分布的200个学生的成绩, 平均分为70, 方差为5
ary = np.random.normal(70,5,200)
# 生成直方图
plt.hist(ary, # 值列表, hist()函数会自动统计每个数据的频数, 并以直方图显示
bins=50, # 直方的数量
color='b',
edgecolor='y',
label='学生成绩分布图')
plt.legend() # 显示图例
plt.xlabel("成绩") # 显示x轴名称
plt.ylabel("数量") # 显示y轴名称
plt.pie(
values, # 值列表
spaces, # 扇形之间的间距列表
labels, # 标签列表
colors, # 颜色列表
'%d%%', # 标签所占比例格式
shadow=True, # 是否显示阴影
startangle=90 # 逆时针绘制饼状图时的起始角度
radius=1 # 半径
)
import matplotlib.pyplot as plt
import numpy as np
plt.figure('pie', facecolor='lightgray')
plt.title('Pie', fontsize=20)
# 整理数据
values = [15, 13.3, 8.5, 7.3, 4.62, 51.28]
spaces = [0.05, 0.01, 0.01, 0.01, 0.01, 0.01]
labels = ['Java', 'C', 'Python', 'C++', 'VB', 'Other']
colors = ['dodgerblue', 'orangered', 'limegreen', 'violet', 'gold','blue']
# 等轴比例
plt.axis('equal')
plt.pie(
values, # 值列表
spaces, # 扇形之间的间距列表
labels, # 标签列表
colors, # 颜色列表
'%d%%', # 标签所占比例格式
shadow=True, # 是否显示阴影
startangle=90, # 逆时针绘制饼状图时的起始角度
radius=1 # 半径
)
plt.legend()
plt.show()