python之Matplotlib章节

目录

一、安装、升级与卸载

二、导入使用

三、Matplotlib图表设置

3.1 导入使用

3.2 图表样式设置

3.3 建立画布

四、基本元素设置

4.1 坐标轴标题

4.2 图表标题

4.3 图表图例

4.4 轴显示设置

五、基本图表设置

5.1 点、线设置

5.2 坐标轴刻度

5.3 坐标轴范围

5.4 数据标签

5.5 网格线

六、共轴坐标轴

6.1 共享X轴

6.2 共享Y轴

七、案例

7.1 折线图——销量趋势

7.2 柱形图——比较数据分布

7.3 条形图——多条数据分类对比

7.4 饼图——表示占比

7.5 图表选择


一、安装、升级与卸载

pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install --upgrade matplotlib==xxx # 升级为指定版本,xxx为版本号

# pip uninstall matplotlib # 卸载

二、导入使用

import matplotlib.pyplot as plt

# 查看包的方法
print(dir(plt))

三、Matplotlib图表设置

3.1 导入使用

import matplotlib.pyplot as plt

%matplotlib inline #用于在笔记本内联显示matplotlib图表
%config InlineBackend.figure_format = 'svg' #确保图表以SVG格式显示
plt.rcParams["font.sans-serif"] = 'Microsoft YaHei' #解决中文乱码问题
plt.rcParams['axes.unicode_minus'] = False #解决负号无法显示

3.2 图表样式设置

# # 改变图表的外观,例如颜色、线条风格等

plt.style.available#查看matplotlib库的绘图样式

#选择设置图表演示为ggplot类型
plt.style.use("ggplot") 

3.3 建立画布

#设置图表画布大小,先使用 plt.figure()来初始化图形窗口
plt.figure(figsize = (9, 6)) 

figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')

参数解释:

  • num:字符串或整数
  • figsize:图形的宽高
  • dpi:分辨率
  • facecolor:图形背景颜色
  • edgecolor:图形边缘颜色

四、基本元素设置

包括坐标轴标题、轴显示、图表标题、图例等

# 绘制一个简单的折线图
import numpy as np
plt.plot(np.random.randn(100))

4.1 坐标轴标题

plt.xlabel(xlabel, fontdict=None, labelpad=None, fontsize, loc='center', **kwargs)

plt.ylabel(xlabel, fontdict=None, labelpad=None, fontsize, loc='center', **kwargs)

参数解释:

  • xlabel:标签文本
  • fontdict:设置字体属性
  • labelpad:标签与轴距离
  • fontsize:标签字体大小
  • loc:标签位置
  • linespacing:标签与轴线之间的距离
  • horizontalalignment, va, ha:这些参数用于调整标签的水平和对齐方式
  • rotation:旋转标签角度
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

#使用Series模拟一组数据
s = pd.Series(data=np.random.randn(3600), 
               index=pd.date_range('20170101',periods=3600),
             )

cs = s.cumsum()#累计和
cs.plot(figsize = (9, 6))#设置图表大小

plt.xlabel("年份",labelpad = 20) #设置X轴距离,labelpad控制标题到图表的距离
plt.ylabel("网页浏览量",labelpad = 20) #设置Y轴距离,labelpad控制标题到图表的距离

4.2 图表标题

plt.title(label, fontdict=None, loc='center', pad=None, *, y=None, **kwargs)

4.3 图表图例

plt.legend(labels, loc, fontsize, ncol, shadow, **kwargs)

参数解释:

  • labels:设置图例的列表
  • loc:图例位置,'upper left'、'upper right'、'lower left'、'lower right'
  • ncol:图例列数
  • frameon:图例是否显示例外框
import pandas as pd
import numpy as np

#模拟一组数据
s = pd.Series(data=np.random.randn(3600), 
               index=pd.date_range('20170101',periods=3600),
             )

cs = s.cumsum()#累计和
cs.plot(figsize = (9, 6))#设置图表大小

#frameon=False,图例去除边框
plt.legend(loc = "upper center",title='浏览量',title_fontsize=10,frameon=False,shadow=True)

4.4 轴显示设置

plt.axis(option, *args, **kwargs)

参数解释

  • 'off':关闭坐标轴标签和刻度线
  • 'on':打开坐标轴标签和刻度线(默认)
  • 'tight':设置坐标轴范围以适应数据范围,即坐标轴紧密地包围数据
  • 'equal':设置等比例的坐标轴,使得 x 和 y 轴具有相同的刻度间隔
import pandas as pd
import numpy as np

#模拟一组数据
s = pd.Series(data=np.random.randn(3600), 
               index=pd.date_range('20130101',periods=3600),
             )

cs = s.cumsum()#累计和
cs.plot(figsize = (9, 6))

plt.axis("off") #简化图表,可关闭坐标轴及标题

五、基本图表设置

5.1 点、线设置

df.plot(kind='line', ax=None, subplots=False, sharex=None, sharey=False, layout=None, figsize=None, use_index=True, title=None, grid=None, legend=True, style=None, logx=False, logy=False, loglog=False, xticks=None, yticks=None, xlim=None, ylim=None, rot=None, fontsize=None, colormap=None, table=False, yerr=None, xerr=None, label=None, secondary_y=False, sort_columns=False, **kwds)

