Python学习-[matplotlib库]-初级

创建一个二维函数图像

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

这里plot()会制作一个以前者为横轴后者为纵轴的图像,show()会展示我们做好的图像

在这里插入图片描述

figure的使用方法

第一个是展示两个图片

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3, 3, 50)
y1 = 2*x + 1
y2 = x**2

plt.figure()
plt.plot(x, y1)

plt.figure(num=5,figsize=(8,5))
plt.plot(x,y2)
plt.show()

在这里插入图片描述

如上,右边出现了两个图片,figure后面还可以接上num=5,figsize=(8,5),修改其figure的名称还有图片的尺寸。

我们也可以让一个图片中出现两个函数曲线,并且控制其样式,可以修改其颜色,宽度,还有线条的样式。

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3, 3, 50)
y1 = 2*x + 1
y2 = x**2

plt.figure()
plt.plot(x, y1)

plt.figure(num=5,figsize=(8,5))
plt.plot(x,y2)
plt.plot(x,y1,color='red',linewidth=10.0,linestyle='--')
plt.show()

在这里插入图片描述

修改坐标轴

import matplotlib.pyplot as plt
import numpy as np

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.xlim((-1,2))
plt.ylim((-2,3))
plt.show()

这里使用xlim和ylim,会限制产生图像的数据范围,当然还是可以用鼠标去拖动图片的,只是优先会显示范围内的图像。

在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

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.xlim((-1,2))
plt.ylim((-2,3))
plt.xlabel('I am x')
plt.ylabel('I am y')
plt.show()

这里我们还可以设置对x和y的描述,使用xlabel和ylabel标注,这里输出的图片是:

在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

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.xlim((-1,2))
plt.ylim((-2,3))
plt.xlabel('I am x')
plt.ylabel('I am y')

new_ticks = np.linspace(-1,2,5)
plt.xticks(new_ticks)
plt.yticks([-2,-1.8,-1,1.22,3],['redlly bad','bad','normal','good','really good'])


plt.show()

这里我们也可以对其刻度进行修改,针对于xticks和yticks,x这里相当于使用上方new_ticks的分割方式去取代,y这里则是将数据和文本一一对应,最后的输出效果如下图所示:

在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

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.xlim((-1,2))
plt.ylim((-2,3))
plt.xlabel('I am x')
plt.ylabel('I am y')

new_ticks = np.linspace(-1,2,5)
plt.xticks(new_ticks)
plt.yticks([-2,-1.8,-1,1.22,3],['redlly bad','bad','normal','good','really good'])

# gac = 'get current axis"
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',1))
plt.show()

如果我们要修改坐标轴位置,只需要对plt.gca()进行修改即可,这里的方法是先将右边和上面的边框改为透明,随后开始平移下方和左边的两条线,右边data后方的数字是坐标原点的位置。

图例

import matplotlib.pyplot as plt
import numpy as np

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

plt.figure()

plt.xlim((-1,2))
plt.ylim((-2,3))
plt.xlabel('I am x')
plt.ylabel('I am y')

new_ticks = np.linspace(-1,2,5)
plt.xticks(new_ticks)
plt.yticks([-2,-1.8,-1,1.22,3],['redlly bad','bad','normal','good','really good'])

plt.plot(x,y2,label='up')
plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--',label='down')
plt.legend()

plt.show()

这里通过在pkt.plot()括号中增加参数label来对该曲线打上一个标签,随后使用plt.legend()默认输出方法来输出这个图例,该代码具体效果如下:

在这里插入图片描述

这里可以继续修改图例:

import matplotlib.pyplot as plt
import numpy as np

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

plt.figure()

plt.xlim((-1,2))
plt.ylim((-2,3))
plt.xlabel('I am x')
plt.ylabel('I am y')

new_ticks = np.linspace(-1,2,5)
plt.xticks(new_ticks)
plt.yticks([-2,-1.8,-1,1.22,3],['redlly bad','bad','normal','good','really good'])

l1,=plt.plot(x,y2,label='up')
l2,=plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--',label='down')
plt.legend(handles=[l1,l2,],labels=['aaa','bbb'],loc='best')

plt.show()

这里plot是有返回值的,但是一定要有一个逗号(具体原因以后复习的时候在解释吧,有点懒),然后下方legend后面可以接上handles,这里就是指明要画的图像,label依然是标签,但是这里的loc改为best之后会随着改变图像自动找到数据量最小的地方来摆放这个图例。

在这里插入图片描述

注解

import matplotlib.pyplot as plt
import numpy as np

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

plt.figure(num=1,figsize=(8,5),)
plt.plot(x,y1)

ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

x0 = 1
y0 = 2*x0 + 1
plt.scatter(x0,y0)

