matplotlib绘制各种图形,看这一篇就够了!

matplotlib绘制各种图形

原创不易,你的点赞评价加关注就是我更新下去的最大动力!

  • 本节我们将开始讲述各种不同的plot的方式。之前我们讲到了如何plot线,今天我们讲述如何画出散点图、柱状图、条形图、直方图等。学完本章之后,小伙伴们就基本能够应对工作和学习中大部分的画图场景啦。

  • 本章知识点归纳如下:

    • 导入相关包
    • 线图:plot()
    • 散点图:scatter()
    • 条形图:bar()
    • 箱线图:barplot()
    • 饼图:pie()
    • 直方图和密度图:hist()
    • 多图合并显示:subplot()和subplots()
    • 随机矩阵画图:imshow()
    • 图表动态刷新:ion()和ioff()
  • 小作业:

    • 绘制多个图形的组合展示;

1. 导入相关包

  • 首先,先引入matplotlib.pyplot简写作plt,再引入模块numpy用来产生一些随机数据。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import matplotlib as mpl
from scipy.stats import norm

# 中文乱码的处理
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']# 设置微软雅黑字体
plt.rcParams['axes.unicode_minus'] = False # 避免坐标轴不能正常的显示负号

2. 线图:plot()

  • 函数功能:展现变量的变化趋势
  • 调用方法:plt.plot(x, y, linestyle, linewidth,color,marker, markersize, markeredgecolor, markerfactcolor, label, alpha)
    • x:指定折线图的x轴数据;
    • y:指定折线图的y轴数据;
    • linestyle:指定折线的类型,可以是实线、虚线、点虚线、点点线等,默认文实线;
    • linewidth:指定折线的宽度
    • marker:可以为折线图添加点,该参数是设置点的形状;
    • markersize:设置点的大小;
    • markeredgecolor:设置点的边框色;
    • markerfactcolor:设置点的填充色;
    • label:为折线图添加标签,类似于图例的作用;

2.1 用plot方法画出x=(0,10)间sin的图像

x = np.linspace(0, 10, 30)
plt.plot(x, np.sin(x))
plt.show()

在这里插入图片描述

2.2 用点加虚线的方式画出x=(0,10)间sin的图像

plt.plot(x, np.sin(x), linestyle='--', marker='o') 
plt.show()

#其他line的属性:如color,linestyle,linewidth,marker,可参考以下资料:
#https://blog.csdn.net/dss_dssssd/article/details/84430024

在这里插入图片描述

2.3 同时绘制cos和sin图像在同一图中

  • 两条线的要求如下:
    • sin曲线:蓝色,实线,’+'号表示;
    • cos曲线:绿色,虚线,’*'号表示;
plt.plot(x, np.sin(x), color='b', linestyle='-', marker='+', label='sin(x)')  #或'b-+'
plt.plot(x, np.cos(x), color='g', linestyle='--', marker='*', label='cos(x)') #或'g--*'
plt.legend(loc='upper right')
plt.show()

#fmt:6种组合
# [color][marker][line],3种任意组合为6种可能,每个都是可选的,每个属性可以选择写或者不写,而且与组合中它们所在的位置顺序无关;

在这里插入图片描述

2.4 绘制折线图

y = np.random.randn(100)
x = np.arange(100)
plt.plot(x,y)
plt.show()

在这里插入图片描述

3. 散点图

  • 函数功能:散点图,寻找变量之间的关系
  • 调用方法:plt.scatter(x, y, s, c, marker, cmap, norm, alpha, linewidths, edgecolorsl)
  • 参数说明:
    • x: x轴数据
    • y: y轴数据
    • s: 散点大小
    • c: 散点颜色
    • marker: 散点图形状
    • cmap: 指定某个colormap值,该参数一般不用,用默认值
    • alpha: 散点的透明度
    • linewidths: 散点边界线的宽度
    • edgecolors: 设置散点边界线的颜色

3.1 绘制两组100个随机数的散点图

x = np.random.randn(100)
y = np.random.randn(100)
plt.scatter(x, y)
plt.show()

在这里插入图片描述

3.2 增加颜色,大小,透明度设置 – 气泡图

#设置画布大小
plt.figure(figsize = (10, 6))

#设置颜色
colors = np.random.randn(100)