参数解释

  • kind:指定图表类型(line、bar、barh、hist、box、kde)
  • ax:用于绘制图形的 matplotlib 轴对象
  • subplots:如果为 True,则为每个数据列创建一个子图
  • sharex、sharey:如果为 True,则 x 或 y 轴将在子图之间是共享的
  • layout:用于指定子图布局的元组
  • figsize:用于指定图形大小的元组
  • xticks、yticks:用于指定 x 轴和 y 轴的刻度的值
  • xlim、ylim:用于指定 x 轴和 y 轴的范围
  • colormap:用于指定颜色映射
  • secondary_y:如果为 True,则在右侧显示第二个 y 轴
  • sort_columns:如果为 True,则按照列名对数据进行排序
import pandas as pd
import numpy as np

df=pd.DataFrame(data=np.random.randint(low=100,high=1000,size=30),
                index=pd.date_range('20231101',periods=30),
                columns=['销量'])

df.plot(color = "red",linestyle = "--", linewidth = 2, marker = "o", markersize = 10, figsize = (9, 6))

5.2 坐标轴刻度

plt.xticks(*ticks, labels=None, **kwargs)

plt.yticks(*ticks, labels=None, **kwargs)

参数解释

  • ticks:用于设置 x 轴上的刻度位置。可以传入一个列表或数组,指定刻度的位置
  • labels:用于设置每个刻度的标签文本。可以传入一个字符串列表,用于指定每个刻度的标签
import pandas as pd
import numpy as np

df=pd.DataFrame(data=np.random.randint(low=100,high=1000,size=30),
                index=pd.date_range('20231101',periods=30),
                columns=['销量'])

df.plot()

plt.xticks(ticks = pd.date_range('20231101',periods=30), labels = ['{}日'.format(i+1) for i in range(30)],rotation=45)#设置X坐标轴刻度
plt.yticks(ticks = np.arange(100,1100,100),labels = ['{}单'.format(i*100) for i in range(10)])#设置Y坐标轴刻度

5.3 坐标轴范围

plt.xlim(bottom, top)

plt.ylim(bottom, top)

5.4 数据标签

plt.text(x, y, s, fontdict=None, withdash=False, **kwargs)

参数解释:

  • x,y:是标签坐标位置
  • s:文本内容
  • withdash:布尔值参数,如果是True,则使用破折号(~)表示的文本
  • ha:水平对齐center、left、right
  • va:垂直对齐center、top、bottom
import pandas as pd
import numpy as np

df=pd.DataFrame(data=np.random.randint(low=100,high=1000,size=30),
                index=pd.date_range('20231101',periods=30),
                columns=['销量'])

df.plot()

for x,y in zip(pd.date_range('20231101',periods=30),df['销量'].values):
    plt.text(x,y,y,ha='center',va='bottom',fontsize=8)

5.5 网格线

plt.grid(b=None, which='major', axis='both', **kwargs)

参数解释

  • b:布尔值,可选参数。决定是否显示网格线
  • which:布尔值,可选参数。显示网格线类型major,minor,both
  • axis:用于指定在哪个轴上显示网格线x,y,both
  • linestyle:用于设置网格线的线型,‘--’ ‘-’
  • alpha:用于设置网格线的透明度
import pandas as pd
import numpy as np

df=pd.DataFrame(data=np.random.randint(100,1000,size=30),
                index=pd.date_range('20231101',periods=30),
                columns=['销量'])

df.plot()

plt.grid(color='red', linestyle='--', alpha=0.3, axis='y', visible = True)#设置网格线为虚线,axis='y'可只对Y轴打开网格线

六、共轴坐标轴

6.1 共享X轴

如果要共用一个X坐标轴,Y坐标轴分别展示,可设置参数subplots=True,这样设置为共X坐标轴数据图。

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.randn(2000,4),
                    index=pd.Series(pd.date_range('20240101',periods=2000)),
                    columns=list('ABCD'))
df = df.cumsum() # 累计求和
df.plot(figsize=(10,6),subplots=True)
plt.legend(loc='best')

6.2 共享Y轴

做多个数据系列折线图时默认是共用Y轴的,可以展示不同系列数据在时间趋势上的波动变化。

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.randn(2000,4),
                    index=pd.Series(pd.date_range('20240101',periods=2000)),
                    columns=list('ABCD'))
df = df.cumsum() # 累计求和
df.plot(figsize=(10,6))
plt.legend(loc='best')

七、案例

7.1 折线图——销量趋势

折线图是一种用折线的升降来表示统计数据变动趋势的图形。通常用于显示数据随时间或有序类别的波动情况,可以清楚地反映数据增减变化的趋势和变化幅度。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt 
import matplotlib.style as psl


# %matplotlib inline  # 魔法命令,用于在笔记本内联显示matplotlib图表
# %config InlineBackend.figure_format = 'svg'  # 确保图表以SVG格式显示
plt.rcParams["font.sans-serif"] = 'Microsoft YaHei' #解决中文乱码问题
plt.rcParams['axes.unicode_minus'] = False #解决负号无法显示

