matplotlib画散点图、折线图、柱状图

1. 绘图原理

在这里插入图片描述

# 第一种
# 手动创建一个figure对象
figure = plt.figure()
# 获取每个位置的axes对象
axes1 = figure.add_subplot(2,1,1)
axes2 = figure.add_subplot(2,1,2)

# 第二种
plt.figure()
axes1 = plt.subplot(2,1,1)
axes2 = plt.subplot(2,1,2)

# 在每个axes上画图,效果一样
axes1.plot([1,3,5,7],[4,9,6,8])
axes2.plot([1,2,4,5],[8,4,6,2])
plt.show()

2. 基本绘图语句

柱状图

①语法格式

  • plt.bar(x,height,color,edgecolor,width=0.8,bottom=None,align=‘center’,**kargs)

②参数说明

  • x 表示在x轴的哪个位置绘制柱形图;
  • height 表示每个柱子的高度。
  • color 表示柱子的颜色。
  • edgecolor 表示柱子边缘的颜色。
  • width 表示每个柱子的宽度。柱子的宽度可以相同,可以不同。
  • bottom 表示每个柱子的底部位置。每个柱子的底部位置可以相同,可以不同。
  • align 表示柱子的位置与x值的对应关系。可选center、edge参数。center表示柱子位于x值的中心位置,edge表示柱子位于x值的边缘位置。

③ 一个figure画两张图

x1 = np.arange(5)
y1 = np.arange(5)
x2 = np.arange(2)
y2 = np.array([7,3])

plt.figure()  # 创建画布

plt.subplot(1,2,1)  # 此时的设置会应用到(1,2,1)这张图像上

plt.bar(x1,y1,width=0.5,color='r')
plt.title("不同饮料类型的人数对比图")  # 图像标题
plt.xlabel("饮料类型")  # x轴标签
plt.ylabel("数量")  # y轴标签

plt.xticks(ticks=x1,labels=["果汁","矿泉水","绿茶","其它","碳酸饮料"])  # x轴刻度
# labels[i] 对应到 ticks[i] 上
plt.yticks(np.arange(6))  # y轴刻度

plt.subplot(1,2,2) # 此时的设置会应用到(1,2,2)这张图像上

plt.bar(x2,y2,width=0.6, color="g")
plt.title("不同顾客性别的人数对比图")
plt.xlabel("顾客性别")
plt.ylabel("数量")

plt.xticks(x2,["男","女"])
plt.yticks(np.arange(10))


plt.show()

结果
在这里插入图片描述
④ 一个柱状图中画几种数据进行对比

要点:

  • 控制每个bar的位置 x,注意与 width 的关系,避免重叠
  • 控制xticks的ticks,使labels显示在正中间

例如:

w = 0.4
plt.bar(x,y1,width=w)
plt.bar(x+w,y2,width=w)  # x+width

plt.xticks(x+w/2,["果汁","矿泉水","绿茶","其它","碳酸饮料"])  # 使x轴刻度显示在两个柱体中间,x+width/2

③ 两个纵轴的柱状图

要点:

  • plt.twins()语句切换纵轴
x = np.arange(5)
y1 = np.array([2,4,3,6,5])
y2 = np.array([1,2,3,4,5])

plt.figure()
plt.bar(x,y1)  # 默认在左边纵轴

plt.twinx()  # 切换到另一个纵轴
plt.plot(x,y2)

这种情况下如果要分别绘制图例,则分别调用plt.legend(),如果要合并图例,有两种办法。
第一种

plt.figure()
axis1 = plt.bar(x,y1)  # 默认在左边纵轴

plt.twinx()  # 切换到另一个纵轴
axis2 = plt.plot(x,y2)
plt.legend(axis1+axis2, l.get_label() for l in (axis1+axis2))

3. 绘图技巧

包括各种细节问题比如显示中文,合并左右纵轴的图例

中文显示

matplotlib默认情况下不支持中文显示,我们需要做一些额外的设置操作。设置可以分为如下两种:

  • 全局设置:设置一次,对所有的操作有效;
  • 局部设置:在某一次绘图中,设置一次,仅对当前这个绘图有效;

如果局部设置和全局设置都存在,则局部设置生效;

1)全局设置

① 字体设置

font.family =

  • sans-serif 西文字体(默认)
  • SimHei 中文黑体
  • FangSong 中文仿宋
  • YouYuan 中文幼圆
  • STSong 华文宋体
  • Kaiti 中文楷体
  • LiSu 中文隶书

代码:

import matplotlib as mpl
mpl.rcParams["font.family"] = "SimHei"

② 字体风格

font.style =

  • normal 常规(默认)
  • italic 斜体
  • oblique 倾斜

代码:

mpl.rcParams["font.style"] = "italic"

③ 字体大小

mpl.rcParams["font.size"] = 16

另外,"-"负号的显示需要设置

mpl.rcParams["axes.unicode_minus"] = False

图例显示

① 将不同函数的标签显示在同一个图例中

plt.legend(handles=[],labels=[],loc=’’)

  • handles为需要绘制图例的函数集合
  • labels为与handles按顺序对应的标签
  • loc有’best’、‘upper’,'center’和’lower’系列各3个、‘right’ 共11种,还可以使用 bbox_to_anchor 关键字使图例出现在任何地方。

代码:

plt.legend(ncol=1, fontsize=15, bbox_to_anchor=(0.175,1))
# 没有指定handls的话会自动获取图例句柄
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值