plt.scatter(x, y, 
            #大小
            s = np.power(10*x + 20*y, 2),
            #颜色
            c = colors,
            #标注
            marker = 'o',
            #指定某个colormap值
            cmap=mpl.cm.RdYlBu,
            #透明度
            alpha = 0.9)
plt.show()

在这里插入图片描述

3.3 散点图分三类并显示图例

#设置画布大小
plt.figure(figsize=(10, 6), dpi=80)

colors = ['r', 'y', 'b'] #设置颜色
markers = ['*', 'o', 'x'] #设置标注

for i in range(0,3):
    y = np.random.rand(100)
    plt.scatter(x, y, s=60, c=colors[i], marker=markers[i])
plt.legend(['class1', 'class2', 'class3'], loc='upper right')

plt.show()

在这里插入图片描述

  • 在本期内容中,我们先从条形图开始,条形图实际上是用来表示分组(或离散)变量的可视化,可以使用matplotlib模块中的bar函数完成条形图的绘制。

  • 函数功能:条形图,寻找变量之间的关系

  • 调用方法:plt.bar(x, y, width,color, edgecolor, bottom, linewidth, align, tick_label, align)

  • 参数说明:

    • x:指定x轴上数值
    • y:指定y轴上的数值
    • width:表示条形图的宽度,取值在0~1之间,默认为0.8
    • color:条形图的填充色
    • edgecolor:条形图的边框颜色
    • bottom:百分比标签与圆心距离
    • linewidth:条形图边框宽度
    • tick_label:条形图的刻度标签
    • align:指定x轴上对齐方式,“center”,"lege"边缘

4.1 简单垂直条形图

#2020年四大直辖市GDP水平
GDP = [36102,38700,14083,25002]
city = ['北京市', '上海市', '天津市', '重庆市']
plt.bar(city, GDP, align='center', color='steelblue', alpha=0.8)
plt.ylabel('GDP')
plt.title('2020年四大直辖市GDP条形图')
plt.ylim([10000, 42000])

# 为每个条形图添加数值标签:ha='center'
for x,y in enumerate(GDP):
    plt.text(x, y+200, '%s'%y, ha='center')

plt.show()

在这里插入图片描述

4.2 简单水平条形图

plt.barh(city, GDP, align='center', color='steelblue', alpha=0.8)
plt.xlabel('GDP')
plt.title('2020年四大直辖市GDP水平条形图')
plt.xlim([10000, 42000])

# 为每个条形图添加数值标签:va='center'
for x,y in enumerate(GDP):
    plt.text(y+200, x, '%s' %y, va='center')

plt.show()

在这里插入图片描述

  • 水平条形图的绘制与垂直条形图的绘制步骤一致,只是调用了barh函数来完成。需要注意的是,条形图的数值标签设置有一些不一样,需要将标签垂直居中显示,使用va参数即可。

4.3 簇状条形图

#2019-2020年四大直辖市GDP对比条形图
GDP_2019 = [35371, 38155, 14104, 23606]
GDP_2020 = [36102, 38700, 14083, 25002]
bar_width = 0.4

# 绘图
plt.bar(np.arange(4), GDP_2019, label = '2019年', color = 'steelblue', alpha = 0.8, width = bar_width)
plt.bar(np.arange(4)+bar_width , GDP_2020, label = '2020年', color = 'indianred', alpha = 0.8, width = bar_width)

# 添加轴标签
plt.xlabel('城市')
plt.ylabel('GDP')
plt.title('2019-2020年四大直辖市GDP对比条形图')

#增加刻度标签
plt.xticks(np.arange(4)+0.15, city)

#设置y轴的刻度范围
plt.ylim([0, 42000])

# 为每个条形图添加数值标签
for x2019, y2019 in enumerate(GDP_2019):
    plt.text(x2019-0.2, y2019+100, '%s' %y2019)
for x2020,y2020 in enumerate(GDP_2020):
    plt.text(x2020+0.2, y2020+100, '%s' %y2020)

#显示图例
plt.legend(loc='upper right')

plt.show()

在这里插入图片描述

4.4 堆叠条形图

#将上面簇状条形图转换成堆叠条形图

# 绘图
plt.bar(city, GDP_2019, label = '2019年', color = 'steelblue', alpha = 0.8, width = bar_width)
plt.bar(city, GDP_2020, label = '2020年', color = 'indianred', alpha = 0.8, width = bar_width, bottom=GDP_2019)

