2018-05-21-用Python画个统计图(一)

前言

家里面断网一个月,淦
邪恶的Capitalism网络商直到现在还是没有给我修好,
然后又放假了,Library竟然不开门你敢信?
我就很好奇了,md平时大家都上课,图书馆谁来?现在大家放假了你把图书馆给我关了.....
没得治没得治

正文

上次在做Pandas最后一期的时候讲了生成一个简单的函数图像
这一次我们就来详细的讲一讲如何使用Matplotlib画画
【什么?你告诉我你不会用Pandas和Numpy?】
强烈建议在学习本章之前先翻翻我之前的Numpy和Pandas教程,

好了我们开始吧

0x01 安装

Mac和Linux直接在终端里面煞笔安装就可以了,

  • Linux 打开 Terminal 窗口, 输入以下内容
# python 3
$ sudo apt-get install python3-matplotlib
# python 2
$ sudo apt-get install python-matplotlib
  • Mac 打开 Terminal 窗口, 输入以下内容
# python 3
$ pip3 install matplotlib
# python 2
$ sudo apt-get install python-matplotlib

【我就猜到你们这群弱子用的是windows】
【不教,自己去装Anaconda python,gun】
嘻嘻嘻

0x02 导入

一般来说,你是可以直接import 整个matplotlib的......
But!
其实我们用的所有功能都是matplotlib的pyplot模块,
因为名字太难写了,所以我一般都是copy然后as plt,简写就完事咯~

from matplotlib import pyplot as plt 

【那为什么要下载整个库呢qwq】

正比例函数走起

为什么不是一次函数呢?
emmmmm
y=mx+b太难写了嘛y=mx多好啊
首先我们使用Numpy制作一些数据:

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1, 100, 100)
y = x
>>> x
array([   1.,    2.,    3.,    4.,    5.,    6.,    7.,    8.,    9.,
         10.,   11.,   12.,   13.,   14.,   15.,   16.,   17.,   18.,
         19.,   20.,   21.,   22.,   23.,   24.,   25.,   26.,   27.,
         28.,   29.,   30.,   31.,   32.,   33.,   34.,   35.,   36.,
         37.,   38.,   39.,   40.,   41.,   42.,   43.,   44.,   45.,
         46.,   47.,   48.,   49.,   50.,   51.,   52.,   53.,   54.,
         55.,   56.,   57.,   58.,   59.,   60.,   61.,   62.,   63.,
         64.,   65.,   66.,   67.,   68.,   69.,   70.,   71.,   72.,
         73.,   74.,   75.,   76.,   77.,   78.,   79.,   80.,   81.,
         82.,   83.,   84.,   85.,   86.,   87.,   88.,   89.,   90.,
         91.,   92.,   93.,   94.,   95.,   96.,   97.,   98.,   99.,  100.])

假设我们要生成一个函数图像,根据上面的条件我们知道这个函数图像肯定是过原点的【因为是正比例函数】,
所以接下来我们只需要验证slope是否是45°就ok了

plt.plot()

一个挺万能的函数,用来展示平面直角坐标里面的图标,可以拿来调颜色和宽度,

#输出使用x,y数组,颜色为红色,宽度为1.0,线条类型为虚线的图标
plt.plot(x, y, color='red', linewidth=1.0, linestyle='--')

档然咯目前用来展示只使用x坐标和y坐标的图标
如果你把xy写反了就会发现坐标倒过来了噗嗤

plt.show()

用来展示plt库生成的图像,
记住后面要加括号!后面要加括号!后面要加括号!
温馨提示:show函数提供的图像只能在终端里面被展示一次,如果在一个程序里面写入两次show一个图片的话,那么只会展示一张图片来着
如果想要一次性show两张图片的话,可以尝试使用plt.figure()函数哦,这个文章后面会讲到,

综合上面两个函数,变成这个样子:

>>> x = np.linspace(1,100,100)
>>> y = x
>>> plt.plot(x,y)
[]
>>> plt.show #这里傻了没加括号

>>> plt.show() #这样子才会输出结果
2018-05-21-用Python画个统计图(一)_第1张图片
Figure_1.png

如果把y改成x的平方?

>>> y = x**2
>>> plt.plot(x,y)
[]
>>> plt.show()
2018-05-21-用Python画个统计图(一)_第2张图片
Figure_1-1.png

0x06 自带的图标展示器

很多人就很好奇了:“上面那些可爱的图标是干什么的?”
说实话你们用不上【嘲讽】

GIF什么的加载慢就等一会儿嘛!

2018-05-21-用Python画个统计图(一)_第3张图片
放大缩小.gif

2018-05-21-用Python画个统计图(一)_第4张图片
拖动重置.gif

改变图片属性.gif

还好我把最重要的部分给遮住了嘻嘻嘻
抱图的话私哦【抱紧公主殿下】

0x07 合并吧!!

合并基本上吧都是每一个数学库里面的重头戏,
刚刚我们生成了两个图表,现在我们要尝试着将它们合并
但是show()只能用一次啊怎么办......

plt.figure()

使用figure函数定义一个图像窗口,实现多个图像一次性输出或者多个图像合并为一个图像输出
figure还可以设置输出的图片名字和图片的长宽【不是坐标轴的】

plt.figure(num=3, figsize=(8, 5))

这样就是输出一个名字为figure3,长宽为8,5的图表

举一个栗子,刚刚的两个图像,使用了figure后可以实现一次性show出两张图片~

