加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

(3) python--matplotlib

发布时间:2020-12-20 10:54:06 所属栏目:Python 来源:网络整理
导读:(一)1.如何绘制散点图 1 2 3 4 5 6 7 8 9 10 11 12 import ? numpy as np import ? matplotlib.pyplot as plt ? # 如何绘制散点图 # 先随机生成数据 x? = ? np.array( range ( 100 )) y? = ? np.sin(x) ? # 直接输入x和y便可绘制相应的散点图 plt.scatter(x,

(一)1.如何绘制散点图

1
2
3
4
5
6
7
8
9
10
11
12
import? numpy as np
import? matplotlib.pyplot as plt
?
# 如何绘制散点图
# 先随机生成数据
x? =? np.array( range ( 100 ))
y? =? np.sin(x)
?
# 直接输入x和y便可绘制相应的散点图
plt.scatter(x,y)
# 不要忘了这句话,表示让图像显示
plt.show()

  

可以看到类似于正弦曲线一样的点

?

(一)2.如何给散点图加上样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import? numpy as np
import? matplotlib.pyplot as plt
?
x? =? np.array( range ( 0 ,? 100 ,? 5 ))
y? =? 3? *? x? +? 2
?
# scatter里面的参数有很多,不过我们主要使用四种
# 1:s,表示点的面积,注意是面积。
# 2:c,颜色,不指定默认为蓝色
# 3:marker:点的形状,不指定默认为点
# 4:alpha:透明度,不指定默认为1,表示透明度为0
plt.scatter(x,y,s = 100 ,c = "green" ,marker = "<" ,alpha = 0.1 )
?
plt.show()

  

?

(二)1.如何绘制折线图

1
2
3
4
5
6
7
8
9
import? numpy as np
import? matplotlib.pyplot as plt
?
x? =? np.linspace( - 1 ,? 1 ,? 100 )
y? =? x? * *? 2
?
plt.plot(x,y)
# 此外还有一个plt.plot_date()函数,专门用来绘制有一个轴是日期格式的数据
plt.show()

  

?

?

(二)2.如何给折线图加上样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import? numpy as np
import? matplotlib.pyplot as plt
?
x? =? np.linspace( - 10 ,? 10 ,? 20 )
y? =? x? * *? 2
z? =? x? *? 2? +? 1
?
# 关于样式的参数有很多
# linestyle:表示线段的样式
# color:表示颜色
# marker:表示点的样式
plt.plot(x,linestyle = "-" ,color = "green" ,marker = "o" )
plt.plot(x,z,linestyle = "--" ,color = "red" ,marker = "<" )
?
plt.show()

  

?

(三)1.如何绘制条形图

1
2
3
4
5
6
7
8
9
10
11
import? numpy as np
import? matplotlib.pyplot as plt
?
# 还记得每一个图对应的每一个函数吗?
# 散点图:scatter
# 折线图:plot
# 条形图:bar
?
# 这个函数可以只接收两个参数,分别是条形图中每一条的索引和高度
plt.bar(x = [ 0 ,? 2 ,? 3 ,? 4 ,? 5 ],height = [ 11 ,? 22 ,? 33 ,? 44 ,? 55 ,? 66 ])
plt.show()

  

(三)2.如何给条形图加上样式