# 添加轴标签
plt.xlabel('城市')
plt.ylabel('GDP')
plt.title('2019-2020年四大直辖市GDP堆叠条形图')

#设置y轴的刻度范围
plt.ylim([0, 80000])

# 为每个条形图添加数值标签
for x2019, y2019 in enumerate(GDP_2019):
    plt.text(x2019-0.15, y2019 + 10000, '%s' %y2019)
for x2020,y2020 in enumerate(GDP_2020):
    plt.text(x2020-0.15, y2020 - 12000, '%s' %y2020)

#显示图例
plt.legend(loc='upper right')

plt.show()

在这里插入图片描述

5. 箱线图:barplot()

  • 函数功能:反映数据的异常情况;主要用于分析数据内部的分布状态或分散状态,包括上下限、各分位数、异常值;
  • 调用方法:plt.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None)
  • 参数说明:
    • x:指定要绘制箱线图的数据;
    • notch:是否是凹口的形式展现箱线图,默认非凹口;
    • sym:指定异常点的形状,默认为+号显示;
    • vert:是否需要将箱线图垂直摆放,默认垂直摆放;
    • whis:指定上下须与上下四分位的距离,默认为1.5倍的四分位差;
    • positions:指定箱线图的位置,默认为[0,1,2…];
    • widths:指定箱线图的宽度,默认为0.5;
    • patch_artist:是否填充箱体的颜色;
    • meanline:是否用线的形式表示均值,默认用点来表示;
    • showmeans:是否显示均值,默认不显示;
    • showcaps:是否显示箱线图顶端和末端的两条线,默认显示;
    • showbox:是否显示箱线图的箱体,默认显示;
    • showfliers:是否显示异常值,默认显示;
    • boxprops:设置箱体的属性,如边框色,填充色等;
      • boxprops = {‘color’:‘g’, ‘facecolor’:‘yellow’}
      • ‘color’ : ‘g’ 箱子外框的颜色
      • ‘facecolor’ : ‘yellow’ 箱子填充的颜色
    • labels:为箱线图添加标签,类似于图例的作用;
    • flierprops:设置异常值的属性,如异常点的形状、大小、填充色等;
    • medianprops:设置中位数的属性,如线的类型、粗细等;
    • meanprops:设置均值的属性,如点的大小、颜色等;
    • capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等;
    • whiskerprops:设置须的属性,如颜色、粗细、线的类型等;

5.1 绘制箱线图

#利用numpy库生成100个服从标准正态分布随机数
x = np.random.normal(0,1,100)

plt.boxplot(x,  # 指定绘图数据
           patch_artist = True, # 要求用自定义颜色填充盒形图,默认白色填充
           showmeans = True, # 以点的形式显示均值
           boxprops = {'color':'black', 'facecolor':'#9999ff'},# 设置箱体属性,填充色和边框色
           flierprops = {'marker':'o', 'markerfacecolor':'red', 'color':'black'},# 设置异常值属性,点的形状、填充色和边框色
           meanprops = {'marker':'D', 'markerfacecolor':'indianred'},# 设置均值点的属性,点的形状、填充色
           medianprops = {'linestyle':'--', 'color':'orange'})# 设置中位数线的属性,线的类型和颜色

# 去除箱线图的上边框与右边框的刻度标签
plt.tick_params(top = 'off', right = 'off')

plt.show()

在这里插入图片描述

5.2 绘制不同分组的箱线图

#利用 numpy库生成三组正态分布随机数
x = [np.random.normal(0,std,100) for std in range(1,4)]

# 绘图
plt.boxplot(x, 
            patch_artist = True,
            labels = ['一组','二组','三组'], # 添加具体的标签名称
            showmeans=True, 
            boxprops = {'color':'black','facecolor':'#9999ff'}, 
            flierprops = {'marker':'o','markerfacecolor':'red','color':'black'},
            meanprops = {'marker':'D','markerfacecolor':'indianred'},
            medianprops = {'linestyle':'--','color':'orange'})

# 显示图形
plt.show()

在这里插入图片描述

