Matplotlib数据分析可视化基础

编程入门 行业动态 更新时间:2024-10-14 10:40:01

Matplotlib数据分析可视化<a href=https://www.elefans.com/category/jswz/34/1770030.html style=基础"/>

Matplotlib数据分析可视化基础

 

使用matplotlib时,使用的导入惯例为:

import matplotlib.pyplot as plt

相关函数的介绍

一、创建画布与子画布

1、创建空白画布与子画布

plt.figure()

add_subplot

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# data = np.arange(10)
# print(data)
# plt.plot(data)
# plt.show()
#创建一个空白画布
fig = plt.figure()
#创建子画布,2行2列和编号为1的子画布
a1 = fig.add_subplot(2,2,1)
a2 = fig.add_subplot(2,2,2)
a3 = fig.add_subplot(2,2,3)
plt.show()

2、在子画布上绘制

#创建一个空白画布
fig = plt.figure()
#创建子画布,2行2列和编号为1的子画布
a1 = fig.add_subplot(2,2,1)
a2 = fig.add_subplot(2,2,2)
a3 = fig.add_subplot(2,2,3)
a1.plot([1.5,2,3.5,-1,1.7])
a2.plot([1.5,6,3.5,-2,5])
plt.show()

输出结果:

3、添加画布内容

data = np.arange(0,1,0.01)
plt.title('my school')
#设置x,y轴的文本说明
plt.xlabel('X')
plt.ylabel('Y')
#设置x,y轴的范围
plt.xlim(0,1)
plt.ylim(0,1)
#设置X,Y轴的刻度
plt.xticks([0,0.2,0.4,0.6,0.8,1])
plt.yticks([0,0.2,0.4,0.6,0.8,1])
#绘制
plt.plot(data,data**2)
plt.plot(data,data**3)
#图例 写在plot绘图的下面
plt.legend(['y=x^2','y=x^3'])
#显示
plt.show()

输出结果:

4,在一张画布上添加两个子画布

#空白画布,画布大小9*7英寸,分辨率是90
fig1 = plt.figure(figsize=(9,7),dpi = 90)
#添加一张子画布 (1行2列,编号为1)
ax1 = fig1.add_subplot(1,2,1)
data = np.arange(0,1,0.01)
plt.title('my first plot')
#设置x,y轴的文本说明
plt.xlabel('X')
plt.ylabel('Y')
#设置x,y轴的范围
plt.xlim(0,1)
plt.ylim(0,1)
#设置X,Y轴的刻度
plt.xticks([0,0.2,0.4,0.6,0.8,1])
plt.yticks([0,0.2,0.4,0.6,0.8,1])
#绘制
plt.plot(data,data**2)
plt.plot(data,data**3)
#图例 写在plot绘图的下面
plt.legend(['y=x^2','y=x^3'])
#添加第二张子画布
data = np.arange(0,np.pi*2,0.01)
ax2 = fig1.add_subplot(1,2,2)
plt.title('sin-cos')
#设置x,y轴的文本说明
plt.xlabel('X')
plt.ylabel('Y')
#设置x,y轴的范围
plt.xlim(0,np.pi*2)
plt.ylim(-1,1)
#设置x,y轴的刻度
plt.xticks([0,np.pi/2,np.pi,np.pi*3/2,np.pi*2])
plt.yticks([-1,-0.5,0,0.5,1])
#绘图
plt.plot(data,np.sin(data))
plt.plot(data,np.cos(data))
#加图例
plt.legend(['sin','cos'])
#显示
plt.show()

输出结果:

5、图例的位置及样式

#用来显示中文标签
plt.rcParams['font.family']=['SimHei']
#用来正常显示正负号
plt.rcParams['axes.unicode_minus'] = False
def f(t):return np.cos(2*np.pi*t)
x1 = np.arange(0.0,4.0,0.5)
x2 = np.arange(0.0,4.0,0.01)
#创建一个新画布
plt.figure()
#子画布
plt.subplot(2,2,1)
#绘图
plt.plot(x1,f(x1),'r^',x2,f(x2))
#标题
plt.title('子图1')
#第二张子图
plt.subplot(2,2,2)
#红色的--绘制
plt.plot(np.cos(2*np.pi*x2),'r--')
#标准
plt.title('子图2')
plt.show()