1
2
3
4
5
6
7
8
9
10
import? matplotlib.pyplot as plt
?
# color:颜色
# width:线条宽度
plt.bar(x = [ 0 ,
???????? height = [ 11 ,? 66 ],
???????? color = "green" ,
???????? width = 0.2 )
?
plt.show()

  

(三)3.如何绘制横向的条形图

1
2
3
4
5
6
7
8
9
10
11
12
import? matplotlib.pyplot as plt
?
# 如果绘制横向的条形图
# 那么bottom相当于之前的x,width相当于之前的height
plt.bar(x = 0 ,
???????? bottom = [ 0 ,
???????? width = [ 11 ,
???????? color = "green" ,
???????? height = 0.2 ,
???????? orientation = "horizontal" )
# 还有一个plt.barh(),表示花水平的条形图,不用显示的指定orientation="horizontal",但其他的参数还是要有的
plt.show()

  

(四)1.如何绘制直方图

1
2
3
4
5
6
7
8
9
10
11
12
import? numpy as np
import? matplotlib.pyplot as plt
?
mu? =? 100
sigma? =? 20
x? =? mu? +? sigma? *? np.random.randn( 2000 )
?
# 设置直方图
# bins:表示要分成多少个区间
# normed:表示是否进行标准化,标准化之后,那么纵坐标不在是个数,而是频率。
plt.hist(x,bins = 30 ,density = True )
plt.show()

  

?

?(四)2.如何绘制双变量直方图

1
2
3
4
5
6
7
8
9
10
import? numpy as np
import? matplotlib.pyplot as plt
?
x? =? np.random.randn( 1000 ) + 2
y? =? np.random.randn( 1000 ) + 3
?
?
plt.hist2d(x,bins = 40 )
?
plt.show()

  

?

(五)1.如何绘制饼图

1
2
3
4
5
6
7
8
9
10
import? matplotlib.pyplot as plt
?
labels? =? [ "satori" ,? "mashiro" ,? "nagisa" ]
fracs? =? [ 40 ,? 30 ,? 30 ]
?
# 最重要的两个参数
# x:所占的份额
# labels:对应的标签
plt.pie(x = fracs,labels = labels)
plt.show()

  

细心地哲学♂家可能回好奇,为什么是一个椭圆,这是因为我们这里少了一句话

而且每一块上面光秃秃的,每个部分都贴在了一块,也不好看,我们也可以设置一些参数,让其变得好看一些

1
2
3
4
5
6
7
8
9
10
import? matplotlib.pyplot as plt
?
labels? =? [ "satori" ,? 30 ]
?
# 加上这句话表示x和y轴的比例是一比一
# 因此图形就变成了圆形
plt.axes(aspect = 1 )
# autopct:表示每一块的比例
# explode:突出显示,每个部分不会贴在一块<br><br># shadow:表示加上一层阴影,指定为True即可
1
plt.pie(x = fracs,labels = labels,autopct = "%.0f%%" ,explode = [ 0.01 ,? 0.02 ,? 0 ]) plt.show()

  

?

?

?

?

?

?(六)1.如何绘制箱形图

1
2
3
4
5
6
7
8
9
10
import? matplotlib.pyplot as plt
import? numpy as np
?
np.random.seed( 100 )
data? =? np.random.normal( 0 ,size = 1000 )
?
# sym:形状,表示异常值的形状
# whis:表示虚线的长度,可以控制异常值显示的多少,越大虚线越长
plt.boxplot(data,sym = "<" ,whis = 1.5 )
plt.show()

  

?

?

(七)颜色和样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
蓝色? -? ‘b‘
?
绿色? -? ‘g‘
?
红色? -? ‘r‘
?
青色? -? ‘c‘
?
品红? -? ‘m‘
?
黄色? -? ‘y‘
?
黑色? -? ‘k‘?
?
白色? -? ‘w‘

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
‘.‘??????? point marker
‘,‘??????? pixel marker
‘o‘??????? circle marker
‘v‘??????? triangle_down marker
‘^‘??????? triangle_up marker
‘<‘??????? triangle_left marker
‘>‘??????? triangle_right marker
‘1‘??????? tri_down marker
‘2‘??????? tri_up marker
‘3‘??????? tri_left marker
‘4‘??????? tri_right marker
‘s‘??????? square marker
‘p‘??????? pentagon marker
‘*‘??????? star marker
‘h‘??????? hexagon1 marker
‘H‘??????? hexagon2 marker
‘+‘??????? plus marker
‘x‘??????? x marker
‘D‘??????? diamond marker
‘d‘??????? thin_diamond marker
‘|‘??????? vline marker
‘_‘??????? hline marker

  

1
2
3
4
‘-‘? solid line style
‘--‘? dashed line style
‘-.‘? dash - dot line style
‘:‘? dotted line style

  输入样式的时候还有一个简便的方法,cx--,c是青色,x是点的样式,--是线的样式

?

(八)1.如何绘制子图

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
import? numpy as np
import? matplotlib.pyplot as plt
?
x? =? np.arange( 0 ,? 5 )
?
# 生成一个画布
fig? =? plt.figure()
?
# 往画布上添加对象
# 这里的221表示,生成一个2X2的画布,并处于第一个位置
s1? =? fig.add_subplot( 221 )
s2? =? fig.add_subplot( 222 )
s3? =? fig.add_subplot( 223 )
s4? =? fig.add_subplot( 224 )
y1? =? np.exp(x)
y2? =? np.sin(x)
y3? =? np.cos(x)
y4? =? x? * *? 2
?
s1.plot(x,y1,? "cx--" )
s2.plot(x,y2,? "bo-." )
s3.plot(x,y3,? "g<--" )
s4.plot(x,y4,? "y>-." )
?
# 最后显示要用fig,因为它是我们创建出来的画布,必须要让它显示
fig.show()

  

?

(八)2.如何绘制子图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import? numpy as np
import? matplotlib.pyplot as plt
?
x? =? np.arange( 0 ,? 5 )
?
plt.subplot( 221 )
plt.plot(x,np.exp(x))
plt.subplot( 222 )
plt.plot(x,np.sin(x))
plt.subplot( 223 )
plt.plot(x,np.cos(x))
plt.subplot( 224 )
plt.plot(x,x * * 2 )
?
plt.show()

  

?

(九)如何绘制网格

1
2
3
4
5
6
7
8
9
10
import? numpy as np
import? matplotlib.pyplot as plt
?
x? =? np.arange( 0 ,? 5 )
?
# 绘制出格子
plt.grid(x,color = "green" )
# 绘制线段
plt.plot(x,x,? "cx--" )
plt.show()

  

?

(十)如何给图像带上标记

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1,1,100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)

# 加上需要的标签label
plt.plot(x,label="np.sin")
plt.plot(x,label="np.cos")
plt.plot(x,label="np.tan")

# 必须加上这句话,否则标签不显示
# legend里面还有一个location参数,可以指定位置
# 以及ncol可以指定要标签分几列显示

plt.legend()

plt.show()

  

?

?

?

?(十一)调整坐标轴范围

1
2
3
4
5
6
7
8
9
10
import? numpy as np
import? matplotlib.pyplot as plt
?
x? =? np.arange( - 100 ,? 100 )
y? =? 3? *? x? +? 1
?
plt.plot(x,y)
# 表示x轴从-10到10,y轴-100到100<br># 也可以通过plt.xlim([,])和plt.ylim([,])只调x轴或y轴<br># 如果只想调整一边的话,就直接指定最大或者最小,xlim(xmin=,xmax=),ylim(ymin=,ymax=)
plt.axis([ - 10 ,? - 100 ,? 100 ])
plt.show()

  

?

(十二)调整坐标轴刻度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import? numpy as np
import? matplotlib.pyplot as plt
?
x? =? np.arange( 1 ,? 10 )
?
plt.plot(x,x)
?
# 获取坐标轴属性,get current axis
ax? =? plt.gca()
# nbins表示有多少间隔,可以看到分成了20份
ax.locator_params(nbins = 20 )
# 如果我只想调整某一个轴的话
# 指定ax.locator_params("x",nbins=20)
?
plt.show()

  

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import? numpy as np
import? matplotlib.pyplot as plt
import? matplotlib as mpl
import? datetime
?
start? =? datetime.date( 2016 ,? 1 )
end? =? datetime.date( 2017 ,? 1 )
timedelta? =? datetime.timedelta(days = 1 )
?
date? =? mpl.dates.drange(start,end,timedelta)
y? =? np.random.rand( len (date))
?
ax? =? plt.gca()
plt.plot_date(date,y)
?
# 设置时间格式
date_format? =? mpl.dates.DateFormatter( "%Y-%m-%d" )
?
# 将格式应用到x轴上
ax.xaxis.set_major_formatter(date_format)
?
plt.show()

  

?

(十三)如何添加坐标轴

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import? numpy as np
import? matplotlib.pyplot as plt
?
x? =? np.arange( 2 ,? 20 ,? 1 )
?
y1? =? x
y2? =? np.log(x)
?
fig? =? plt.figure()
?
ax1? =? fig.add_subplot( 111 )
?
ax1.plot(x,y1)
ax1.set_ylabel( "mashiro" )
?
# 表示生成一个双胞胎y轴,twinx,表示生成一个y轴
ax2? =? ax1.twinx()
?
ax2.plot(x,y2)
ax2.set_ylabel( "satori" )
?
fig.show()

  

?

?

(十四)添加注释

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import? numpy as np
import? matplotlib.pyplot as plt
?
x? =? np.arange( - 10 ,? 11 )
?
y? =? x? * *? 2
?
plt.plot(x,y)
?
?
plt.annotate( "my name is satori" ,
????????????? xy = ( 0 ,? 5 ),?? # 箭头坐标
????????????? xytext = ( 0 ,? 20 ),?? # 文本坐标
????????????? arrowprops = { "facecolor" :? "r" ,?? # 颜色
????????????????????????? "headlength" :? 10 ,?? # 箭头的长度
????????????????????????? "headwidth" :? 30 ,?? # 箭头的头的宽度
????????????????????????? "width" :? 20?? # 箭头的身体的宽度
????????????????????????? }
????????????? )
?
plt.show()

  

(十五)如何绘制3D图形

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import? matplotlib.pyplot as plt
import? numpy as np
from? mpl_toolkits.mplot3d? import? Axes3D as A3
?
fig? =? plt.figure()
ax? =? A3(fig)
x? =? np.arange( - 4 ,? 0.2 )
y? =? np.arange( - 4 ,? 0.2 )
x,y? =? np.meshgrid(x,y)
z? =? np.power(x,? 2 )? +? np.power(y,? 2 )
plt.title( "satori" )
?
# rstride,cstride表示行列每隔多少个点建一个面,cmap表示颜色
ax.plot_surface(x,rstride = 1 ,
???????????????? cstride = 1 ,
???????????????? cmap = plt.cm.CMRmap,
???????????????? alpha = 0.4 )
ax.set_xlabel( ‘x_label‘ ,color = ‘r‘ )
ax.set_ylabel( ‘y_label‘ ,color = ‘g‘ )
ax.set_zlabel( ‘z_label‘ ,color = ‘b‘ )
?
plt.show()

?

  

?

如何解决中文乱码问题

1
2
3
4
import? matplotlib.pyplot as plt
?
plt.rcParams[ ‘font.sans-serif‘ ]? =? [ ‘SimHei‘ ]? # 步骤一(替换sans-serif字体)
plt.rcParams[ ‘axes.unicode_minus‘ ]? =? False??? # 步骤二(解决坐标轴负数的负号显示问题)

  

?解决子图重合问题

plt.tight_layout()

?

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import? numpy as np
import? matplotlib.pyplot as plt
?
x? =? np.arange( 1 ,? 100 )
y? =? 2? *? x
?
plt.plot(x,y)
# 调整x,y轴的取值范围
plt.xlim( 10 ,? 30 )
plt.ylim( 20 ,? 60 )
?
# 调整x或y轴的间隔
ax? =? plt.gca()
ax.locator_params( "x" ,nbins = 40 )
?
# 调整x或y轴坐标的倾斜程度
plt.xticks(rotation = 60 )
plt.show()

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读