6. 饼图:pie()

  • 函数功能:表示离散变量各水平占比情况
  • 调用方法:plt.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False)
  • 参数说明:
    • x:指定绘图的数据
    • explode:指定饼图某些部分的突出显示,即呈现爆炸式
    • labels:为饼图添加标签说明,类似于图例说明
    • colors:指定饼图的填充色
    • autopct:自动添加百分比显示,可以采用格式化的方法显示
    • pctdistance:设置百分比标签与圆心的距离
    • shadow:是否添加饼图的阴影效果
    • labeldistance:设置各扇形标签(图例)与圆心的距离;
    • startangle:设置饼图的初始摆放角度;
    • radius:设置饼图的半径大小;
    • counterclock:是否让饼图按逆时针顺序呈现;
    • wedgeprops:设置饼图内外边界的属性,如边界线的粗细、颜色等;
    • textprops:设置饼图中文本的属性,如字体大小、颜色等;
    • center:指定饼图的中心点位置,默认为原点
    • frame:是否要显示饼图背后的图框,如果设置为True的话,需要同时控制图框x轴、y轴的范围和饼图的中心位置;

6.1 绘制最简单的饼图

x = [9823, 5601, 3759, 1400, 450]
plt.pie(x)
plt.show()

在这里插入图片描述

6.2 为饼图添加一些参数

#构造数据:某城镇受教育程度
education = [9823, 5601, 3759, 1400, 450]
labels = ['小学', '初中', '高中', '大学', '研究生及以上']

explode = [0,0,0,0.2,0.3]  # 用于突出显示特定人群
colors=['#9999ff','#ff9999','#7777aa','#2442aa','#dd5555'] # 自定义颜色

# 将横、纵坐标轴标准化处理,保证饼图是一个正圆,否则为椭圆
plt.axes(aspect='equal')

# 绘制饼图
plt.pie(x = education, # 绘图数据
        explode=explode, # 突出显示特定人群
        labels=labels, # 添加教育水平标签
        colors=colors, # 设置饼图的自定义填充色
        autopct='%.1f%%', # 设置百分比的格式,这里保留一位小数
        pctdistance=0.8,  # 设置百分比标签与圆心的距离
        labeldistance = 1.15, # 设置教育水平标签与圆心的距离
        startangle = 180, # 设置饼图的初始角度
        radius = 1.5, # 设置饼图的半径
        counterclock = False, # 是否逆时针,这里设置为顺时针方向
        wedgeprops = {'linewidth': 1.5, 'edgecolor':'green'},# 设置饼图内外边界的属性值
        textprops = {'fontsize':12, 'color':'k'}, # 设置文本标签的属性值
        center = (1.8,1.8), # 设置饼图的原点
        frame = 0 )# 是否显示饼图的图框,这里设置不显示

# 删除x轴和y轴的刻度
plt.xticks(())
plt.yticks(())


# 显示图形
plt.show()

在这里插入图片描述

7. 直方图和密度图:hist()

  • 函数功能:判定数据的分布情况
  • 调用方法:plt.hist(x, bins=10, range=None, normed=False, weights=None, cumulative=False, bottom=None, histtype=‘bar’, align=‘mid’, orientation=‘vertical’, rwidth=None, log=False, color=None, label=None, stacked=False)
  • 参数说明:
    • x:指定要绘制直方图的数据;
    • bins:指定直方图条形的个数;
    • range:指定直方图数据的上下界,默认包含绘图数据的最大值和最小值;
    • density:是否将直方图的频数转换成频率;
    • weights:该参数可为每一个数据点设置权重;
    • cumulative:是否需要计算累计频数或频率;
    • bottom:可以为直方图的每个条形添加基准线,默认为0;
    • histtype:指定直方图的类型,默认为bar,除此还有’barstacked’, ‘step’, ‘stepfilled’;
    • align:设置条形边界值的对其方式,默认为mid,除此还有’left’和’right’;
    • orientation:设置直方图的摆放方向,默认为垂直方向;
    • rwidth:设置直方图条形宽度的百分比;
    • log:是否需要对绘图数据进行log变换;
    • color:设置直方图的填充色;
    • label:设置直方图的标签,可通过legend展示其图例;
    • stacked:当有多个数据时,是否需要将直方图呈堆叠摆放,默认水平摆放;

7.1 绘制简单频数直方图

data = np.random.randn(1000)

plt.hist(data, # 绘图数据
        bins = 20, # 指定直方图的条形数为20个
        color = 'steelblue', # 指定填充色
        edgecolor = 'k', # 指定直方图的边界色
        label = '直方图' )# 为直方图呈现标签

# 去除图形顶部边界和右边界的刻度
plt.tick_params(top='off', right='off')
# 显示图例
plt.legend()
# 显示图形
plt.show()

在这里插入图片描述