输出结果:

颜色的缩写:

b blue 蓝色

g green 绿色

r red 红色

c cyan 蓝绿

m magenta洋红

y yellow 黄色

k black 黑色

w white 白色

6、rc参数的设置2

#空白画布
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
#marker='o' 圆圈,+  加号  v 角朝下的三角形
ax.plot(np.random.randn(30).cumsum(),linestyle='dashed', color='r',marker='o',label='one')
ax.plot(np.random.randn(30).cumsum(),linestyle='dashed',color='b',marker='+',label='two')
ax.plot(np.random.randn(30).cumsum(),linestyle='dashed',color='k',marker='v',label='three')
ax.legend(loc='best')
plt.show()

输出结果:

7,用set_xticks设置x轴刻度

#空白画布
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
#marker='o' 圆圈,+  加号  v 角朝下的三角形
ax.plot(np.random.randn(30).cumsum(),linestyle='dashed', color='r',marker='o',label='one')
ax.plot(np.random.randn(30).cumsum(),linestyle='dashed',color='b',marker='+',label='two')
ax.plot(np.random.randn(30).cumsum(),linestyle='dashed',color='k',marker='v',label='three')
ax.legend(loc='best')
#增加刻度
ax.set_xticks([0,5,10,15,20,25,30,35,40])
plt.show()

输出结果:

8、改变X轴的刻度标签set_xticklabels

rotation参数表示X坐标标签的旋转角度

fontsize 字号可以取值'xx-small','x-small','small','medium','large','x-large','xx-large','larger','smaller'

#改变刻度
ax.set_xticklabels(['x0','x1','x2','x3','x4','x5','x6'],rotation=30,fontsize='large')

二、绘图的填充

fill_between(x,0,y,facecolor='green',alpha=0.3)

x表示整个X轴都覆盖

0表示填充的下限,

y表示填充的上限

facecolor表示覆盖区域的颜色

alpha表示透明度【0-1】,值越大,越不透明

x = np.linspace(0,1,500)
y = np.sin(3*np.pi*x)*np.exp(-4*x)
ax = plt.subplots()
plt.plot(x,y)
plt.fill_between(x,0,y,facecolor='green',alpha=0.3)
plt.show()

输出结果:

2、部分区域的填充

plt.fill_between(x[15:300],0,0.4,facecolor='green',alpha=0.3)

3、两条曲线中间进行填充

x = np.linspace(0,1,500)
y1 = np.sin(3*np.pi*x)*np.exp(-4*x)
y2 = y1+0.3
plt.plot(x,y1,'b')
plt.plot(x,y2,'r')
plt.fill_between(x,y1,y2,facecolor='yellow',alpha=0.3)
plt.show()

输出结果:

4、利用fill进行绘图的填充


x = np.linspace(0,1,500)
y = np.sin(3*np.pi*x)*np.exp(-4*x)
ax = plt.subplots()
#没有绘制plot ,直接填充
plt.fill(x,y)
plt.show()

5、在绘图中显示公式

#x轴区间1-8
plt.xlim([1,8])
#y轴区间1-3
plt.ylim([1,3])
plt.text(2,2,r'$\alpha \beta \pi \lambda \omega $',size=15)
plt.text(4,2,r'$\sqrt[4]{x} = \sqrt{y} $',size = 18)
plt.show()

输出结果:

6、文本注释

绘图时有时需要在图表中加文本注解

这时可以通过text函数在指定的位置(x,y)加入文本注解;

通过annotate()在指定位置实现指向型注释。

1 指向型注释annotate()

2. 无指向型注释text()

