文章目录
基本原理:
基本原理:
在matplotlib.pyplot中
一个Figure是一个空白的画板
画板上有轴的集合(axes),集合元素包含基本的两个axis ,用来确定一个区域
理解图:
1. matplotlib编程方式举例
matplotlib编程方式有两种:
1.面向过程式编程
# 给plot起个名字叫plt
from matplotlib import pyplot as plt
x=range(2,26,2) #从2开始给跳2的给x赋值,到26结束(不包括26),返回一个迭代值
y=[15,13,14.5,17,20,25,26,26,24,22,18,15]
#figsize为每英寸的宽度和高度,其实默认的就好;因为画出图后再设置大小就没用了,所以figure()要在plot()之前
plt.figure(figsize=(20,8),dpi=80)
#plot()为画图
plt.plot(x,y)
#因为要画出图后再保存,所以savefig()要在plot()之后;使用.svg()方法保的图片不会失真
plt.savefig("./zhexiantu.png")
#自定义x轴的刻度,画出图后在定义x、y轴
plt.xticks(x)#参数为x即按所传入的数据的x值来绘制
#plt.xticks(range(2,25))#x轴坐标从2开始,每隔1绘制;xticks的参数也可以是列表
#自定义y轴的刻度
plt.yticks(range(min(y),max(y)+1))
plt.show()
————————————————
版权声明:本文为CSDN博主「codeDRT」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34405401/article/details/102904916
2.面向对象式编程
#面向对象
from matplotlib import pyplot as plt
#先创建图形大小
figure=plt.figure(
figsize=(20,8), #图形的大小
dpi=80 #图形的单位
)
#创建图像在哪个位置显示
ax=plt.Axes(
figure, #在figure画布上显示
[0.1,0.1,0.8,0.8] # #left=0.1,bottom=0.1,width=0.8,height=0.8:表示坐标图从figure左侧10%,下方10%的位置开始,坐标图的宽占整个figure宽的80%,高占整个figure高的80%。
)
#创建坐标轴对象
line=plt.Line2D(
[0.25,0.5,0.75], #x坐标
[0.5,0.8,0.5] #y坐标
)
#然后绑定到图像figure上
ax.add_artist(line)
figure.add_axes(ax)
plt.show(figure)
2.具体知识点
2.1 饼状图
例1:
%matplotlib inline
import matplotlib.pyplot as plt
fig = plt.figure(1, figsize=(4, 4))
#left=0.1,bottom=0.1,width=0.8,height=0.8:表示坐标图从figure左侧10%,下方10%的位置开始,坐标图的宽占整个figure宽的80%,高占整个figure高的80%。
ax = fig.add_axes([0.1,0.1, 0.8, 0.8])
pie = ax.pie(
x= [3 ,2, 2, 6],
#(每一块)离开中心距离
explode = [0.01, 0.01, 0.01, 0.01],
labels = ['$\dfrac{1}{100}$','$\sqrt{3}$','c','d'],
#各块的颜色,颜色表示支持十六进制,以及文档中存在的缩写或英文单词
colors = ['#ff00ff','g','gray','black'],
#控制饼图内百分比设置,可以使用format字符串或者format function,'%1.1f'指小数点前后位数(没有用空格补齐)
autopct = '份额%8.2f%%',
#labeldistance :label标记的绘制位置,相对于半径的比例,默认值为1.1, 如<1则绘制在饼图内侧;
labeldistance = 2
)
plt.show()
例2:
url:https://www.cnblogs.com/biyoulin/p/9565350.html
import matplotlib.pyplot as plt
labels = ['娱乐','育儿','饮食','房贷','交通','其它']
sizes = [2,5,12,70,2,9]
explode = (0,0,0,0.1,0,0)
plt.figure(figsize=(3,3),dpi=80)
plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=150)
plt.title("饼图示例-8月份家庭支出")
plt.show()
2.2 散点图
%matplotlib inline
import numpy as np
from matplotlib import pyplot as plt
from sklearn import datasets
#1.准备数据:特征集,标签集,此处采用鸢尾花的数据集
data,target=datasets.load_iris(return_X_y=True)
#2.绘制
#制作画布
figure=plt.figure(figsize=(20,8))
#制作图在画布哪个位置显示
#left=0.1,bottom=0.1,width=0.8,height=0.8:表示坐标图从figure左侧10%,下方10%的位置开始,坐标图的宽占整个figure宽的80%,高占整个figure高的80%。
ax=figure.add_axes([0.1,0.1,0.8,0.8],label="鸢尾花数据集")
#制作散点图
ax.scatter(x=data[:50:,0],y=data[:50:,1],marker='v')
ax.scatter(x=data[50:100:,0],y=data[50:100:,1],marker='>')
plt.show()
2.3 线图
import numpy as np
from matplotlib import pyplot as plt
from sklearn import datasets
#制作画布
figure=plt.figure(figsize=(6,4))
#制作图在画布哪个位置显示
ax=figure.add_axes([0.1,0.1,0.8,0.8],label="高斯分布函数")
x=np.linspace(-10,10,100,dtype=np.float32)
mu=0.0
sigma=1.0
y=(1.0/(np.sqrt(2*np.pi)*sigma))*(np.exp(-(x-mu)**2/(2**sigma**2)))
ax.plot(x,y,color='r')
plt.show()
2.4 两个重要的样式属性:line和marker
import numpy as np
from matplotlib import pyplot as plt
from sklearn import datasets
import random
#制作画布
figure=plt.figure(figsize=(6,4))
#制作图在画布哪个位置显示
ax=figure.add_axes([0.1,0.1,0.8,0.8],label="")
ax.set_xticks([x for x in range(-100,101,20)])
line2d=plt.Line2D(
xdata=[x for x in range(-100,101,20)],
ydata=[random.random() for x in range(-100,101,20)],
#颜色
color='y',
#line:
#线条粗度
linewidth=1,
#第一个参数是相位,后面是线条的周期性样式:实---虚---实---虚
linestyle=(0,(10,4,5,8)),
#marker:(端点)
marker='*',
#端点大小
markersize=20,
#marker边缘粗度
markeredgewidth=2,
#marker边缘颜色
markeredgecolor='r',
#marker中间颜色
markerfacecolor='b',
)
ax.add_artist(line2d)
plt.show()
2.5 标注
https://blog.csdn.net/leaf_zizi/article/details/82886755
# 加载sklearn提供的鸢尾花,可视化数据
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
# 1. 准备数据:特征集,标签集
data, target = datasets.load_iris(return_X_y=True)
# 2. 绘制
figure = plt.figure( figsize=(6, 4))
ax = figure.add_axes([0.1, 0.1, 0.8, 0.8], label='鸢尾花数据集', )
ax.annotate(
#s:注释文本的内容
#xy:被注释的坐标点,二维元组形如(x,y)
#xytext:注释/shuom文本的坐标点,也是二维元组,默认与xy相同
#arrowprops:箭头的样式,dict(字典)型数据,如果该属性非空,则会在注释文本和被注释点之间画一个箭头
s = '标注的内容',
xy = (0.9, 0.5), # 标注的目标位置
xytext = (0.1,0.1),
arrowprops = {
'width': 2,
'headwidth': 5,
'headlength': 5,
'connectionstyle': 'angle3'
}
)
# plt.legend()
plt.show()
2.6 坐标轴的大小控制
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
figure = plt.figure(figsize=(6, 4))
ax = figure.add_axes([0.1, 0.1, 0.8, 0.8], label='鸢尾花数据集', )
ax.set_xlim(10, -10)
#ax.set_xbound(lower = 5, upper= -5) #这个不带边界 5、-5
plt.show()
2.7 多坐标系
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
figure = plt.figure(figsize=(6, 4))
#(3,2,1)指的是按三行两列分布,后面的1指的是第几个
ax1 = figure.add_subplot(3,2,1, title='A')
ax2 = figure.add_subplot(3,2,2, title='B')
ax3 = figure.add_subplot(3,2,3, title='C')
ax4 = figure.add_subplot(3,2,4, title='D')
ax5 = figure.add_subplot(3,2,5, title='E')
ax6 = figure.add_subplot(3,2,6, title='F')
plt.show()
2.8 seaborn
Seaborn是在matplotlib的基础上进行了更高级的API封装
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
import tushare as ts
data = ts.get_hist_data('000001')#获得的是平安银行的数据,000001是平安银行
data = data[0:10]
ax = sns.lineplot(data.index, data['high'])
ax.set_xticklabels(labels=data.index,rotation=90)
plt.show()
ax = sns.violinplot(x=data['price_change'])
ax.grid(True)
2.9 seaborn3D可视化
%matplotlib inline
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
# 创建图
figure = plt.figure(1, figsize=(8, 6))
# 创建3D坐标系
ax3d = figure.add_axes([0.1, 0.1, 0.8, 0.8], projection='3d')
# 利用3D坐标系绘图
x , y = np.mgrid[-5:5:200j, -5:5:200j]
z = (x ** 2 - y **2) / 2
# ax3d.plot_surface(x, y, z, label="3D曲面", cmap='red')
ax3d.plot_wireframe(x, y, z, label="3D曲面", color='red')
plt.show()