Matplotilb

Matplotilb——基础图

折线图

画一个最简单的折线图

plot

 
 
 
improt matplotilb.pyplot as plt
plt.plot([1,2,3],[4,5,6])
plt.show

matplotilb中折线图是用plot来绘制

添加x。y轴坐标

xlabel | ylabel

import matplotlib.pyplot as plt
plt.plot([1,2,3],[1,4,9])
plt.reP
plt.xlabel('number')
plt.ylabel('values')
plt.show()

figure_2

x轴的number 和y轴values 就是说明数据的

添加标题

plt.title()

import matplotlib.pyplot as plt
plt.plot([1,2,3],[1,4,9])
plt.title('Demo')
plt.xlabel('number')
plt.ylabel('values')
plt.show()

figure_6

画两条or多条折线

import matplotlib.pyplot as plt

plt.plot([1,2,3],[1,4,9])
plt.plot([1,2,3],[1,2,3])
plt.xlabel('number')
plt.ylabel('values')
plt.show()

这个网上有另一种写法是一个plot

figure_3

图示

在plot中有个label属性

不管是折线图还是散点图抑或是柱状图 图标的用法都是一样的

import matplotlib.pyplot as plt

plt.plot([1,2,3],[1,4,9],label='x*x')
plt.plot([1,2,3],[1,2,3],label='x')
plt.xlabel('number')
plt.ylabel('values')
plt.legend()#这句是显示图标用的  TwT 不写会不显示的
plt.show()

figure_4

设置图示的位置

只是需要设置plt.legend()中的loc属性

right
left
upper
lower
conter 居中
best 这个是自适应? (不怎么清楚)

除了best 其他的可以相互组合 例如

import matplotlib.pyplot as plt

plt.plot([1,2,3],[1,4,9],label='x*x')
plt.plot([1,2,3],[1,2,3],label='x')
plt.xlabel('number')
plt.ylabel('values')
plt.legend(loc='upper right')
plt.show()

figure_5

设置x轴坐标值

plt.xticks() | plt.yticks() 设置y轴

这里需要设置2个参数 第一个是位置 第二个是名子TwT

import matplotlib.pyplot as plt

plt.plot([1,2,3],[1,4,9],label='x*x')
plt.plot([1,2,3],[1,2,3],label='x')
plt.title('Demo')
plt.xlabel('number')
plt.ylabel('values')
plt.xticks([1,2,3],['one','two','three'])
plt.legend(loc='upper right')
plt.show()

figure_7

设置样式(一)

颜色

plot 方法的关键字参数 color(或c) 用来设置线的颜色。可取值为

字母 颜色
r 红色
b 蓝色
y 黄色
g 绿色
c 天蓝色
m 紫色
k 黑色
w 白色
样式

以下关键字参数可以用来设置marker的样式:

字母 样式
o 圆形
v 倒三角
* 五角星
s 正方形
p 五边形
h 六边形
+ 加号
D
线性

plot 方法的关键字参数 linestyle(或ls) 用来设置线的样式。可取值为:

符号 线性
‘-’ 直线
‘--’ — —
‘-.’ -.- .-. -
‘:’ - - - -
‘’ 散点图
粗细

设置 plot 方法的关键字参数 linewidth(或lw) 可以改变线的粗细,其值为浮点数。

设置样式(二)

可以简写成'bD-'这样 不需要指定参数名 ——这代表蓝色直线

散点图

散点图和折线图很相似(应该说散点图和折线图可以互换)

例如上面的例子 改一个地方就变成了散点图

只要设置样式的时候不设线性就可以

import matplotlib.pyplot as plt

plt.plot([1,2,3],[1,4,9],'ro',ls='',label='x*x')
plt.plot([1,2,3],[1,2,3],'b*',label='x')
#这里`b-`是`color="blue",linestyle="-"`的简写形式
plt.title('Demo')
plt.xlabel('number')
plt.ylabel('values')
plt.xticks([1,2,3],['one','two','three'])
plt.legend(loc='upper left')
plt.show()