plt.rcParams['font.family'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x=np.arange(-10,11,1)
y=x*x
plt.plot(x,y)
plt.title('这是一个标题示例')
#注释 在坐标(-2.5,30)上,输出‘funciton y=x*x’
plt.text(-2.5,30,'funciton y=x*x')
plt.show()

三、pyplot中的常用绘图

1、折线图

x = np.arange(9)
y = np.sin(x)
z = np.cos(x)
plt.plot(x,y,marker='*',linewidth=1,linestyle='--',color='orange')
plt.plot(x,z,marker='o')
plt.title('my matplotlib')
plt.xlabel('height',fontsize=15)
plt.ylabel('width',fontsize=15)
plt.legend(['Y','Z'],loc='upper right')
plt.grid(True)
plt.show()

输出结果:

2、散点图

ax = plt.subplots()#创建一个新画布
x1 = np.arange(1,30)
y1 = np.sin(x1)
ax1 = plt.subplot(1,1,1)
plt.title('散点图')
plt.xlabel('X')
plt.ylabel('Y')
v = x1
ax1.scatter(x1,y1,c='r',s = 100,linewidths=v,marker='o')
plt.legend('x1',loc='lower left')
plt.show()

输出结果:

散点图2

for color in ['red','green','blue']:n = 500x,y = np.random.randn(2,n)plt.scatter(x,y,c=color,label=color,alpha=0.3,edgecolors='none')
plt.legend()
plt.grid(True)

输出结果:

3、直方图

fig,axes = plt.subplots(2,1)
data = pd.Series(np.random.randn(16),index=list('abcdefghijklmnop'))
data.plot.bar(ax = axes[0],color='r',alpha=0.5)
data.plot.barh(ax = axes[1],color='b',alpha=0.5)
plt.show()

输出结果:

直方图2

fig,ax  = plt.subplots()
#产生1,2,3,4,5
x = np.arange(1,6)
#随机产生5个(1.0-1.5)的随机数
y1 = np.random.uniform(1.0,1.5,5)
y2 = np.random.uniform(1.0,1.5,5)
plt.bar(x,y1,width=0.35,facecolor='lightskyblue',edgecolor='white')
plt.bar(x+0.35,y2,width=0.35,facecolor='yellowgreen',edgecolor='white')
plt.show()

输出结果:

4、饼图

饼图可以比较清楚地反映出部分与部分、部分与整体之间的比例关系,易于显示每组数据相对于总数的大小,而且显现方式直观

plt.figure(figsize=(6,6))
lebels=['Spring','Summer','Autumn','Winter']
x = [15,30,45,10]
#突出强调某一部分(控制分离的距离的,默认是不分离)
explode=(0.05,0.05,0.15,0.05)
#autopct显示比例值的格式:'%.1f%%'表示保留一个小数,用百分比表示
plt.pie(x,labels=lebels,explode=explode,startangle=60,autopct='%.1f%%')
plt.title('sale by season')
plt.show()

输出结果:

5、雷达图

courses = ['数据结构','数据可视化','高数','英语','软件工程','组成原理','C语言','体育']
scores = [82,95,78,85,45,88,76,88]
datalength = len(scores)
angles = np.linspace(0,2*np.pi,datalength,endpoint=False)
#为了闭合,所以加入下面三行
courses.append(courses[0])
scores.append(scores[0])
angles=np.append(angles,angles[0])
#绘制雷达图
plt.polar(angles,scores,'rv--',linewidth=2)
#填充
plt.fill(angles,scores,facecolor='r',alpha=0.2)
#设置网格标签
plt.thetagrids(angles*180/np.pi,courses,fontproperties='simhei',fontsize=12)
plt.show()

输出结果:

6、词云

需要安装第三方插件-方法如下:file-setting打开以下对话框(搜索wordcloud)安装

词云生成过程

一般生成词云的过程为:

(1)首先使用pandas读取数据并将需要分析的数据转化为列表;

(2)对获得的列表数据利用分词工具jieba进行遍历分词;

(3)使用WordCloud设置词云图片的属性、掩码和停用词,并 生成词云图像。

from wordcloud import WordCloud,STOPWORDS
import PIL.Image as image
def get_wordList():f = open('data//text.txt')wordList = f.read()return wordList
def get_wordCound(mylist):pic_path='data//myimg.jpg'img_mask = np.array(image.open(pic_path))wordcloud = WordCloud(background_color='white',mask=img_mask).generate(mylist)plt.imshow(wordcloud)plt.axis('off')
wordList = get_wordList()
get_wordCound(wordList)
plt.show()

输出结果:

更多推荐

Matplotlib数据分析可视化基础

本文发布于:2024-02-08 20:35:35,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1674770.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:基础   数据   Matplotlib

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!