画图

这个好难,太多东西了,我学的也不是很多,了解的也有限,博大精深。只能说,持续更新吧。。。

就最常用的一些画图属性。图标的三个部分,画图区、轴和

plot()函数是常用的折线图,在使用过程中如果想画出圆滑的曲线,可能要关键点密集一些。。我分割的点就非常的细。

Matplotlib API包含有三层:

  • backend_bases.FigureCanvas : 图表的绘制领域
  • backend_bases.Renderer : 知道如何在FigureCanvas上如何绘图
  • artist.Artist : 知道如何使用Renderer在FigureCanvas上绘图

FigureCanvas和Renderer需要处理底层的绘图操作,例如使用wxPython在界面上绘图,或者使用PostScript绘制PDF。Artist则处理所有的高层结构,例如处理图表、文字和曲线等的绘制和布局。通常我们只和Artist打交道。

Artists分为简单类型和容器类型两种。简单类型的Artists为标准的绘图元件,例如Line2D、 Rectangle、Text、AxesImage 等等。而容器类型则可以包含许多简单类型的Artists,使它们组织成一个整体,例如Axis、 Axes、Figure等。

 

Figure代表一个绘制面板,其中可以包含多个Axes。即多个图表。

Axes:表示一个图表,包含titleK,xaxis,yaxis(坐标轴)。 

import matplotlib.pyplot as plt
import numpy

plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams['font.serif'] = ['KaiTi']
plt.rcParams['axes.unicode_minus'] = False
#  解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串

x = numpy.arange(0,10,0.1)
y1 = numpy.sin(x)
y2 = numpy.cos(x)
plt.plot(x, y1, color="orange", label='sin(x)', linewidth=5, linestyle='--')
plt.plot(x, y2, color="green", label='cos(x)')
plt.xlabel("X轴")
plt.ylabel('Y轴')
plt.title("三角函数")
plt.legend()
plt.yticks([-1,0,1],["最低",'0','最高'])
#要先保存再现实就可以正常了 plt.savefig("../图片/1.jpg") plt.show()

结果:

 scatter()函数是常用的画散点图的函数,画一个随机产生一些点的图片。

import matplotlib.pyplot as plt
import numpy
import random

# 散点图 随机产生点
x1 = [random.random()*10 for _ in range(100)]
y1_1 = [random.random()*10 for _ in range(100)]
plt.scatter(x1, y1_1, marker="*")
plt.xticks(rotation=90)
plt.savefig("../图片/散点图.jpg")
plt.show()

结果:

子图

对于画图,在常见的实验中,一张画布上通常有很多的图,这也就是子图的概念。

在Figure上有两种不同的创建子图的方式,一种是通过面向对象的方式或者plt.subplot()参数的方式,另一种是add_axes的方式。subplots(numRows, numCols, plotNum)。subplots将整个绘图区域等分为numRows行 * numCols列个子区域,然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域的编号为1。如果numRows,numCols和plotNum这三个数都小于10的话,可以把它们缩写为一个整数,例如subplots(323)和subplots(3,2,3)是相同的。

方法一:subplots()函数

import matplotlib.pyplot as plt
import numpy
import random

plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams['font.serif'] = ['KaiTi']
plt.rcParams['axes.unicode_minus'] = False
#  解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串

#子图
x = numpy.arange(0,100,0.1)
#使用subplots()函数返回一个画布对象和一个轴数组
fig, axe = plt.subplots(nrows=2, ncols=2, figsize=(8,6),dpi=100)
ax0, ax1,ax2,ax3 = axe.ravel()

plt.subplots_adjust(wspace =0.5, hspace =0.5)#调整子图间距

ax0.plot(x,x, color
='red') ax1.plot(x,x**2, color='orange') ax2.plot(x,x**3, color='green') ax3.plot(x,x**4, color='blue') for i in axe.ravel(): i.set_xlabel("X") i.set_ylabel("Y") i.set_title("Function") plt.show()

结果:

 

 方法二:add_subplot()函数

 

 Axes

Axes容器是整个Matplotlib库的核心,它包含了组成图表的众多Artist对象,并且有许多的方法函数帮助我们创建、修改这些对象。和Figure一样,他有一个patch属性作为背景。

当Axes表示的坐标系是笛卡尔坐标,patch表示一个Rectangle对象。

当Axes表示的是极坐标时,patch表示的是一个Circle对象。

当你调用Axes的绘图方法(例如plot),它将创建一组Line2D对象,并将所有的关键字参数传递给这些Line2D对象,并将它们添加进Axes.lines属性中,最后返回所创建的Line2D对象列表,plot返回的是一个Line2D对象的列表,因为我们可以传递多组X,Y轴的数据,一次绘制多条曲线。

下面列出Axes的创建Artist对象的方法:

 

 其中:

annotate()添加注释

bar()条形图

fill()

hist()直方图

imshow()

legend()是给图像添加图例

plot()函数创建的是一个Line2D对象

scatter()是散点图

import matplotlib.pyplot as plt
import numpy

# 折线图
x = numpy.arange(0,10,0.5)
y1 = numpy.sin(x)
y2 = numpy.cos(x)
plt.plot(x, y1, color="orange", label='sin(x)', linewidth=5, linestyle='--')
plt.plot(x, y2, color="green", label='cos(x)')
plt.plot(x,x, color='#9f0012',label="x", marker='*')
plt.xlabel("X轴")
plt.ylabel('Y轴')
plt.title("三角函数")
#loc:确定图像的位置0-10
#nol:图例的列数,现在是只有一列
#bbox_to_anchor:边界框的位置。前两个值为起始位置,第三个值为宽度,第四个值为高度,所有的值均基于归一化轴坐标系、
#mode:可设为none和expand
#borderaxespad:指定坐标轴和图例之间的间距
plt.legend(loc=1, ncol=1,bbox_to_anchor=(0.2,0.2,0,0),mode='none',borderaxespad=0.0)
plt.yticks([-1,0,1],["最低",'0','最高'])

#注释
#第一个参数,注释的内容。第二个参数,注释的坐标点。
#第三个参数设定为data,表示注释和图像使用同一个坐标轴,第四个参数,注释文本的起始位置。
#第五个参数 指定标定的符号
plt.annotate("(5,5)",(5,5), xycoords='data',xytext=(5,6), arrowprops=dict(arrowstyle='->'))

#要先保存再现实就可以正常了
plt.savefig("../图片/折线图.jpg")
plt.show()

结果:

 

 Axis

Axis容器包括坐标轴上的刻度线、刻度文字、坐标网格以及坐标轴标题等内容。刻度主要包括主刻度和副刻度,分别通过Axis.get_major_ticks和Axis.get_minor_ticks方法获得。每个刻度线都是一个XTick或者YTick对象,它包括实际的刻度线和刻度文本。为了方便访问刻度线和文本,Axis对象提供了get_ticklabels和get_ticklines方法分别直接获得刻度线和刻度文本。

 

posted @ 2019-10-19 14:48  壹碗  阅读(222)  评论(0编辑  收藏  举报