x = np.linspace(1,100, 1)
y1 = x
y2 = x**2
plt.figure()#show出第一张图片
plt.plot(x, y1)
plt.figure()#show出第二张图片
plt.plot(x,y2)
plt.show()

那么如果是合并呢.....
【此处思考十秒】

废话你删掉一个figure不就行了,两个figure两张图片,一个figure不就合并了嘛?

plt.figure()#show张合并的图片
plt.plot(x, y1)
plt.plot(x,y2)
plt.show()
2018-05-21-用Python画个统计图(一)_第5张图片
Figure_1-2.png

这里还很贴心的自动帮我把颜色给改了噗嗤【mua一口人工智障】

0x08 设置坐标轴

还在使用可爱的button更改坐标轴嘛?out了!
多没有geek范啊,现在学习如何在程序里面自定义坐标轴,
想刚刚上面这个图,有没有发现y轴明显太大了,导致x轴看起来感觉和y=1一样尴尬【其实根本就不是我把数据开太大了哼】
【数据赶紧换掉赶紧换掉】
现在我们就来设置一下x,y轴的取值范围

【不对啊刚刚你不是演示了拖动和放大嘛?为什么不直接......】
就你话多!

plt.xlim() and plt.ylim()

使用这两个函数可以设置对应的x,y轴初始的取值范围【当然了前提是你不去拖他】

我先更改个数据哈qwq


用np.linspace定义x:范围是(-3,3);个数是50. 仿真一维数据组(x ,y1)表示
曲线1. 仿真一维数据组(x ,y2)表示曲线2.

然后plt.figure定义一个图像窗口. 使用plt.plot画(x ,y2)曲线. 使用plt.plot画(x ,y1)曲线,曲线的颜色属性(color)为红色;曲线的宽度(linewidth)为1.0;曲线的类型(linestyle)为虚线.

>>> x = np.linspace(-3, 3, 50)
>>> y1 = 2*x + 1
>>> y2 = x**2
>>> plt.figure()

>>> plt.plot(x, y2)
[]
>>> plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
[]
>>> plt.show()

输出是这个样子的【plt的官方library石锤】


2018-05-21-用Python画个统计图(一)_第6张图片
Figure_2.png

现在我们可以试着去规定x,y轴的取值范围,只需要添加两个语句嘻嘻嘻

plt.xlim((-1, 2))
plt.ylim((-2, 3))

再看一看输出结果:


2018-05-21-用Python画个统计图(一)_第7张图片
Figure_2-1.png

那么如果我还行给x和y设置名字呢?比如用Python解应用题?

plt.xlabel() and plt.ylabe()

往括号里面填字符串就完事了嘻嘻嘻
继续堆代码:

plt.xlabel('x-axis')
plt.ylabel('y-axis')
2018-05-21-用Python画个统计图(一)_第8张图片
Figure_2-2.png

既然可以规定取值范围,那么肯定也可以规定间距【呕】
【为什么p事这么多啊拖动不就完事了】
好了抱怨完毕,继续~

plt.xticks() and plt.yticks()

使用xticks和yticks来设置间距,但是因为设置了间距了,所以就不能使用xlim来设置取值范围了噗嗤【你要设置间距肯定要先规定取值范围啊】

下面那张图的x-axis的间距是0.5,搞得我强迫症发作了,罗生门大怨起啊!
不爽就改,把前面的xlim删掉换成:

>>> new_ticks = np.linspace(-2,3,6)
#因为是不包括第一项的,所以要多写一个
>>> new_ticks
array([-2., -1.,  0.,  1.,  2.,  3.])
>>>plt.xticks(new_ticks)
([, , , , , ], )

感觉被我越改越丑了妈耶:


Figure_2-3.png

最后的最后一个项目.....
反正都已经很丑了,为什么不更丑一点呢?
把y轴上面所有的数字改成汉字得了.......

还是刚刚的这个函数,换一种形式:

>>>plt.yticks([-2,-1,0,1,2,3],[r'$really\ ugly$', r'$some\ ugly$', r'$ugly$', r'$so-so$', r'$good-looking$'])
([, , , , , ], )

警告:千万千万不要作死打中文进去,把我电脑直接给卡死了你可信?
好吧后期作者表示不是这个报错,反斜杠后面一定要加上空格!!!但是打中文进去真的真的会显示不出来
最终成品如下【我可真是个艺术鬼才】

毕加索野兽派平面直角坐标系

源代码:

>>> plt.figure()

>>> plt.plot(x, y2)
[]
>>> plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
[]
>>> plt.xlabel('x-axis')
Text(0.5,0,'x-axis')
>>> plt.ylabel('y-axis')
Text(0,0.5,'y-axis')
>>> plt.xticks(new_ticks)
([, , , , , ], )
>>> plt.yticks([-2,-1,0,1,2,3],[r'$really\ ugly$', r'$some\ ugly$', r'$ugly$', r'$so-so$', r'$good-looking$'])
([, , , , , ], )
>>> plt.show()

后记

两节课讲完基本用法,爽吧?
美不死你们,后面还有一堆饼图线形图散点图呢woc
断网真的把我杀了以后不要来问我为什么不更新了,
我也想啊

参考资料:
matplotilb官网
Matplotlib 安装
基本用法
figure 图像
设置坐标轴1

最后的最后

不更新了,没网络噗嗤
倒是老婆的壁纸还有点,自己找去qwq
很简单的啊,动动手,老婆壁纸到手

你可能感兴趣的:(2018-05-21-用Python画个统计图(一))