7.2 绘制累计频率直方图

plt.hist(data, # 绘图数据
        bins = 20, # 指定直方图的组距
        density = True, # 设置为频率直方图
        cumulative = True, # 积累直方图
        color = 'steelblue', # 指定填充色
        edgecolor = 'k', # 指定直方图的边界色
        label = '直方图')# 为直方图呈现标签

# 设置坐标轴标签和标题
plt.title('累计频率直方图')
plt.xlabel('x轴')
plt.ylabel('累计频率')

# 去除图形顶部边界和右边界的刻度
plt.tick_params(top='off', right='off')

# 显示图例
plt.legend(loc = 'best')
# 显示图形
plt.show()

在这里插入图片描述

7.3 在直方图基础上,添加正态分布曲线和核密度曲线

#设置随机种子
np.random.seed(1)

#随机生成100个1-100之间的整数
data = np.random.randint(1, 100, 100)

# 正态分布图
plt.hist(data, # 绘图数据
        bins = 20, # 指定直方图的组距
        density = True, # 设置为频率直方图
        color = 'steelblue', # 指定填充色
        edgecolor = 'k') # 指定直方图的边界色

# 生成正态曲线的数据
x1 = np.linspace(data.min(), data.max(), 1000)
normal = norm.pdf(x1, data.mean(), data.std())
# 绘制正态分布曲线
line1, = plt.plot(x1, normal, 'r-', linewidth = 2) 

# 生成核密度曲线的数据
kde = mlab.GaussianKDE(data)
x2 = np.linspace(data.min(), data.max(), 1000)
# 绘制核密度曲线
line2, = plt.plot(x2,kde(x2), 'g-', linewidth = 2)

# 显示图例
plt.legend([line1, line2], ['正态分布曲线','核密度曲线'], loc='best')

# 显示图形
plt.show()

在这里插入图片描述

7.4 绘制堆叠直方图

#设置随机种子
np.random.seed(1)

#利用 numpy库生成两组随机数
data = [np.random.randint(0, 100, 100) for i in range(1,3)]

# 绘制堆叠直方图
plt.hist(data, bins = 20, label = ['class1', 'class2'], color = ['steelblue','orange'], alpha = 0.7, stacked = True)

# 显示图例
plt.legend()
# 显示图形
plt.show()

在这里插入图片描述

8. 多图合并显示:subplot()和subplots()

  • 1.在一张画布上输出多个图形,在Matplotlib库中有当前的图形(figure)以及当前轴(axes)概念
  • 2.其对应的就是当前画布以及当前子图,在一张画布(figure)上可以绘制多个子图(axes)
  • 3.绘制多图通常采用subplot()函数或subplots()函数
    • (1)subplot()函数,通常含有三个参数,子图的行数、列数以及第几个子图
      • 不足:每次在新的子图上画图时,都得调用subplot()函数
    • (2)subplots()函数,一次性就生成多个子图
      • set_title()函数 子图中设置子图标题
      • set_xlabel()函数 子图中设置X轴标签
      • set_ylabel()函数 子图中设置Y轴标签

8.1 subplot()函数多次绘制多图

# 绘制第一个子图:折线图
ax1 = plt.subplot(221)  
plt.plot([1, 2, 3], [2, 4, 6])
# 绘制第二个子图:柱状图
ax2 = plt.subplot(222)  
plt.bar([1, 2, 3], [2, 4, 6])
# 绘制第三个子图:散点图
ax3 = plt.subplot(223)  
plt.scatter([1, 3, 5], [2, 4, 6])
# 绘制第四个子图:直方图
ax4 = plt.subplot(224)
plt.hist([2, 2, 2, 3, 4]);

在这里插入图片描述

8.2 不同画布分开绘制

# 第一张画布
plt.figure(1) 
ax1 = plt.subplot(121)  # 第一张画布的第一个子图
plt.plot([1, 2, 3], [2, 4, 6])  

ax2 = plt.subplot(122)  # 第一张画布的第二个子图
plt.plot([2, 4, 6], [4, 8, 10])

# 第二张画布
plt.figure(2)
plt.plot([1, 2, 3], [4, 5, 6]);

在这里插入图片描述

在这里插入图片描述

8.3 subplots()函数一次绘制多图

