Matplotlib数据可视化基础应用

本文通过一系列Matplotlib在Python中的应用实例,如柱状直方图、饼图、图表注释、填充效果、极轴饼状图等,介绍了如何使用Matplotlib进行数据可视化,帮助读者理解和掌握这一强大的数据可视化工具。
摘要由CSDN通过智能技术生成

(1)实验背景

在当今的数据驱动的世界中,数据可视化已经成为数据科学家、数据分析师和研究人员的重要工具之一。数据可视化可以帮助我们理解复杂的数据集,并揭示数据背后的模式、趋势和关系。它使我们能够将抽象的数字和数据转化为直观的图表和图形,从而更好地理解和解释数据。

Matplotlib是Python中最常用的数据可视化库之一。它提供了大量的工具和选项,使我们能够创建各种图表,包括条形图、饼图、直方图、散点图、线图等。Matplotlib的灵活性和功能强大使其成为数据可视化的理想选择。

(2)实验简介

在本文章中,我们将探索Matplotlib的基础应用,包括如何创建和定制各种图表,以及如何使用这些图表来解析和呈现数据。我们将通过实际的示例和实验,展示Matplotlib在数据可视化中的应用,帮助读者更好地理解和掌握这个强大的工具。

(3)实验样例

1、示例一:绘制多数据集柱状直方图

首先创建一个图形和坐标轴,然后设定正态分布的平均值和标准差,生成三组符合这个分布的随机数据。接着,定义每组数据在图中显示的颜色和标签。最后,使用Matplotlib的hist函数,将这三组数据以柱状直方图的形式绘制在同一图形中,并添加图例,最终展示直方图。

import numpy as np
import matplotlib.pyplot as plt
fg,ax = plt.subplots()
mu,sigma=200,25
x = mu+sigma*np.random.randn(1000,3)
#请在这里填写适合的语句
color = ('crimson', 'burlywood', 'chartreuse')
ax.hist(x,bins=10,color=color,histtype='bar',label=('Crimson','Burlywood', 'Chartreuse'))
ax.legend()
plt.show()

程序执行效果:

2、示例二:图表注释添加

首先创建一个6x5的图形,并在其中添加一个子图,设定其x轴和y轴的范围。然后,生成一个等差数列并计算其对应的余弦值,将这个余弦曲线绘制在子图上。接着,定义一个用于注释的边框样式,并在图上添加两个带箭头的注释和五个文本注释。最后,调用show函数将完成的图形显示出来。

fig = plt.figure(figsize=(6,5))
ax = fig.add_subplot(111, autoscale_on=False, xlim=(-1,5), ylim=(-3,5))

t = np.arange(0.0, 5.0, 0.01)
s = np.cos(2*np.pi*t)
line, = ax.plot(t, s, lw=3, color='purple')
bbox = dict(boxstyle='round',fc='white')
ax.annotate('offset',xy=(1,1),xytext=(0,1.6),arrowprops=dict(facecolor='black', shrink=0.05),fontsize=12)
ax.annotate('local max',xy=(3,1),xytext=(3,4.5),arrowprops=dict(facecolor='black', shrink=0.05),fontsize=12)
ax.text(1.5,1,'axes center',fontsize=12)
ax.text(0,5.1,'points')
ax.text(-1.7,5.5,'a fractional title',fontsize=20)
ax.text(-1.8,-3.4,'pixels')
ax.text(1.3,-2.8,'bottom right (points)',fontsize=20)
plt.show()

程序执行效果:

3、示例三:创建填充效果的图表

首先生成一个等差数列,然后计算出两个基于这个数列的正弦函数。接着,创建一个8x8的图形,并在其中添加三个子图。每个子图中,都使用fill_between函数在两个函数之间填充颜色,并绘制了对应的函数曲线。填充的区域都是在x轴的-2.5到-0.5之间。最后,设置x轴的标签,并显示这个图形。

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0.0, 2, 0.01)
y1 = np.sin(2*np.pi*x)
y2 = 1.2*np.sin(2*np.pi*x)

