好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

(3) python--matplotlib

(一)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, y, 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 ,  1 ,  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 ,  1 ,  2 ,  3 ,  4 ,  5 ],          height = [ 11 ,  22 ,  33 ,  44 ,  55 ,  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 ,  1 ,  2 ,  3 ,  4 ,  5 ],          width = [ 11 ,  22 ,  33 ,  44 ,  55 ,  66 ],          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 , color = "red" , 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, y, 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" ,  "mashiro" ,  "nagisa" ] fracs  =   [ 40 ,  30 ,  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 ,  1 , 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 ,  100 ,  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 ,  100 ,  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 ,  100 ,  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, y1, label="np.sin") plt.plot(x, y2, label="np.cos") plt.plot(x, y3, 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 ,  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 ,  1 ) end  =   datetime.date( 2017 ,  1 ,  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 ,  4 ,  0.2 ) y  =   np.arange( - 4 ,  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, y, z, 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()

 

查看更多关于(3) python--matplotlib的详细内容...

  阅读:20次