python-learning-第二季-画图matplotlib
https://www.bjsxt.com/down/8468.html
绘制方法:
绘制直线:
#coding:utf-
import matplotlib.pyplot as plt
#准备绘制的两个点(,),(,)
#调用绘制的plot方法
plt.plot([,], [,]) #两个点的x和y写在一起
#显示绘制的图
plt.show()
返回:
绘制折线图
#coding:utf-
import matplotlib.pyplot as plt
x = [,,,,]
y = [,,,,]
#调用绘制的plot方法
plt.plot(x, y) #两个点的x和y写在一起
#显示绘制的图
plt.show()
返回:
开始学习-设置样式
windows不支持中文,添加:
#不支持中文的解决办法
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
macos不支持中文,可见mac中matplotlib不支持中文的解决办法
运行的时候为:
#coding:utf-8
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y = [1,4,9,16,25]
#调用绘制的plot方法
plt.plot(x, y, linewidth=5)
plt.xlabel('x')
plt.ylabel('y=x^2')
#不支持中文的解决办法
plt.rcParams['font.sans-serif']=['Songti SC'] #用来正常显示中文标签
#添加标题
plt.title('多个点绘制折线图') #会出现乱码 #显示绘制的图
plt.show()
就成功了:
绘制曲线:
#coding:utf-
import matplotlib.pyplot as plt
x = range(-, )
y = [i** for i in x]
#调用绘制的plot方法
plt.plot(x, y, linewidth=)
plt.xlabel('x')
plt.ylabel('y=x^2')
#不支持中文的解决办法
plt.rcParams['font.sans-serif']=['Songti SC'] #用来正常显示中文标签
#添加标题
plt.title('多个点绘制折线图') #会出现乱码
#保存成图片
plt.savefig('result') #默认格式是png,可以指定为jpg格式result.jpg
#显示绘制的图
plt.show()
返回:
正弦和余弦曲线
#coding:utf-
import numpy as np
import matplotlib.pyplot as plt
#-10之间100个等差数
x = np.linspace(,,)
y = np.sin(x)
#调用绘制的plot方法
plt.plot(x, y, linewidth=) cos_y = np.cos(x)
plt.plot(x, cos_y, linewidth=)
#显示绘制的图
plt.show()
返回:
subplot的使用:
#coding:utf-
import numpy as np
import matplotlib.pyplot as plt
#-10之间100个等差数
x = np.linspace(,,)
y = np.sin(x)
plt.subplot(,,)
#调用绘制的plot方法
plt.plot(x, y, linewidth=) cos_y = np.cos(x)
plt.subplot(,,)
plt.plot(x, cos_y, linewidth=) y_line = [i** for i in x]
plt.subplot(,,)
plt.plot(x, y_line, linewidth=)
#显示绘制的图
plt.show()
返回:
修改某一个画布的x轴的坐标:
plt.xlim(-5,20) : x轴
plt.ylim(-5,20) : y轴
#coding:utf-
import numpy as np
import matplotlib.pyplot as plt
#-10之间100个等差数
x = np.linspace(,,)
y = np.sin(x)
plt.subplot(,,)
#调用绘制的plot方法
plt.xlim(-,)
plt.plot(x, y, linewidth=) #显示绘制的图
plt.show()
返回:
绘制散点图
#coding:utf-
import numpy as np
import matplotlib.pyplot as plt
#-10之间100个等差数
x = np.linspace(,,)
y = np.sin(x)
#调用绘制的plot方法
plt.scatter(x, y, linewidth=)
#等价于
#plt.plot(x, y, 'o') #显示绘制的图
plt.show()
返回:
⚠️plot绘制图形的速度由于scatter,所以如果画一堆点,而且点的形式没有差别,那么就使用plot;如果点的形式有差别,即点的大小和颜色有差别时,则必须使用scatter
点大小颜色不同的情况
#coding:utf-
import numpy as np
import matplotlib.pyplot as plt
#10中大小,100种颜色的散点图 #使得执行多次,每次获得的随机数都相同
np.random.seed() #100个随机点
x = np.random.rand()
y = np.random.rand() #颜色的类别数量要等于点的个数
#大小则没有要求
#设置10种大小,值过小,所以乘500
size = np.random.rand()*
#生成100种颜色
color = np.random.rand() #调用绘制的plot方法,alpha表示透明度,使得重叠的部分可见
plt.scatter(x, y, s=size, c=color, alpha=0.7)
#等价于
#plt.plot(x, y, 'o') #显示绘制的图
plt.show()
返回:
当点的个数大于大小的个数时,循环设置。因为有10种大小,所以第一个点和第11个点是大小一样的,以此类推
绘制不同样式不同颜色的线条
还有其他的
#coding:utf-
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(,,) plt.plot(x, x+, '--g')
plt.plot(x, x+, '-.r')
plt.plot(x, x+, ':b')
plt.plot(x, x+, '.k')
plt.plot(x, x+, ',c')
plt.plot(x, x+, '*y') #显示绘制的图
plt.show()
返回:
添加图例legend():
#coding:utf-
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(,,) #使用legend()图例,给plot方法添加参数label
plt.plot(x, x+, '--g', label='--g')
plt.plot(x, x+, '-.r', label='-.r')
plt.plot(x, x+, ':b')
plt.plot(x, x+, '.k')
plt.plot(x, x+, ',c')
plt.plot(x, x+, '*y')
plt.legend(loc='lower right') #默认位置在左上角loc='upper left',使用参数loc修改为右下角
#显示绘制的图
plt.show()
返回:
还有其他配置参数:
透明度就是当图例遮住图时,能够透过看到线条
绘制柱状图
bar的宽度的说明:
#coding:utf-
import numpy as np
import matplotlib.pyplot as plt
x = [, , , ]
y = [, , , ] #设置为原来柱宽的三倍
plt.bar(x, y, width=) #不支持中文的解决办法
plt.rcParams['font.sans-serif']=['Songti SC'] #修改x坐标的值
x_label = ['1980年', '1985年', '1990年', '1995年']
plt.xticks(x, x_label) #即x轴坐标就只有x设置的这4个值了 #给x、y坐标加名称
plt.xlabel('年份')
plt.ylabel('销量')
plt.title('根据年份销量对比图')
#显示绘制的图
plt.show()
返回:
bar和barh函数的使用
barh:水平方向绘制
#coding:utf-
import numpy as np
import matplotlib.pyplot as plt
import numpy as np np.random.seed()
x = np.arange()
y = np.random.randint(-,,) #将画布分成1行2列
#第一个区域画bar
plt.subplot(,,)
#添加颜色
plt.bar(x,y, color='blue')
#在0位置添加蓝色的线条
plt.axhline(, color='blue', linewidth=) #第一个区域画barh,即x,y对换
plt.subplot(,,)
plt.barh(x,y, color='red')
plt.axvline(, color='red', linewidth=) #显示绘制的图
plt.show()
返回:
正值为一种颜色,负值为另一种颜色:
#coding:utf-
import numpy as np
import matplotlib.pyplot as plt
import numpy as np np.random.seed()
x = np.arange()
y = np.random.randint(-,,) v_bar= plt.bar(x,y, color='blue') #将y值大于0的设置为蓝色,小于0的设置为绿色
#遍历v_bar对象
#zip()将v_bar和y对应的值对应在一起,通过y的值判断柱的颜色
for bar, height in zip(v_bar, y):
if height<:
bar.set(color='green') #显示绘制的图
plt.show()
返回:
柱状图使用实例:
#coding:utf-
import numpy as np
import matplotlib.pyplot as plt
import numpy as np #准备数据
#三部电影的名称
real_names = ['千与千寻', '玩具总动员', '黑衣人:全球通缉']
#3天票房,三天排名是不同的
real_num1 = [, , ]
real_num2 = [, , ]
real_num3 = [, , ] x = np.arange(len(real_names))
#绘制柱状图,alpha参数用于显示重叠部分,本来默认为重叠的
plt.bar(x, real_num1, alpha=0.5)
plt.bar(x, real_num2, alpha=0.5)
plt.bar(x, real_num3, alpha=0.5)
#显示绘制的图
plt.show()
返回:
最后:
#coding:utf-
import numpy as np
import matplotlib.pyplot as plt
import numpy as np #不支持中文的解决办法
plt.rcParams['font.sans-serif']=['Songti SC'] #准备数据
#三部电影的名称
real_names = ['千与千寻', '玩具总动员', '黑衣人:全球通缉']
#3天票房,三天排名是不同的
real_num1 = [, , ]
real_num2 = [, , ]
real_num3 = [, , ] x = np.arange(len(real_names))
#绘制柱状图,alpha参数用于显示重叠部分,本来默认为重叠的
#为了让他们不重叠,而是放在旁边,设置为[i+width for i in x]
width = 0.3
plt.bar(x, real_num1, alpha=0.5, width=width, label=real_names[])
plt.bar([i+width for i in x], real_num2, alpha=0.5, width=width, label=real_names[])
plt.bar([i+*width for i in x], real_num3, alpha=0.5, width=width, label=real_names[])
#添加图例
plt.legend() #设置x的坐标的值,第一天、第二天、第三天
#为了放在中间,设置为[i+width for i in x]
x_label= ['第{}天'.format(i+) for i in x]
plt.xticks([i+width for i in x],x_label) plt.ylabel('票房数')
plt.title('3天3部电影票房数')
#显示绘制的图
plt.show()
返回:
饼状图
#coding:utf-
import numpy as np
import matplotlib.pyplot as plt
import numpy as np #不支持中文的解决办法
plt.rcParams['font.sans-serif']=['Songti SC'] #准备男生、女生人数及比例
man =
woman =
man_perc = man/(man+woman)
woman_perc = woman/(man+woman) #添加名称
labels = ['男','女']
#添加颜色
colors = ['blue', 'red']
#explode=(,0.05) 将图中间设置一个分裂线
#autopct='%0.1f%%' 显示比例并设置比例显示格式
#paches, texts是labels字体, autotexts是比例字体
paches, texts, autotexts = plt.pie([man_perc, woman_perc], labels=labels, colors=colors, explode=(,0.05), autopct='%0.1f%%') #修改字体颜色
for text in autotexts:
text.set_color('white') #设置字体大小
for text in texts:
text.set_fontsize() #显示绘制的图
plt.show()
返回:
直方图——关注分布状态
柱状态关注具体的某个值
#coding:utf-
import numpy as np
import matplotlib.pyplot as plt
import numpy as np #不支持中文的解决办法
plt.rcParams['font.sans-serif']=['Songti SC'] #生成1000个标准正太分布随机数
x = np.random.randn() #bins=, 表示将10个柱放在一起,这样柱子的宽度就比较小了
plt.hist(x, bins=) #显示绘制的图
plt.show()
返回:
还有normal方法指定期望和正态分布:
#coding:utf-
import numpy as np
import matplotlib.pyplot as plt
import numpy as np #不支持中文的解决办法
plt.rcParams['font.sans-serif']=['Songti SC'] #生成1000个,normal方法指定期望和正态分布
x = np.random.normal(,0.8,)
y = np.random.normal(-,,)
z = np.random.normal(,,) #alpha为(,)
kwargs = dict(bins=, alpha=0.5)
#bins=, 表示将10个柱放在一起,这样柱子的宽度就比较小了
#plt.hist(x, **kwargs)等价于plt.hist(x, bins=)
#这样当设置的参数多时,就不用回一个个都写一遍,写一次即可
plt.hist(x, **kwargs)
plt.hist(y, **kwargs)
plt.hist(z, **kwargs) #显示绘制的图
plt.show()
返回:
绘制等高线和三维图
所以100个x和100个y的相交点有10000个
#coding:utf-
import numpy as np
import matplotlib.pyplot as plt
import numpy as np #创建x,y
x = np.linspace(-, , )
y = np.linspace(-, , ) #计算x,y的相交点
X, Y = np.meshgrid(x,y)
Z = np.sqrt(X**+Y**) plt.contour(X,Y,Z)
#显示绘制的图
plt.show()
即哪些x和y相交的点计算得到的Z值是相同的,就连起来画成等高线
返回:
还有plt.contourf(X,Y,Z)会填充:
三维图
还要导入3D包:
#coding:utf-
import numpy as np
import matplotlib.pyplot as plt
#导入3D包
from mpl_toolkits.mplot3d import Axes3D X = [,,,]
Y = [,,,]
Z = [,,,]
#该图对象
figure = plt.figure()
#创建Axes3D对象
ax = Axes3D(figure)
ax.plot_trisurf(X,Y,Z) #显示绘制的图
plt.show()
返回:
python-learning-第二季-画图matplotlib的更多相关文章
- 给深度学习入门者的Python快速教程 - numpy和Matplotlib篇
始终无法有效把word排版好的粘贴过来,排版更佳版本请见知乎文章: https://zhuanlan.zhihu.com/p/24309547 实在搞不定博客园的排版,排版更佳的版本在: 给深度学习入 ...
- 一起做RGB-D SLAM 第二季 (一)
小萝卜:师兄!过年啦!是不是很无聊啊!普通人的生活就是赚钱花钱,实在是很没意思啊! 师兄:是啊…… 小萝卜:他们都不懂搞科研和码代码的乐趣呀! 师兄:可不是嘛…… 小萝卜:所以今年过年,我们再做一个S ...
- 【Python学习笔记】调整matplotlib的图例legend的位置
有时默认的图例位置不符合我们的需要,那么我们可以使用下面的代码对legend位置进行调整. plt.legend(loc='String or Number', bbox_to_anchor=(num ...
- 《舌尖上的中国》第二季今日首播了,天猫食品也跟着首发,借力使力[bubuko.com]
天猫旗下的天猫食品与央视CCTV-1栏目<舌尖上的中国>第二季(以下简称“舌尖2”)达成合作,天猫食品成为舌尖2独家合作平台,同步首发每期 节目中的食材和美食菜谱,舌尖2摄制组还将为同步上 ...
- python课程第二周重点记录
python课程第二周重点记录 1.元组的元素不可被修改,元组的元素的元素可以被修改(字典在元组中,字典的值可以被修改) 2.个人感觉方便做加密解密 3.一些方法的使用 sb = "name ...
- JAVA入门第二季(mooc-笔记)
相关信息 /** * @subject <学习与创业>作业1 * @author 信管1142班 201411671210 赖俊杰 * @className <JAVA入门第二季&g ...
- Big Data 應用:第二季(4~6月)台湾地区Game APP 变动分布趋势图
图表简介: 该示意图表示了台湾地区第二季内所有Game APP类别的分布情形,经由该图表我们可以快速的了解到在这三个月内,哪类型的APP是很稳定:抑或者哪类型的APP是非常不稳定的. 名词解释: 类别 ...
- 再造轮子之网易彩票-第二季(IOS 篇 by sixleaves)
02-彩票项目第二季 2.封装SWPTabBar方式一 接着我们思考如何进行封装.前面已经将过了为什么要封装, 和封装达到的效果.这里我们主要有两种封装方式,分别是站在不同的角度上看待问题.虽然角度不 ...
- QQ聊天界面的布局和设计(IOS篇)-第二季
QQChat Layout - 第二季 本来第二季是快写好了, 也花了点功夫, 结果gitbook出了点问题, 给没掉了.有些细节可能会一带而过, 如有疑问, 相互交流进步~. 在第一季中我们完成了Q ...
随机推荐
- Kotlin继承与重写重要特性剖析
继续Kotlin的面向对象之旅. 继承: 在Java中我们知道除了final类不能被继承,其它的情况都是可以被继承的,而在Kotlin中的规则是这样的:“在Kotlin中,所有类在默认情况下都是无法被 ...
- LG4723 【模板】常系数线性递推
P4723 [模板]常系数齐次线性递推 题目描述 求一个满足$k$阶齐次线性递推数列${a_i}$的第$n$项. 即:$a_n=\sum\limits_{i=1}^{k}f_i \times a_{n ...
- [Apio2010]patrol 巡逻
1912: [Apio2010]patrol 巡逻 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 2541 Solved: 1288[Submit][S ...
- Bias vs. Variance(4)---根据是high bias还是high variance问题来判断接下来做些什么
怎么区分哪些措施对我们有用呢?----首先根据learning curve来判断你的问题是high bias or variance 当你的算法是high bias问题时,如果你get more tr ...
- .net框架-数组(Array)& ArrayList & List
数组(Array)特点: 初始化时规定长度 元素类型相同 数据存储连续,效率高 System.Collections.ArrayList : 初始化时无需规定长度,长度随存储的数据动态扩充与收缩 元素 ...
- 原创!ngxtop-监控nginx的利器!!!
原创!ngxtop-监控nginx的利器!!! 无论名称还是界面,ngxtop的灵感均源自大名鼎鼎的top命令.ngxtop的功能就是,分析Nginx访问日志文件(以及其他日志文件,比如Apache2 ...
- 2019CCPC网络赛 HD6707——杜教筛
题意 求 $f(n,a,b)=\sum_{i=1}^n \sum_{j=1}^i gcd(i^a-j^a,i^b-j^b)[gcd(i,j)=1]\%(10^9+7)$,$1 \le n,a,b \l ...
- Codeforces Round #604 (Div. 2) A. Beautiful String
链接: https://codeforces.com/contest/1265/problem/A 题意: A string is called beautiful if no two consecu ...
- 五.划分LVM逻辑卷
作用: 1.整合分散的空间 2.空间可以进行扩大 零散空闲存储 ---- 整合的虚拟磁盘 ---- 虚拟的分区 由众多的物理卷(PV)组合成卷组(VG),从卷组中划分多个逻辑卷(L ...
- 使用HttpClient进行Get方式通信(使用HttpGet获取网页数据)
1.项目结构 导入jar包 jar包去官网下载解压后项目新建lib目录,将解压包中的lib目录中的zip拷入项目lib目录文件夹,然后build path-->配置到项目中 2.TestGet. ...