figure_8

正规散点图

scatter

import matplotlib.pyplot as plt

plt.scatter([1,2,3],[1,4,9],label='x*x')
plt.scatter([1,2,3],[1,2,3],label='x')
plt.title('Demo')
plt.xlabel('number')
plt.ylabel('values')
plt.xticks([1,2,3],['one','two','three'])
plt.legend(loc='upper left')
plt.show()

figure_9

柱形图

bar

画一个简单的柱形图

plt.bar(range(3),[1,2,3],width=0.8)
plt.show()

柱状图可以指出宽度(每一个柱状的宽度)

设置xy轴坐标

plt.bar(range(3),[1,2,3],width=0.8)
plt.rcParams['font.sans-serif']=['SimHei']#支持中文
plt.xlabel(u'电影名称')
plt.ylabel(u'人数')
plt.show()

figure_10

设置中文需要加一句
plt.rcParams['font.sans-serif']=['SimHei']

添加标题

设置title
plt.title(u'电影观看人数统计')

figure_11

修改x轴坐标值

设置xticks()

plt.bar(range(3),[1,2,3],width=0.8)
plt.rcParams['font.sans-serif']=['SimHei']
plt.title(u'电影观看人数统计')
plt.xlabel(u'电影名称')
plt.ylabel(u'人数')
plt.xticks(range(3),[u'让子弹飞',u'举起手来',u'人在囧途'])
plt.show()

figure_13

添加多个数据

import numpy as np
#计算x轴的坐标位置

total_width, n = 0.8, 2
x = np.arange(3)
width = total_width / n
x = x - (total_width - width) / 2

plt.bar(x,[1,2,3],width=width)
plt.bar(x+width,[4,5,6],width=width)
plt.rcParams['font.sans-serif']=['SimHei']
plt.title(u'电影观看人数统计')
plt.xlabel(u'电影名称')
plt.ylabel(u'人数')
plt.xticks(range(3),[u'让子弹飞',u'举起手来',u'人在囧途'])
plt.show()

figure_12

添加图示

和折线图添加图示的方法一样只不过是在bar()中 写label属性

import numpy as np
total_width, n = 0.8, 2
x = np.arange(3)
width = total_width / n
x = x - (total_width - width) / 2
plt.bar(x,[1,2,3],width=width,label=u'男生人数')
plt.bar(x+width,[4,5,6],width=width,label=u'女生人数')
plt.rcParams['font.sans-serif']=['SimHei']
plt.title(u'电影观看人数统计')
plt.xlabel(u'电影名称')
plt.ylabel(u'人数')
plt.xticks(range(3),[u'让子弹飞',u'举起手来',u'人在囧途'])
plt.legend(loc='upper left')
plt.show()

figure_15

设置颜色

color=''

值可参考:折线图--->设置样式(一)---> 颜色

plt.bar(x,[1,2,3],width=width,label=u'男生人数',color='c')
plt.bar(x+width,[4,5,6],width=width,label=u'女生人数',color='m')

figure_16

练习

折线图

import matplotlib.pyplot as plt
import numpy as np

X = np.linspace(-np.pi,np.pi,256,endpoint=True)
(C,S) = np.cos(X),np.sin(X)
#这里用到了Matplotlib和numpy模块,linspace在(−π,π)之间分成共256个小段,
#并把这256个值赋予X。C,S分别是cosine和sine值(X,C,S都是numpy数组)
fig=plt.figure(figsize=(10,6),dpi=80)
plt.plot(X,C,'b-',lw=2.5,label='cosine')
plt.plot(X,S,'r-,lw=2.5,label='sine')
#这里`b-`是`color="blue",linestyle="-"`的简写形式
#`lw`=`linewidth`,两种写法都是合理的,但是`b-`这种形式明显更加简洁,也很好理解

plt.xlim(X.min()*1.1,X.max()*1.1)
plt.ylim(C.min()*1.1,C.max()*1.1)

plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r'$-\pi$', r'$-\pi/2$',  r'$0$', r'$\pi/2$',r'$+\pi$'])
plt.yticks([-1,0,1])

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.legend(loc='best')

