day05-----matplotlib数据可视化处理

基本原理:

基本原理:

在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()

在这里插入图片描述

发布了105 篇原创文章 · 获赞 8 · 访问量 4730

猜你喜欢

转载自blog.csdn.net/qq_34405401/article/details/104553015
今日推荐