如何用python绘制各种图形

Python016

如何用python绘制各种图形,第1张

1.环境

系统:windows10

python版本:python3.6.1

使用的库:matplotlib,numpy

2.numpy库产生随机数几种方法

import numpy as np

numpy.random

rand(d0, d1, ..., dn)  

In [2]: x=np.random.rand(2,5)

In [3]: x

Out[3]:

array([[ 0.84286554,  0.50007593,  0.66500549,  0.97387807,  0.03993009],

[ 0.46391661,  0.50717355,  0.21527461,  0.92692517,  0.2567891 ]])

randn(d0, d1, ..., dn)查询结果为标准正态分布

In [4]: x=np.random.randn(2,5)

In [5]: x

Out[5]:

array([[-0.77195196,  0.26651203, -0.35045793, -0.0210377 ,  0.89749635],

[-0.20229338,  1.44852833, -0.10858996, -1.65034606, -0.39793635]])

randint(low,high,size)  

生成low到high之间(半开区间 [low, high)),size个数据

In [6]: x=np.random.randint(1,8,4)

In [7]: x

Out[7]: array([4, 4, 2, 7])

random_integers(low,high,size)  

生成low到high之间(闭区间 [low, high)),size个数据

In [10]: x=np.random.random_integers(2,10,5)

In [11]: x

Out[11]: array([7, 4, 5, 4, 2])

3.散点图

x x轴

y y轴

s   圆点面积

c   颜色

marker  圆点形状

alpha   圆点透明度                #其他图也类似这种配置

N=50# height=np.random.randint(150,180,20)# weight=np.random.randint(80,150,20)

x=np.random.randn(N)

y=np.random.randn(N)

plt.scatter(x,y,s=50,c='r',marker='o',alpha=0.5)

plt.show()

4.折线图

x=np.linspace(-10000,10000,100) #将-10到10等区间分成100份

y=x**2+x**3+x**7

plt.plot(x,y)

plt.show()

折线图使用plot函数

5.条形图

N=5

y=[20,10,30,25,15]

y1=np.random.randint(10,50,5)

x=np.random.randint(10,1000,N)

index=np.arange(N)

plt.bar(left=index,height=y,color='red',width=0.3)

plt.bar(left=index+0.3,height=y1,color='black',width=0.3)

plt.show()

orientation设置横向条形图

N=5

y=[20,10,30,25,15]

y1=np.random.randint(10,50,5)

x=np.random.randint(10,1000,N)

index=np.arange(N)# plt.bar(left=index,height=y,color='red',width=0.3)# plt.bar(left=index+0.3,height=y1,color='black',width=0.3)#plt.barh() 加了h就是横向的条形图,不用设置orientation

plt.bar(left=0,bottom=index,width=y,color='red',height=0.5,orientation='horizontal')

plt.show()

6.直方图

m1=100

sigma=20

x=m1+sigma*np.random.randn(2000)

plt.hist(x,bins=50,color="green",normed=True)

plt.show()

# #双变量的直方图# #颜色越深频率越高# #研究双变量的联合分布

#双变量的直方图#颜色越深频率越高#研究双变量的联合分布

x=np.random.rand(1000)+2

y=np.random.rand(1000)+3

plt.hist2d(x,y,bins=40)

plt.show()

7.饼状图

#设置x,y轴比例为1:1,从而达到一个正的圆

#labels标签参数,x是对应的数据列表,autopct显示每一个区域占的比例,explode突出显示某一块,shadow阴影

labes=['A','B','C','D']

fracs=[15,30,45,10]

explode=[0,0.1,0.05,0]#设置x,y轴比例为1:1,从而达到一个正的圆

plt.axes(aspect=1)#labels标签参数,x是对应的数据列表,autopct显示每一个区域占的比例,explode突出显示某一块,shadow阴影

plt.pie(x=fracs,labels=labes,autopct="%.0f%%",explode=explode,shadow=True)

plt.show()

8.箱型图

import matplotlib.pyplot as pltimport numpy as npdata=np.random.normal(loc=0,scale=1,size=1000)#sym 点的形状,whis虚线的长度plt.boxplot(data,sym="o",whis=1.5)plt.show()

#sym 点的形状,whis虚线的长度

官网下载Python3,LZ的配置环境是Python3.6,PyCharm 2017.2.1

File->Settings->Tools->External Tools,点击+好配置好即可,LZ已经配置好了,刚开始是没有的

Program里面填designer.exe的位置,Working directory里面点击右面的Insert按钮,插入和图片一样的值即可

Program里面填python.exe的安装目录,Parameters里面填如下内容