plt.show()

这里上方的是一条直线,下方我们可以使用scatter来在图片中标注一个点,效果如下:

在这里插入图片描述

还可以修改这个点的大小和颜色,同时我们还可以做一条垂线下去,如下代码:

import matplotlib.pyplot as plt
import numpy as np

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

plt.figure(num=1,figsize=(8,5),)
plt.plot(x,y1)

ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

x0 = 1
y0 = 2*x0 + 1
plt.scatter(x0,y0,s=50,color='b')
plt.plot([x0,x0],[y0,0],'k--',lw=2.5)

plt.show()

在这里插入图片描述

(其实感觉这部分纯粹用PS做就行,python太麻烦了,跳了!)

tick能见度

比如这行代码:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 50)
y = 0.1*x

plt.figure()
plt.plot(x,y,linewidth=10)
plt.ylim(-2,2)
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

plt.show()

在这里插入图片描述

这里直线和刻度卡在一起,看起来十分别扭,把坐标轴的数据全都都挡住了,我们对代码进行如下修改:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 50)
y = 0.1*x

plt.figure()
plt.plot(x,y,linewidth=10,zorder=1)
plt.ylim(-2,2)
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

for label in ax.get_xticklabels() + ax.get_yticklabels():
    label.set_fontsize(12)
    label.set_bbox(dict(facecolor='white', edgecolor='None', alpha=0.7))

plt.show()

这里我们在plot后面增加了zorder=1,意思是设置相应的层级,,这样就可以看到了,然后下方我们可以对坐标轴进行设置,设置其尺寸类,还有字体的格式和效果,透明度等。

在这里插入图片描述

散点图

import matplotlib.pyplot as plt
import numpy as np

n = 1024
X = np.random.normal(0, 1, n)
Y = np.random.normal(0, 1, n)
T = np.arctan2(Y,X)

plt.scatter(X,Y,s=75,c=T,alpha=0.5)

plt.xlim((-1.5,1.5))
plt.ylim((-1.5,1.5))
plt.xticks(())
plt.yticks(())

plt.show()

这里np.random.normal是创建一个正态分布,后续scatter才是散点图创建,下面的xticks和yticks是隐藏刻度,效果如下:

在这里插入图片描述

也可以这样:

import matplotlib.pyplot as plt
import numpy as np

plt.scatter(np.arange(5),np.arange(5))

plt.xticks(())
plt.yticks(())

plt.show()

生成的效果是:

在这里插入图片描述

柱状图

import matplotlib.pyplot as plt
import numpy as np

n=12
X=np.arange(n)
Y1=(1-X/float(n))*np.random.uniform(0.5,1.0,n)
Y2=(1-X/float(n))*np.random.uniform(0.5,1.0,n)

plt.bar(X,+Y1)
plt.bar(X,-Y2)

plt.xlim(-5,n)
plt.xticks(())
plt.ylim(-1.25,1.25)
plt.yticks(())

plt.show()

使用bar创建相应的柱状图,对应的取值分别是均匀产出的X和使用均匀分布生成的Y1,Y2。

在这里插入图片描述

要进一步自定义颜色和打上相关标签

import matplotlib.pyplot as plt
import numpy as np

n=12
X=np.arange(n)
Y1=(1-X/float(n))*np.random.uniform(0.5,1.0,n)
Y2=(1-X/float(n))*np.random.uniform(0.5,1.0,n)

plt.bar(X,+Y1,facecolor='#9999ff',edgecolor='white')
plt.bar(X,-Y2,facecolor='#ff9999',edgecolor='white')

plt.xlim(-5,n)
plt.xticks(())
plt.ylim(-1.25,1.25)
plt.yticks(())

plt.show()

这里再bar后方增加了facecolor和edgecolor,最后产出的效果为:

在这里插入图片描述

还可以在图像上打上对应的标签和数据:

import matplotlib.pyplot as plt
import numpy as np

n=12
X=np.arange(n)
Y1=(1-X/float(n))*np.random.uniform(0.5,1.0,n)
Y2=(1-X/float(n))*np.random.uniform(0.5,1.0,n)

plt.bar(X,+Y1,facecolor='#9999ff',edgecolor='white')
plt.bar(X,-Y2,facecolor='#ff9999',edgecolor='white')

for x,y in zip(X,Y1):
    plt.text(x,y+0.05,'%.2f'%y,ha='center',va='center')

for x,y in zip(X,Y2):
    plt.text(x,-y-0.05,'-%.2f'%y,ha='center',va='center')

plt.xlim(-5,n)
plt.xticks(())
plt.ylim(-1.25,1.25)
plt.yticks(())

plt.show()

在这里插入图片描述
(暂时到此为止了,需要的时候再学吧)

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值