博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Matplotlib基础学习
阅读量:6421 次
发布时间:2019-06-23

本文共 5516 字,大约阅读时间需要 18 分钟。

Matplotlib基础学习

Matplotlib简介

Matplotlib是一个python2D的绘图库,它能使绘图变得非常简单,只要短短几行代码即可生成,直方图,功率图,条行图,散点图等等.

一个简单的例子

import numpy as np import matplotlib.pyplot as plt x = np.array([1,2,3])y = np.array([1,2,3])plt.plot(x,y)plt.show()

FaNK4H.png

figure简单使用

figure用来分别作出多张图像,而非在一张图片上作多条线

import matplotlib.pyplot as plt import numpy as np x = np.linspace(-1,1,50)y = 2 * x + 1plt.figure()plt.plot(x,y)x1 = xy1 = x**2plt.figure()plt.plot(x1,y1)plt.show()

图例,标题和标签

很多时候我们要的不仅仅是一张图片那么简单,它的标题,轴域上的标签和图例,对其的解释也是非常重要的.

import matplotlib.pyplot as plt import numpy as np x1 = np.array([1,2,3])y1 = np.array([1,2,3])x2 = np.array([1,2,3])y2 = np.array([10,14,10])#这里添加的第三个参数label是线条指定名称,之后在图例中显示它plt.plot(x1,y1,label='first line')plt.plot(x2,y2,label='second line')#这的xlabel,ylabel可以用来为轴创建标签plt.xlabel = ('plot number')plt.ylabel = ('important var')#title是用来创建图的标题的plt.title('interesting graph\ncheck it out')#legend在这是用来生成默认图例的plt.legend()plt.show()

FaUNsx.png

设置坐标轴

import matplotlib.pyplot as plt import numpy as np x1 = np.linspace(-1,1,50)y1 = 2 * x1 + 1x2 = x1 y2 = x2**2plt.figure()plt.plot(x1,y1)plt.plot(x2,y2,color = 'red', linewidth = 1.0, linestyle = '--')#设置坐标轴取值范围plt.xlim((-1,1))plt.ylim((0,3))#设置坐标轴的label,之前已经提及了plt.xlabel('x')plt.ylabel('y')#设置x坐标轴刻度,原本和y轴一样6个点,现在变成5个点了plt.xticks(np.linspace(-1,1,5))plt.show()

基本图

条行图

import matplotlib.pyplot as plt import numpy as np x1 = np.array([1,3,5,7,9])y1 = np.array([5,2,7,8,2])x2 = np.array([2,4,6,8,10])y2 = np.array([8,6,2,5,6])plt.bar(x1,y1, label='example one')plt.bar(x2,y2, label='example two', color = 'r')plt.xlabel('bar number')plt.ylabel('bar height')plt.legend()plt.title('epic graph\nanother line')plt.show()

FadB2d.png

接下来就是直方图,直方图和条行图非常类似,但更倾向于将区段组合在一起来显示分布.

import numpy as np import matplotlib.pyplot as plt population_ages = np.array([22,55,62,45,21,22,34,42,42,4,99,102,110,120,121,122,130,111,115,112,80,75,65,54,44,43,42,48])bins = np.array([0,10,20,30,40,50,60,70,80,90,100,110,120,130])plt.hist(population_ages, bins, histtype='bar', rwidth=0.8)plt.xlabel('x')plt.ylabel('y')plt.title('interesting graph\ncheck it out')plt.legend()plt.show()

Fadxz9.png

散点图

接下来要说的是散点图,散点图通常是用于比较两个变量来寻找相关性或者进行分组.

import numpy as np import matplotlib.pyplot as plt x = np.array([1,2,3,4,5,6,7,8])y = np.array([5,2,4,2,1,4,5,2])plt.scatter(x,y, label='skitscat', color='b', s=25, marker='o')plt.xlabel('x')plt.ylabel('y')plt.title('interesting graph\ncheck it out')plt.legend()plt.show()

Fa0E7V.png

堆叠图

这里将介绍的是堆叠图.堆叠图一般用于显示'部分对整体'随时间的关系.堆叠图相当于饼图随时间而变化所形成的.

接下来这个例子以花费时间为例,来看每天花在吃饭,睡觉,工作,玩耍随天数增加的变化.

import numpy as np import matplotlib.pyplot as plt days = np.array([1,2,3,4,5])sleeping = np.array([7,8,6,11,7])eating = np.array([2,3,4,3,2])working = np.array([7,8,7,2,2])playing = np.array([8,5,7,8,13])plt.plot([],[],color='m',label='sleeping', linewidth=5)plt.plot([],[],color='c',label='eating', linewidth=5)plt.plot([],[],color='r',label='working', linewidth=5)plt.plot([],[],color='k',label='playing', linewidth=5)plt.stackplot(days, sleeping,eating,working,playing, colors=['m','c','r','k'])plt.xlabel('day')plt.ylabel('spend hour')plt.title('interesting graph\ncheck it out')plt.legend()plt.show()