Working directory点击右面Insert按钮插入相同内容即可

兴建一个项目,右键点击项目->External Tools->QtDesigner,弹出QtDesigner的图形界面如下,LZ拖入了2个按钮

这时你会发现多了一个untiled.ui文件,文件名LZ用的是默认的,右键点击这个ui文件->External Tools->PyUIC,这时文件夹下多了一个untitled.py文件,打开untitled.py,加入以下内容Ctrl+Shift+F10运行即可

untitled.py

运行结果

LZ用的是pyinstaller,pyinstaller不支持Python3.6,无奈又下载了一个Python3.5的环境,运行和打包在Python3.5下,工具用的是Python3.6下的,也不影响已经配置好的工具的使用,命令行中输入一下即可

在命令行中进入要打包的py文件所在的目录,输入一下命令

然后到py文件所在目录的dist文件中,打开exe,结果一闪而退,原来是找不到外部的动态链接库,输入一下命令,指明外部链接库

-F的效果是打包成一个单文件,-w的效果是取消控制台。

这个是我开发的,将doc文件批量转为docx的小工具,源码放在github上,大家可以参考

https://github.com/erlieStar/doc2docx

欢迎star

一、认识绘图区

在绘制图形之前,我们首先要了解的就是图表的组成部分,以及各组成部分如何用代码来更改。这也是我们用 Python 绘制图表的基础。

1、建立画布:figure

画布的作用相当于我们绘图过程中用到的画板,有了画板,我们才能将纸固定下来:

# 导入 matplotlib 库

import matplotlib.pyplot as plt

# 建立一个画布,画布大小为(8,6)

plt.figure(figsize=(8, 6))

plt.show()

登录后复制

输出结果:

2、建立绘图区:subplot

建立绘图区就是创建坐标系,用来绘制图形,相当于铺在画布上的纸。

# 创建坐标系(用于绘制图形)

axes = plt.subplot()

登录后复制

输出结果:

Ps:当然,在绘制简单图形时。我们也可以用下面这种方式建立坐标系,也可以达到同样的效果:

# 导入 matplotlib 库

import matplotlib.pyplot as plt

# 建立一个画布,画布大小为(8,6)

plt.figure(figsize=(8, 6))

# 创建坐标系(用于绘制图形)

plt.plot()

plt.show()

登录后复制

但本小白觉得这种绘制单个图形还可以,在一个画布上绘制多个图形时还是要用到 subplot 函数,且更改坐标轴的样式时不太方便,下面将会为大家介绍。

二、更改绘图区参数

1、X、Y轴刻度 tick_params

import matplotlib.pyplot as plt

plt.figure(figsize=(8, 6))

axes = plt.subplot()

# 更改轴上刻度

# axis:代表坐标轴(默认="both")

# both:x,y轴同时更改;axis="x"只更改x轴

# direction="in"代表刻度向里,"out"向外

# bottom,top,right,left:刻度线

# labelbottom, labeltop, labelleft, labelright:刻度线下文字

axes.tick_params(axis="both", direction="in", bottom=False,labelbottom=False)

plt.show()

登录后复制

更多 tick_params 参数

2、边框线 spines

# 图表边框线的修改

# top、bottom、left、right

axes.spines["top"].set_visible(False)

axes.spines["right"].set_visible(False)

axes.spines["bottom"].set_visible(False)

登录后复制

注:前面我们说到用 axes=plt.subplot() 创建绘图区,就是为了能够用 axes.spines... 这段代码,利用 plt.plot() 没有这样方便,而且还利于在一个画布中创建多个坐标轴。

3、实例

# 绘制正、余弦函数

import numpy as np

import matplotlib.pyplot as plt

# 创建画布

plt.figure(figsize=(8, 6))

# 建立坐标系

axes = plt.subplot()

axes.spines["top"].set_visible(False)

axes.spines["right"].set_visible(False)

x = np.linspace(0, 2*np.pi)

y1 = np.sin(x)

y2 = np.cos(x)

axes.plot(x, y1, x, y2)

plt.show()

登录后复制

到此,我们就能够随意更改坐标轴的样式,来创建有特色的图形了。

三、创建子图: subplot函数

通常我们需要在一个画布中绘制多个图形,这样我们就需要用到 subplot函数:

subplot ( nrows, ncols, plot_number )

nrows:子图的行数

ncols:子图的列数

plot_number:子图放的位置

subplot(2,2,1)

# 将画布分为2x2四个区域,并在第一个位置绘图

登录后复制

也可以写成下面的形式,输出结果一样