fig = plt.figure(figsize=(8,8))
# 请在下面填写代码,添加三个子图,并利用填充的方法,绘制出下面图形,注意横坐标,纵坐标以及所有的标题变化
# 子图1
fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(311)
plt.fill_between(x,y1,(-2.5>x)&(x<-0.5),interpolate=True)
plt.plot(x,y1)
plt.ylabel('between y1 and 0')
# 子图2
ax1 = fig.add_subplot(312)
plt.fill_between(x,1.2,y2,(-2.5<x)&(x>-0.5),interpolate=True)
plt.plot(x,y2)
plt.ylabel('between y1 and 1')
# 子图3
ax2 = fig.add_subplot(313)
plt.fill_between(x,y1,1.2*np.sin(4*np.pi*x),(-2.5<x)&(x>-0.5),interpolate=True)
plt.ylabel('between y1 and y2')

plt.xlabel('x')
plt.show()

程序执行效果:

4、示例四:饼图可视化

首先创建一个6x6的图形,并在其中添加一个轴,轴的背景色设为'lightskyblue'。然后,定义四个标签和对应的部分大小,以及各部分的偏移量。接着,使用这些数据在轴上绘制一个饼状图,显示各部分的百分比,设置了阴影效果,并将起始角度设为90度。最后,设置图形的标题,并显示这个图形。

fig = plt.figure(1,figsize=(6,6))
#pyplot.axes是matplotlib库的函数,该函数将轴添加到当前图形并将其做为当前轴。
#用法:matplotlib.pyplot.axes(*args,**kwargs)  *args:它可能包含None或4个float类型的元组做为列表,
#表示【左底部宽度高度】
ax = plt.axes([0.0, 0.0, 0.8, 0.8],facecolor='lightskyblue')
labels = ['Frogs', 'Hogs', 'Dogs', 'Logs']
fracs = [15, 30, 45, 10]
#请在下面填写适当的代码:
explode=(0.05,0.1,0.05,0.05)
ax.pie(fracs,explode=explode,labels=labels,autopct='%1.1f%%',shadow=True,startangle=90)
plt.title('Raining Hogs and Dogs',bbox=dict(facecolor='black', edgecolor='black', alpha=0.23))
plt.show()

程序执行效果:

5、示例五:分类图表绘制

首先定义三个组的名称和对应的值。然后,创建一个9x3的图形,并在其中添加三个子图。每个子图中都使用这些数据绘制一个不同类型的图形:柱状图、散点图和折线图。最后,设置了图形的标题,并显示这个图形。

names = ['group_a', 'group_b', 'group_c']
values = [1, 10, 100]

#请在下方补全代码
plt.figure(figsize=(9, 3))
plt.subplot(131)
plt.bar(names, values)
plt.subplot(132)
plt.scatter(names, values)
plt.subplot(133)
plt.plot(names, values)
plt.suptitle('Categorical Plotting',bbox=dict(facecolor='orange', edgecolor='black', alpha=0.95))
plt.show()

程序执行效果:

6、示例六:堆叠条形图和表格创建

首先定义四个季度的五个人的数据,然后创建一个颜色映射。接着,遍历每一行数据,绘制一个堆叠条形图,并更新每个条形的底部位置。同时,将每一行的数据添加到表格的数据中。并将颜色映射和表格的数据反转,以便于在图形下方添加一个表格。最后,调整子图的位置,设置y轴的刻度,并显示这个图形。

data = [[893,3839,291,5839,2839],
      [3879,9039,838,998,7328],
      [3293,893,8928,6373,736],
      [8903,3989,5833,8982,3621]]
columns = ['Lily','Lucy','Alice','Jim','Jhon']
rows = ['season %d' % x for x in (1,2,3,4)]
colors = plt.cm.Oranges(np.linspace(0.3, 0.8, len(rows))) #colormap 相近颜色系列 形成颜色数组