fig, axes = plt.subplots(2, 2, figsize=(8, 8)) 
ax1, ax2, ax3, ax4 = axes.flatten()
ax1.plot([1, 2, 3], [2, 4, 6])     # 绘制第一个子图
ax2.bar([1, 2, 3], [2, 4, 6])      # 绘制第二个子图
ax3.scatter([1, 3, 5], [2, 4, 6])  # 绘制第三个子图
ax4.hist([2, 2, 2, 3, 4]);         # 绘制第四个子图

在这里插入图片描述

8.4 添加横纵轴名称及标题

fig, axes = plt.subplots(2, 2, figsize=(10, 10)) 
ax1, ax2, ax3, ax4 = axes.flatten()
ax1.plot([1, 2, 3], [2, 4, 6])     # 绘制第一个子图
ax1.set_title('子图1')
ax1.set_xlabel('日期')
ax1.set_ylabel('分数')
ax2.bar([1, 2, 3], [2, 4, 6])      # 绘制第二个子图
ax2.set_title('子图2')
ax2.set_xlabel('日期')
ax2.set_ylabel('分数')
ax3.scatter([1, 3, 5], [2, 4, 6])  # 绘制第三个子图
ax3.set_title('子图3')
ax3.set_xlabel('日期')
ax3.set_ylabel('分数')
ax4.hist([2, 2, 2, 3, 4])         # 绘制第四个子图
ax4.set_title('子图4')
ax4.set_xlabel('日期')
ax4.set_ylabel('分数');

在这里插入图片描述

9. 随机矩阵画图

  • 这一节讲怎样在matplotlib中打印出图像。这里我们打印出的是纯粹的数字,而非自然图像。

9.1 绘制简单随机矩阵图

# 首先生成一个 3x3 的 2D-array ,也就是三行三列的格子,array 中的每个值经过colormap与一个颜色对应并填充在格子中
a = np.array([0.313660827978, 0.365348418405, 0.423733120134,
              0.365348418405, 0.439599930621, 0.525083754405,
              0.423733120134, 0.525083754405, 0.651536351379]).reshape(3,3)

plt.imshow(a, 
           #画图方式
           interpolation='nearest', 
           #指定某个colormap值
           cmap='RdBu', 
           #选择原点的位置
           origin='lower')

在这里插入图片描述

9.2 随机矩阵图添加colorbar

  • 为我们显示不同颜色的区块所对应的具体数值。其中shrink参数可以用来调整 colorbar 的长度,这里我们使colorbar的长度变短为原来的92%
plt.imshow(a, interpolation='nearest', cmap='RdBu', origin='lower')
plt.colorbar(shrink=.92)

plt.xticks(())
plt.yticks(())
plt.show()

在这里插入图片描述

10. 图表动态刷新:ion()和ioff()

  • 交互模式:
    • 我们在训练模型的时候,可能需要去不停去更新图表数据;
# jupyter中动态显示需要
from IPython import display

x, y1, y2 = [], [], []
plt.ion()    # 交互模式打开
for i in np.linspace(0,20,500):
    x.append(i)
    y1.append(np.cos(i))
    y2.append(np.sin(i))
    plt.figure(figsize=(12, 2))
    plt.clf()   
    plt.ylim(-1, 1)    # 设置y轴刻度值最大最小值
    plt.plot(x, y1, '--r')
    plt.plot(x, y2, 'g')
    plt.pause(0.1)
    display.clear_output(wait=True)    # 清除输出
plt.ioff()   # 关闭交互模式

在这里插入图片描述

案例应用

第一题:绘制多个统计图形的组合展示

  • 要求:
    • (1)生成两行三列15×10的6个子图;
    • (2)第一个子图:
      • 数据:x=[1, 2, 3]; y=[0.6, 0.8, 0.2];
      • 图形:设置三种不同颜色,绘制条形图;
    • (3)第二个子图:
      • 绘制sin(x)和cos(x)的图像;
      • 样式:
        • 横轴设为’x’,纵轴设为’f(x)’;
        • 添加图例:sin(x)和cos(x);
        • 颜色不同,线型不同;
      • 图形:绘制线图;
    • (4)第三个子图:
      • 数据:x=[1,2,3,4,5,6,7,8]; y= [3,1,4,5,8,9,7,2]
      • 样式:
        • 纵轴标签设为:[‘A’,‘B’,‘C’,‘D’,‘E’,‘F’,‘G’,‘H’]
      • 图形:绘制水平条形图;
    • (5)第四个子图:
      • 生成两组服从正态分布的100个随机数,设为x,y;
      • 样式:
        • 颜色主题:采用mpl.cm.RdYlBu;
        • 标注:采用’o’;
      • 图形:绘制气泡图;
    • (6)第五个子图:
      • 数据:
        • x = np.linspace(0.5,2*np.pi,20)
        • y = np.random.randn(20)
      • 样式:
        • 棉棒样式:’-.’;
        • 棉棒末端的样式:‘o’;
        • 指定基线的样式:’-’;
      • 图形:绘制棉棒图;
    • (7)第六个子图:
      • 数据:
        • elements = [“Flour”,“Sugar”,“Cream”,“Strawberry”,“Nuts”]
        • weight1 = [40,15,20,10,15]
        • weight2 = [30,25,15,20,10]
      • 样式:
        • 颜色设为:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00"]
        • 百分数保留一位小数;
        • 其他参数自行发挥;
      • 图形:绘制双层环形图;
