Matplotlib新手上路(上)
matplotlib是python里用于绘图的专用包,功能十分强大。下面介绍一些最基本的用法:
一、最基本的划线
先来一个简单的示例,代码如下,已经加了注释:
import matplotlib.pyplot as plt
import numpy as np # 先获取一个图表
plt.figure() # 设置图表的标题
plt.title("sale report") # 设置y轴的label标签
plt.ylabel("amount") # 设置x轴的label标签
plt.xlabel("month") # 模拟一些(X,Y)坐标数据(注:习惯上用大写表示矩阵)
X = np.arange(0, 13)
Y = np.array([100, 200, 200, 300, 400, 600, 500, 550, 600, 700, 800, 750, 800]) # 将x轴的刻度范围限制为-0.5~12.2
plt.xlim(-0.5, 12.2) # 将y轴的刻度范围限制为0~1000
plt.ylim(0, 1000) # 将(X,Y)坐标用red红色画线
plt.plot(X, Y, 'r') # X坐标也可以省略,只要Y轴的坐标值即可,--表示是虚线
plt.plot(Y + 50, '--') # g+表示green绿色,画图的样式为+号
plt.plot(Y - 50, 'g+') # 同时划二条线,第1个是yellow黄色,第2个是magenta色,另外还设置了样式1
plt.plot(Y - 100, 'y', Y - 150, 'm1') # 渲染出来
plt.show()
注:plt中有很多缩写,比如r代表red,y代表yellow,xlim即x-axis-limit(x轴的限制),另外g+,表示颜色是green,而后面的+号表示划线的样式。从源码中可以找到更多的缩写说明。 matplotlib/axes/_axes.py 在这个文件中,plot方法的注释里有相关描述:
The following format string characters are accepted to control
the line style or marker: ================ ===============================
character description
================ ===============================
``'-'`` solid line style
``'--'`` dashed line style
``'-.'`` dash-dot line style
``':'`` dotted line style
``'.'`` 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 marker
================ =============================== The following color abbreviations are supported: ========== ========
character color
========== ========
'b' blue
'g' green
'r' red
'c' cyan
'm' magenta
'y' yellow
'k' black
'w' white
========== ========
二、绘制数学函数
下面是抛物线、直线、三角函数的演示:
import matplotlib.pyplot as plt
import numpy as np # 先获取一个图表
fig = plt.figure() # 抛物线
X1 = np.linspace(-5, 5, 50) # -5 ~ 5 之间生成50个点
Y1 = X1 ** 2 + 5
plt.plot(X1, Y1, 'r')
# plt.plot(X1, Y1, color='red', label='parabola') # 三角函数
X2 = np.linspace(np.pi, 5 * np.pi, 50) # 在pi ~ 5pi之间生成50个点
Y2 = 6 * np.cos(X2)
plt.plot(X2, Y2, 'y')
# plt.plot(X2, Y2, color='y', label='cosine') # 直线
X3 = np.linspace(-4, 6, 20)
Y3 = 3 * X3 + 10
plt.plot(X3, Y3, 'g--')
# plt.plot(X3, Y3, color='green', linestyle='--', label='line') # 显示图例说明
# plt.legend() # 渲染出来
plt.show()
注意:代码中有一些行被注释掉了,比如:plt.plot(X1, Y1, color='red', label='parabola') ,这其实是 plt.plot(X1, Y1, 'r') 的完整写法,其中label只有完整写法中才能指定。换成完整写法后,同时把plt.legend() 前面的注释去掉,再次运行图上就会显示出所谓的"图例"
三、坐标轴控制、文本注解显示
先看效果图:
代码如下:
# coding:utf8 import matplotlib.pyplot as plt
import numpy as np # 先获取一个图表
fig = plt.figure() # 设置x,y坐标轴的刻度显示范围
plt.xlim(-7, 7)
plt.ylim(0, 7) # 抛物线
X1 = np.linspace(-5, 5, 50) # -5 ~ 5 之间生成50个点
Y1 = 0.25 * X1 ** 2
plt.plot(X1, Y1, color='red', label=r'$y=\frac{x^2}{4}$') # 直线
X2 = np.linspace(-5, 5, 50)
Y2 = X2
plt.plot(X2, Y2, color='green', linestyle='--', label=r'$y=x$') # 黑色辅助线
plt.plot([4, 4], [4, 0], "k--")
# 抛物线与直线的交点处,标记1个黑点
plt.plot([4, 4], [4, 4], 'ko') # 交点处的文本(annotate方式)
plt.annotate(r'$y=\frac{4^2}{4}=4$',
xy=(4, 4),
xycoords='data',
xytext=(+10, -30),
textcoords='offset points',
fontsize=12,
color="red",
arrowprops=dict(arrowstyle="->",
color="red",
connectionstyle="arc3,rad=.5"))
# text方式的文本
plt.text(5.2, 6.1, r'$y=\frac{x^2}{4}$', fontdict={'size': 16, 'color': 'r'})
plt.text(5.2, 5.1, r'$y=x$', fontdict={'size': 16, 'color': 'g'}) # 获取当前坐标轴gca即get current axis
ax = plt.gca() # 去掉上、右二侧的边框线
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none') # 将左侧的y轴,移到x=0的位置
ax.spines['left'].set_position(('data', 0)) # 调整x轴刻度(从-5到+5,正好11个点)
plt.xticks(np.linspace(-5, 5, 11))
# 调整y轴刻度
plt.yticks(np.linspace(1, 6, 6)) # 给坐标轴加箭头
plt.arrow(0, 7, 0, 0, width=0.2, color="k", clip_on=False, head_width=0.2, head_length=0.2)
plt.arrow(7, 0, 0.01, 0, width=0.2, color="k", clip_on=False, head_width=0.2, head_length=0.2) # 显示图例说明
plt.legend() # 显示
plt.show()
三、散点图
# coding:utf8 import matplotlib.pyplot as plt # 先获取一个图表
fig = plt.figure() # 设置x,y坐标轴的刻度显示范围
plt.xlim(-5, 20)
plt.ylim(-5, 30) # 画散点图
X1 = [0, 10]
Y1 = [10, 20]
# c即color , s即scale
plt.scatter(X1, Y1, c='r', s=80, label='scatter 1')
plt.scatter([10, 15], [5, 10], c='g', label='scatter 2') # 显示网格
plt.grid(True, alpha=0.3) # 加上坐标说明
plt.text(0.5, 10.5, r'$(0,10)$')
plt.text(10.5, 20.5, r'$(10,20)$')
plt.text(10.5, 5.5, r'$(10,5)$')
plt.text(15.5, 10.5, r'$(15,10)$') # 显示图例说明
plt.legend() # 显示
plt.show()
参考文章:
6、莫烦的视频
Matplotlib新手上路(上)的更多相关文章
- Matplotlib新手上路(下)
接上篇继续,这次来演示下如何做动画,以及加载图片 一.动画图 import numpy as np import matplotlib.pyplot as plt import matplotlib. ...
- Matplotlib新手上路(中)
接上回继续 一.多张图布局(subplot) 1.1 subplot布局方式 import matplotlib.pyplot as plt plt.figure() plt.subplot(3, 2 ...
- OpenGL教程之新手上路
Jeff Molofee(NeHe)的OpenGL教程- 新手上路 译者的话:NeHe的教程一共同拥有30多课,内容翔实,而且不断更新 .国内的站点实在应该向他们学习.令人吃惊的是,NeHe提供的例程 ...
- webpack4配置详解之新手上路初探
前言 经常会有群友问起webpack.react.redux.甚至create-react-app配置等等方面的问题,有些是我也不懂的,慢慢从大家的相互交流中,也学到了不少. 今天就尝试着一起来聊 ...
- 转-spring-boot 注解配置mybatis+druid(新手上路)-http://blog.csdn.net/sinat_36203615/article/details/53759935
spring-boot 注解配置mybatis+druid(新手上路) 转载 2016年12月20日 10:17:17 标签: sprinb-boot / mybatis / druid 10475 ...
- 活字格企业 Web 应用生成器新手上路指南
活字格是一款企业 Web 应用生成器,使用了类 Excel 的设计界面,通过简单的拖拽操作,就能快速制作出一个 Web 信息管理系统.在整个使用过程中无需专业软件知识,没有任何技术门槛,能轻松实现各行 ...
- Ocelot 新手上路
新手上路,老司机请多多包含!Ocelot 在博园里文章特别多,但是按照其中一篇文章教程,如果经验很少或者小白,是没法将程序跑向博主的结果. 因此总结下 参考多篇文章,终于达到预期效果. Oce ...
- 新手上路——it人如何保持竞争力
新手上路——如何保持竞争力 JINGZHENGLI 套用葛大爷的一句名言:21世纪什么最贵,人才.哪你是人才还是人材?还是人财或人裁?相信大家都不是最后一种.何如保持住这个光环呢?就需要我们保持我们独 ...
- FreeSql 新手上路系列教程已发布在 cnblogs
FreeSql 是一个功能强大的对象关系映射程序(O/RM),支持 .NETCore 2.1+ 或 .NETFramework 4.5+(QQ群:4336577) FreeSql采用MIT开源协议托管 ...
随机推荐
- LINUX-CUDA版本所对应的NVIDIA驱动版本号,cuda版本报错的朋友参考一下
CUDA 10.0: 410.48 CUDA .xx CUDA .xx (update) CUDA .xx CUDA .xx (GA2) CUDA .4x CUDA .xx CUDA .xx CUDA ...
- css3图片旋转
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...
- poj1177 矩形周长并
线段树扫描线的模板题,一个月前写的发现忘了一些还是要看看以前的博客呀! /* 思路:数据小不用离散化处理,线段树叶子结点维护一个区间 */ #include<iostream> #incl ...
- .NetCore下使用Prometheus实现系统监控和警报 (五)进阶自定义收集指标 之 Counter
Prometheus下面定了四种类型的收集方式,下面我们主要来来说下Counter的使用 Nuget导入Prometheus.AspNetCore包 下面先来看下我的Prometheus配置,这里我没 ...
- 《Kafka技术内幕》学习笔记
第一章 Kafka入门 1.1 Kafka流式数据平台 Kafka作为流式数据平台的特点: 消息系统:两种消息模型:队列和发布订阅. 队列模型:将处理工作平均分给消费组中的消费者成员. 发布订阅模型: ...
- 在django中使用FormView,success_url死活不能生效的问题
真的不知道是怎么回事, 以前都是手动的, form使用modelform. view使用createview. 今天写新系统时,为了更灵活. form使用form,(这样一来,可以在form是随便按数 ...
- 和组合数有关的dp
1. UVaLive 7143 Room Assignment 用dp[i][r]表示,前i个盒子已经放完了,手上还拿着r对同色球. 状态转移方程为:dp[i+1][r-a-b] = dp[i][r] ...
- zjoi2017 仙人掌
题解: 好难的dp啊...看题解看了好久才看懂 http://blog.csdn.net/akak__ii/article/details/65935711 如果一开始的图就不是仙人掌,答案显然为0, ...
- js手机端和pc端加载不同的样式
function loadCSS() { if((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android| ...
- MQ的订阅模式
一:介绍 1.模式 2.使用场景 一个生产者,多个消费者 每一个消费者都有自己的队列 生产者没有直接把消息发送给队列,而是发送到了交换机 每一个队列都要绑定到交换机 可以实现一个消息被多个消费者消费. ...