#请在下方补全代码
value_increment=10000
values = np.arange(0,24000,5000)
n_rows = len(data)
index = np.arange(len(columns))+0.3
bar_width = 0.4
y_offset = np.array([0.0]*len(columns))
cell_text = []
num = 0
for row in range(n_rows):
    plt.bar(index, data[row], bar_width, bottom=y_offset, color=colors[num])
    y_offset = y_offset + data[row]
    cell_text.append(['% .0f' % x for x in data[row]])
    num += 1
colors = colors[::-1]
cell_text.reverse()
the_table = plt.table(cellText=cell_text,rowLabels=rows,rowColours=colors,colLabels=columns,loc='bottom')
plt.subplots_adjust(left=0.2,bottom=0.2)
plt.yticks(values,['%d' % val for val in values])
plt.xticks([])
plt.show()

程序执行效果:

7、示例七:箱线图绘制

首先生成三组正态分布的随机数据,并定义对应的标签。然后,创建一个1行2列的子图,并在每个子图上绘制一个箱线图,一个是矩形箱线图,另一个是带有缺口的箱线图。接着,遍历每个子图的每个箱线图,设置其颜色。然后,对于每个子图,打开y轴的网格线,设置x轴的刻度,以及x轴和y轴的标签,并设置标题。最后,设置所有子图的x轴刻度标签,并显示这个图形。

import matplotlib.pyplot as plt
import numpy as np

# Random test data
np.random.seed(19680801)
all_data = [np.random.normal(0, std, size=100) for std in range(1, 4)]
labels = ['x1', 'x2', 'x3']

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(9, 4))
colors = ['pink', 'lightblue', 'lightgreen']

#请在下方补全代码
plt.rcParams['axes.unicode_minus']=False     #用来正常显示负号
num = 0
bplot1 = axes[0].boxplot(all_data, vert=True, patch_artist=True)
bplot2 = axes[1].boxplot(all_data, notch=True, vert=True, patch_artist=True,showmeans = True, 
                         meanprops = {'marker':'D','markerfacecolor':'red'})
colors = ['pink', 'lightblue', 'lightgreen']
title_list = ['Rectangular box plot','Notched box plot']
for bplot in (bplot1, bplot2):
    for patch, color in zip(bplot['boxes'], colors):
        patch.set_facecolor(color)
for ax in axes:
    ax.yaxis.grid(True)
    ax.set_xticks([y+1 for y in range(len(all_data))])
    ax.set_xlabel('Three separate samples')
    ax.set_ylabel('Observed values')
    ax.set_title(title_list[num])
    num += 1

plt.setp(axes, xticks=[1,2,3], xticklabels=['x1', 'x2', 'x3'])
plt.show()

程序执行效果:

8、示例八:极轴饼状图绘制

首先设置图形的大小,并定义一个颜色映射函数。然后,创建一个大小为7x7的图形,并在其中添加一个极坐标轴。接着,生成表示每个扇形的中心角度、半径和宽度的数据,并在极坐标轴上绘制一个饼状图。然后,遍历每个扇形,设置其颜色和不透明度。最后,设置图形的字体和标题,并显示这个图形。

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.cm as cm

figsize = 7
colormap = lambda r:cm.Set2(r/20.0)
N = 18
fig = plt.figure(figsize=(figsize, figsize))
ax = fig.add_axes([0.2, 0.2, 0.7, 0.7], polar=True)
theta = np.arange(0.0, 2*np.pi, 2*np.pi/N)
radii = 20*np.random.rand(N)
width = np.pi/4*np.random.rand(N)
# left表示从哪开始,radii表示从中心点向边缘绘制的长度(半径),width表示末端的弧长
bars = ax.bar(theta, radii, width=width, bottom=0.0)
# 自定义颜色和不透明度
for r, bar in zip(radii, bars):
    bar.set_facecolor(colormap(r))
    bar.set_alpha(0.6)
    
plt.rcParams['font.sans-serif'] = ['Simhei'] # 解决中文乱码问题
plt.title('极轴饼状图')
plt.show()

程序执行效果:

  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值