psl.use('ggplot')
plt.figure(figsize=(10,6))

df=pd.DataFrame(data=np.random.randint(low=100,high=1000,size=30),
                index=pd.date_range('20231101',periods=30),
                columns=['销量'])

df.plot(color='red',linestyle='dashdot',linewidth=1,marker = "o", markersize = 5,figsize=(10,6))
plt.xlabel("年份",labelpad=20) # 设置x轴标签
plt.ylabel("销量",labelpad=20) # 设置y轴标签
plt.title("双十一销售量数据趋势",loc='center') # 设置标题
plt.legend(title="销量",loc='upper center',title_fontsize=10,frameon=False) # 设置图例
plt.xticks(pd.date_range('20231101',periods=30),['{}日'.format(i+1) for i in range(30)],rotation=45) # 设置x轴刻度
plt.yticks(np.arange(100,1100,100),['{}单'.format(i*100) for i in range(10)]) # 设置y轴刻度
plt.ylim(0,1100) # 设置y轴范围
for x,y in zip(pd.date_range('20231101',periods=30),df['销量'].values): # 设置数据标签
    plt.text(x,y,y, ha='center',va='bottom',fontsize=9)

7.2 柱形图——比较数据分布

柱形图是一种以长方形的长度为变量的统计图表。长条图用来比较两个或以上的价值,通常利用于较小的数据集分析

#导入数据
df=pd.DataFrame(data={'客户性别':['男','女'],
                      '销售数': np.random.randint(low=100,high=5000,size=2)}
               )

x=df['客户性别'].tolist()
y=df['销售数'].tolist()

#绘制柱状图
plt.bar(x,y,width=0.2,align='center',label='销售量')
plt.title('不同性别客户销售数',loc='center')

#设置x和y轴的名称
plt.xlabel('客户性别')
plt.ylabel('销售数')

#添加数据标签
for a,b in zip(x, y):
    plt.text(a,b,b,ha = "center", va = "bottom", fontsize = 12)

plt.legend(loc='upper center',title_fontsize=10,frameon=False) #显示图例
plt.show() #显示图像

7.3 条形图——多条数据分类对比

条形图是用宽度相同的条形的高度或长短来表示数据变动的图形。条形图可以横置或纵置,纵置时也称为柱形图,可横向做分类对比。

psl.use('ggplot')
plt.figure(figsize=(10,6))

#导入数据
df=pd.DataFrame(data={'商品品类':['床品件套','厨房电器','汽车配件','浴室用品',
                              '卧室家具','电脑硬件','家装饰品','办公家具'],
                      '销售数': np.random.randint(low=100,high=5000,size=8)}
               )

x=df['商品品类'].tolist()
y=df['销售数'].tolist()

# 绘制柱状图
plt.barh(x,width=y,height=0.5,align='center',label='销售数')
plt.title('不同商品品类销售数',loc='center')

plt.xlabel('销售数')
plt.ylabel('商品品类')


for a,b in zip(x,y):
        plt.text(b,a,b,ha = "center", va = "center", fontsize = 12)

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

7.4 饼图——表示占比

主要用于表示一个样本(或总体)中各组成部分的数据占全部数据的比例

#导入数据
df=pd.DataFrame(data={'区域':['华东','华北','东北','西北','西南','华南'],
                      '销售数': np.random.randint(low=100,high=5000,size=6)}
               )

x = df['销售数'].tolist()
labels = df['区域'].tolist()
explode = [0.05,0.05,0,0,0,0] # 用于突出显示特定区域

plt.pie(x,
        autopct='%0.1f%%', #数据标签
        labels=labels,
        startangle=90, #初始角度
        explode=explode, # 突出显示数据
        pctdistance=0.87,  # 设置百分比标签与圆心的距离
        textprops = {'fontsize':12, 'color':'k'}, # 设置文本标签的属性值
        counterclock = False, # 是否逆时针
        )

plt.title("双11各区域销售数占比")

7.5 图表选择

  • 比较数据:当你需要比较不同类别或不同时间点的数据时,条形图和饼图是很好的选择。条形图可以用来比较不同类别的数据,而饼图则可以用于展示部分与整体的关系。
  • 趋势分析:如果你想展示数据的趋势,例如随时间的变化,线形图或柱状图是很好的选择。线形图适用于时间序列数据,而柱状图则在类别数据上效果更好。
  • 部分与整体的关系饼图或堆叠条形图可以用来展示部分与整体的关系。饼图适用于简单的比例关系,而堆叠条形图可以用于显示不同类别的累积效应。
  • 相关性分析:如果你想展示两个变量之间的关系,散点图是好的选择。通过散点图,你可以观察到两个变量之间的趋势和关联。
  • 时间序列数据:如果你正在处理时间序列数据,例如温度随时间的变化,那么线形图或者柱状图(如果时间被解释为类别)可能都会很有效。
  • 多变量数据:如果你有多维度的数据需要展示,例如多个产品在不同地区和时间的销售情况,可能需要使用更复杂的图表类型,如热力图、小提琴图等。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值