plt.figure(figsize=(15,10))
# (1)生成两行三列15×10的6个子图;
# (2)第一个子图:
# 数据:x=[1, 2, 3]; y=[0.6, 0.8, 0.2];
# 图形:设置三种不同颜色,绘制条形图;
plt.subplot(231)
x=[1,2,3]
y=[0.6,0.8,0.2]
plt.bar(x,y,color=['r','b','g'])
# (3)第二个子图:
# 绘制sin(x)和cos(x)的图像;
# 样式:
# 横轴设为'x',纵轴设为'f(x)';
# 添加图例:sin(x)和cos(x);
# 颜色不同,线型不同;
# 图形:绘制线图;
import math
y1=[]
y2=[]
for i in x:
    y1.append(math.sin(i))
    y2.append(math.cos(i))
plt.subplot(232)
plt.plot(x,y1,label='sin(x)',color='r',linestyle='-')
plt.plot(x,y2,label='cos(x)',color='b',linestyle='--')
plt.legend(loc=0)

# (4)第三个子图:
# 数据:x=[1,2,3,4,5,6,7,8]; y= [3,1,4,5,8,9,7,2]
# 样式:
# 纵轴标签设为:['A','B','C','D','E','F','G','H']
# 图形:绘制水平条形图;
x=[1,2,3,4,5,6,7,8]
y= [3,1,4,5,8,9,7,2]
plt.subplot(233)
plt.barh(x,y)
# (5)第四个子图:
# 生成两组服从正态分布的100个随机数,设为x,y;
# 样式:
# 颜色主题:采用mpl.cm.RdYlBu;
# 标注:采用'o';
# 图形:绘制气泡图;
x=np.random.normal(0,1,100)
y=np.random.normal(-1,1,100)
plt.subplot(234)
plt.scatter(x,y,marker = 'o',
            s= np.power(5*x + 5*y, 2),#设置大小
            #指定某个colormap值
            cmap=mpl.cm.RdYlBu,alpha=0.9)

# (6)第五个子图:
# 数据:
# x = np.linspace(0.5,2*np.pi,20)
# y = np.random.randn(20)
# 样式:
# 棉棒样式:'-.';
# 棉棒末端的样式:'o';
# 指定基线的样式:'-';
# 图形:绘制棉棒图;
x = np.linspace(0.5,2*np.pi,20)
y = np.random.randn(20)
plt.subplot(235)#绘制棉棒图
# plt.stem(a, b, linefmt="-.", markerfmt="o", basefmt="-")
plt.stem(x,y,linefmt='-.',markerfmt='o',basefmt='-')

# (7)第六个子图:
# 数据:
# elements = ["Flour","Sugar","Cream","Strawberry","Nuts"]
# weight1 = [40,15,20,10,15]
# weight2 = [30,25,15,20,10]
# 样式:
# 颜色设为:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00"]
# 百分数保留一位小数;
# 其他参数自行发挥;
# 图形:绘制双层环形图;
# plt.axes(aspect='equal')
ax1=plt.subplot(236)
elements = ["Flour","Sugar","Cream","Strawberry","Nuts"]
weight1 = [40,15,20,10,15]
weight2 = [30,25,15,20,10]
colors=["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00"]
ax1.pie(weight1,radius=1.3,labels=elements,colors=colors,autopct='%.1f%%')
ax1.pie(weight2,radius=1,colors=colors,autopct='%.1f%%')




在这里插入图片描述

  • 17
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值