matplotlib画散点图折线图柱状图
Posted 除了心跳都忘掉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的话会自动获取图例句柄
以上是关于matplotlib画散点图折线图柱状图的主要内容,如果未能解决你的问题,请参考以下文章
python3绘图示例4(基于matplotlib:箱线图散点图等)
Matplotlib学习---用matplotlib画散点图,气泡图(scatterplot, bubble chart)