FaBVKA.png

饼图

通常,饼图用于显示部分对于整体的情况,通常以%为单位,而对于matplotlib而言,它会处理这些东西,我们所要做的仅仅是提供数值

接下来这个例子是某一天的时间花费.

import numpy as np import matplotlib.pyplot as plt slices = np.array([7,2,2,13])activities = np.array(['sleeping', 'eating', 'working', 'playing'])cols = np.array(['c','m','r','b'])plt.pie(slices,        labels=activities,        colors=cols,        startangle=90,        shadow=True,        explode=(0,0.1,0,0),#这里是拉出第二个切片0.1的距离        autopct='%1.1f%%')#选择将百分比放置到图标上面plt.title('interesing graph/ncheck it out')plt.show()

FaDid0.png

从文件中加载数据

很多情况下,我们绘制图片所需的数据是存在文件中的,而文件类型却是多种多样.这里,先介绍内置的csv模块加载csv文件,然后介绍用Numpy加载文件.

csv

先创建一个example.txt文件

内容为:

1,52,33,44,75,46,37,58,79,410,4
import matplotlib.pyplot as plt import csv x = []y = []#csv读取的文件不一定要以.csv为拓展名,它可以是任何具有分隔数据的文本文件with open('example.txt', 'r') as csvfile:#csv模块打开文件    plots = csv.reader(csvfile, delimiter=',')#csv读取器自动按行分割文件,这里以','为分隔符     for row in plots:        x.append(int(row[0]))        y.append(int(row[1]))plt.plot(x,y,label='loaded from file!')plt.xlabel('x')plt.ylabel('y')plt.title('interesting graph\ncheck it out')plt.legend()plt.show()

Numpy加载文件

import matplotlib.pyplot as plt import numpy as np x, y = np.loadtxt('example.txt', delimiter=',', unpack = True)plt.plot(x,y,label='loaded from file!')plt.xlabel('x')plt.ylabel('y')plt.title('interesting fraph\ncheck it out')plt.legend()plt.show()

添加注解和绘制点,

import matplotlib.pyplot as plt import numpy as np x = np.linspace(-3,3,50)y = 2 * x + 1plt.figure()plt.plot(x,y)#获取当前的坐标轴,get current axisax = plt.gca()#去掉上右边框ax.spines['right'].set_color('none')ax.spines['top'].set_color('none')#设置x坐标轴为下边框ax.xaxis.set_ticks_position('bottom')#设置x轴在(0,0)的位置ax.spines['bottom'].set_position(('data',0))ax.yaxis.set_ticks_position('left')ax.spines['left'].set_position(('data',0))x0 = 1y0 = 2*x0 + 1#绘制点plt.scatter(x0, y0, s = 50, color = 'blue')#绘制虚线plt.plot([x0,x0], [y0,0], 'k--', lw = 2.5)#注解方法一plt.annotate('2 * x + 1 = 3', xy=(x0,y0), xycoords='data', xytext=(+30,-30),textcoords='offset points', arrowprops=dict(arrowstyle='->'))#注解方法二plt.text(-3, 3, 'text')plt.show()

subplot绘制多图

import matplotlib.pyplot as plt plt.figure()plt.subplot(2,2,1)plt.plot([0,1],[0,1])plt.subplot(2,2,2)plt.plot([0,1],[1,0])plt.subplot(2,2,3)plt.plot([0,1],[0.5,0.5])plt.subplot(2,2,4)plt.plot([0.5,0.5],[0,1])plt.show()

写的不是很详细,也不算很全,因为我觉得即使现在学的很仔细,用不到很快就会忘记的,所以到要用的时候在将他补全,会更好.所以现在大概有个框架就够了.

转载于:https://www.cnblogs.com/w-j-c/p/10154167.html

你可能感兴趣的文章
mysql日期函数(转)
查看>>
REST API用得也痛苦
查看>>
test for windows live writer plugins
查看>>
Tiny210 U-BOOT(二)----配置时钟频率基本原理
查看>>
读javascript高级程序设计14-错误处理与调试
查看>>
代理模式
查看>>
javaweb学习总结(二十四)——jsp传统标签开发
查看>>
让script的type属性等于text/html
查看>>
[Docker] Docker Machine intro
查看>>
HA 高可用软件系统保养指南
查看>>
linux 文件系统sysvinit 流程分析
查看>>
体素科技:2018年,算法驱动下的医学影像分析进展
查看>>
Vue 折腾记 - (8) 写一个挺靠谱的多地区选择组件
查看>>
VS Code折腾记 - (3) 多图解VSCode基础功能
查看>>
再不懂区块链,你就OUT了!
查看>>
教你玩转自定义View—手撸一个倒计时控件如此简单
查看>>
『翻译』Node.js 调试
查看>>
我的iOS开发之路总结(更新啦~)
查看>>
Java NIO之拥抱Path和Files
查看>>
微信原图泄露的只能是 Exif ,你的隐私不在这!!!
查看>>