当前位置: 代码迷 >> 综合 >> day05-----matplotlib数据可视化处理
  详细解决方案

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

热度:101   发布时间:2023-09-19 10:45:53.0

文章目录

  • 基本原理:
  • 1. matplotlib编程方式举例
  • 2.具体知识点
    • 2.1 饼状图
    • 2.2 散点图
    • 2.3 线图
    • 2.4 两个重要的样式属性:line和marker
    • 2.5 标注
    • 2.6 坐标轴的大小控制
    • 2.7 多坐标系
    • 2.8 seaborn
    • 2.9 seaborn3D可视化

基本原理:

基本原理:

在matplotlib.pyplot中

一个Figure是一个空白的画板

画板上有轴的集合(axes),集合元素包含基本的两个axis ,用来确定一个区域
理解图:
day05-----matplotlib数据可视化处理

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 pltfig = 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()

day05-----matplotlib数据可视化处理
例2:
url:https://www.cnblogs.com/biyoulin/p/9565350.html

import matplotlib.pyplot as pltlabels = ['娱乐','育儿','饮食','房贷','交通','其它']
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()

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

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

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

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

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

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

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

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

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

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

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

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

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

2.8 seaborn

Seaborn是在matplotlib的基础上进行了更高级的API封装

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
import tushare as tsdata = 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()

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

ax = sns.violinplot(x=data['price_change'])ax.grid(True)

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

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

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