plt.show()

figure_21

解析

1.快速创建三角函数
%matplotlib inline 
#要在ipy notebook里直接显示Matplotlib的输出图象,需要%inline

import matplotlib.pyplot as plt
import numpy as np
X = np.linspace(-np.pi,np.pi,256,endpoint=True)
(C,S)=np.cos(X),np.sin(X)

#这里用到了Matplotlib和numpy模块,linspace在(−π,π)之间分成共256个小段,
#并把这256个值赋予X。C,S分别是cosine和sine值(X,C,S都是numpy数组)
plt.plot(X,C)
plt.plot(X,S)

2.参数修改-绘制完美的三角函数

在第一部分中我们通过Matplotlibnumpy快速创建了一个三角函数图,所采用的参数都是默认的。事实上我们可以通过相关参数(包括线型、颜色、坐标、标题、图示……)的修改使图形满足自己的需求。

2.1线宽和颜色

把cosine函数的颜色设置为蓝色,sine则是红色,而且线是不是看起来不够粗?

fig = plt.figure(figsize=(10,6),dpi=80)
plt.plot(X, C, 'b-',lw=2.5)
plt.plot(X, S, 'r-',lw=2.5)
#这里`b-`是`color="blue",linestyle="-"`的简写形式
#`lw`=`linewidth`,两种写法都是合理的,但是`b-`这种形式明显更加简洁,也很好理解
2.2调整坐标轴

仔细看上面的图,总觉得不舒服,大概是因为两条曲线“顶天立地”的原因吧,要是再多留些空间会更好?试试lim:

plt.xlim(X.min()*1.1, X.max()*1.1)
plt.ylim(C.min()*1.1, C.max()*1.1)

figure_31

2.3坐标刻度改为 3.14 更合适?

对于三角函数来说,1,2,3这些整数值没有多大意义,倒是3.14这种能让人家一看就知道:

plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi])
plt.yticks([-1,0,1])

figure_32

3.14改成不是更好吗?

plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
           [r'$-\pi$', r'$-\pi/2$',  r'$0$', r'$\pi/2$',r'$+\pi$'])

figure_33

2.4坐标轴放在中间更好看吧?

现在的坐标轴位于图象四周唉,而且X,Y的原点分散,感觉上吧坐标轴放在图象中间会更好看一点吧?

...
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)) #然后把下边界和左边界移动到0点
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

plt.plot(X, C, 'b-',lw=2.5)
plt.plot(X, S, 'r-',lw=2.5)
...

figure_34

2.5喂喂喂!我怎么知道哪条cosine?

那就加个图例吧:

...
plt.plot(X, C, 'b-',lw=2.5, label='cosine')
plt.plot(X, S, 'r-',lw=2.5, label='sine')
plt.legend(loc='upper left')
...

figure_35

2.6特殊点注释不可少

在一幅图像中,有些关键的点要是标注出来的话,重点就不言自明了吧?2/3如何?

...
t=2*np.pi/3

plt.plot([t,t],[0,np.cos(t)], color ='blue', linewidth=2.5, linestyle="--")
plt.scatter([t,],[np.cos(t),], 50, color ='blue') #画出需要标注的点

plt.annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',
         xy=(t, np.sin(t)), xycoords='data',
         xytext=(+10, +30), textcoords='offset points', fontsize=16,
         arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2")) 
#给这个点添加注释,下同

plt.plot([t,t],[0,np.sin(t)], color ='red', linewidth=2.5, linestyle="--")
plt.scatter([t,],[np.sin(t),], 50, color ='red')

plt.annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
         xy=(t, np.cos(t)), xycoords='data',
         xytext=(-90, -50), textcoords='offset points', fontsize=16,
         arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
...

figure_36

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值