Matplotlib作图要点总结

 

1折线图plot

1.1参数配置:

x = df['日期']  # x轴数据

y = df['销量']  # y轴数据

# figsize:画布大小,长*高

# dpi:分辨率

# facecolor:背景颜色

plt.figure(figsize=(5, 3), facecolor='gray', dpi=100)

# color:线条颜色

# linestyle:线条样式

# marker:标记样式(形状)

# mfc:marker face color标记背景颜色

plt.plot(x, y, color='blue', linestyle='-', marker='o', mfc='white', label='销量')

# title: 图表标题

# fontsize:字体大小

plt.title(label='2021年6月1-15日的销量折线图', loc='center', fontsize=18)

plt.xlabel('2021年6月') # x轴标题

plt.ylabel('销量', rotation=0) # y轴标题

# xticks:设置x轴刻度

plt.xticks(ticks=df['日期'],

           labels=[str(x) + '日' for x in df['日期']],

           rotation=30)

plt.yticks(ticks=range(0, 120, 10))

# 设置x轴刻度范围

plt.xlim(0, 15)

# 设置y轴刻度范围

plt.ylim(0, 140)

# grid:网格线

# linewidth:线条宽度

plt.grid(color='0.5', linestyle=':', linewidth=1, axis='y')

for a, b in zip(x, y):

    # text:数据标签

    plt.text(x=a, # x坐标值

             y=b+5, # y坐标值

             s='{:.0f}'.format(b), # 显示内容及格式

             ha='center', # 水平居中

             va='bottom', # 垂直靠下

             fontsize=10)

# legend: 图例

# 插入数据后,再添加图例

plt.legend(loc='upper left')

plt.annotate(text='最高销量', # 注释内容

             xy=(13, 98), # 被注释的坐标点

             xytext=(12, 50), # 注释内容的坐标点

             arrowprops=dict(facecolor='b', width=0.5, headwidth=4))

# 先保存本地,再显示图形

plt.savefig('02-折线图.png')

plt.show()

1.2多条折线图

# x = df['月份']

# y1 = df['键盘']

# y2 = df['鼠标']

# y3 = df['音响']

x, y1, y2, y3 = df['月份'], df['键盘'], df['鼠标'], df['音响']

plt.figure(figsize=(5, 3), dpi=150)

plt.title('各产品销量折线图', fontsize='18')

plt.plot(x, y1, label='键盘', color='y', marker='p')

# ms:marker size标记大小

# alpha:透明度

plt.plot(x, y2, label='鼠标', color='g', marker='.', mfc='r', ms=8, alpha=0.7)

plt.plot(x, y3, label='音响', color='b', marker='*', linestyle='-.')

plt.hlines(y=88, xmin=0, xmax=9, linestyles=':', color='#d50000')

plt.grid(axis='y')

plt.ylabel('销量')

plt.yticks(range(0, 110, 10))

# plt.ylim(0)

plt.legend()

# plt.legend(['键盘', '鼠标', '音响'])

plt.show()

2柱形图bar

2.1普通柱形图

x, y = df['年份'], df['销售额']

plt.figure(figsize=(5, 3), dpi=150)

plt.title('14-20年销售额趋势')

plt.xlabel('年份')

plt.ylabel('销售额')

plt.bar(x, y, width=0.5)

for a, b in zip(x, y):

    plt.text(x=a, y=b, s='{:.0f}万'.format(b / 10000), fontsize=8, ha='center')

plt.legend(['销售额'])

plt.show()

2.2簇状柱形图
x, y1, y2, y3 = df['年份'], df['北区'], df['中区'], df['南区']

plt.figure(figsize=(5, 3), dpi=150)

plt.title('14-20年各区销售额对比')

plt.xlabel('年份')

plt.ylabel('销售额')

width = 0.25

# 避免图形重叠

# 柱形的宽度必须与x值的偏移量保持一致

plt.bar(x - width, y1, width=width, color='g')

plt.bar(x, y2, width=width, color='y')

plt.bar(x + width, y3, width=width, color='b')

plt.xticks(ticks=range(2014, 2021, 1),

           labels=[str(x) + '年' for x in df['年份']],

           rotation=20)

plt.legend(['北区', '中区', '南区'], ncol=3, fontsize=8)

plt.show()

2.3堆积柱形图

x, y1, y2, y3 = df['年份'], df['北区'], df['中区'], df['南区']

plt.figure(figsize=(5, 3), dpi=150)

plt.title('14-20年各区销售额堆积')

plt.xlabel('年份')

plt.ylabel('销售额')

plt.bar(x, y1, label='北区')

plt.bar(x, y2, label='中区', bottom=y1)

plt.bar(x, y3, label='南区', bottom=y1 + y2)

for a, b in zip(x, y1):

    plt.text(x=a,

             y=b,  # 显示的位置

             s='{:.0f}万'.format(b / 10000),  # 实际值

             ha='center',

             va='top',

             fontsize=6)

for a, b, c in zip(x, y1, y2):

    plt.text(x=a,

             y=b + c,  # 显示的位置

             s='{:.0f}万'.format(c / 10000),  # 实际值

             ha='center',

             va='bottom',

             fontsize=6)

for a, b, c, d in zip(x, y1, y2, y3):

    plt.text(x=a,

             y=b + c + d,  # 显示的位置

             s='{:.0f}万'.format(d / 10000),  # 实际值

             ha='center',

             va='bottom',

             fontsize=6)

plt.legend(ncol=3)

plt.show()

3直方图:hist

x = df['价格']

plt.figure(figsize=(5, 3), dpi=150)

plt.xlabel('价格') # 容易误解为x刻度标签

plt.ylabel('单数') # 容易误解为y刻度标签

# plt.xticks()

# plt.yticks()

plt.title('价格分布直方图')

# plt.xlim(40, 100)

plt.xticks(ticks=range(40, 110, 5))

plt.hist(x,

         bins=range(40, 110, 5),

         facecolor='blue', # 背景颜色

         edgecolor='black', # 边框颜色

         alpha=0.7)

plt.show()

4饼图:pie

plt.figure(figsize=(5, 3), dpi=150)

labels = df['区域']

sizes = df['销量']

plt.pie(

    # 指标

    x=sizes,

    # 区域标签

    labels=labels,

    # 设置百分比

    autopct='%.1f%%',

    # 数据标签字体

    textprops={'fontsize': 5},

    explode=(0.1, 0, 0, 0, 0, 0),

)

plt.title('各区销量占比情况')

plt.show()

5散点图:scatter

# 散点图:观测两个变量之间的相关性

x = df['广告费用']

y = df['销售收入']

plt.figure(figsize=(5, 3), dpi=150)

plt.title('广告费用与销售收入的相关性')

plt.xlabel('广告费用')

plt.ylabel('销售收入')

plt.scatter(x, y)

text = '相关系数:' + str(round(df['广告费用'].corr(df['销售收入']), 2))

plt.text(x=5000, y=90000, s=text)

plt.show()

6面积图:stackplot

7热力图:imshow

# 热力图数据,多行多列的二维数组

data = df.drop('区域', axis=1).values

# df[['产品A', '产品B', '产品C', '产品D', '产品E', '产品F']]

x = df.drop('区域', axis=1).columns  # x轴标签,一维

y = df['区域']  # y轴标签,二维

plt.figure(dpi=150)

# cmap,color map颜色映射

plt.imshow(data, cmap='Blues')

# 添加数据标签

for i in range(len(x)):  # 列号

    for j in range(len(y)):  # 行号

        plt.text(x=i, y=j, s=data[j, i], ha='center', va='center')

plt.xticks(ticks=range(len(x)), labels=x)

plt.yticks(ticks=range(len(y)), labels=y)

plt.colorbar()  # 颜色条,或视觉映射

plt.title('各区域各产品的销量热力图')

plt.show()

8箱线图boxplot

# 观测数据的集中趋势和离散程度

plt.figure(figsize=(5, 3), dpi=100)

plt.boxplot(x=data,

            labels=labels,

            whis=1,  # 基于n倍的四分位距来检测异常值

            # IQR=Q3-Q1

            # upper=Q3+1*IQR,最大不超过最大值

            # lower=Q1-1*IQR,最小不低于最小值

            flierprops={

                # 异常点标记的背景颜色

                'markerfacecolor': 'white',

                # 异常点标记的边框颜色

                'markeredgecolor': 'red',

                # 异常点标记的大小

                'markersize': 3

            })

plt.show()

9雷达图polar

plt.figure(dpi=100)

plt.polar(angles, male, 'b', label='男生')

plt.polar(angles, female, 'g', label='女生')

# plt.xticks:针对直角坐标系

# plt.yticks:针对直角坐标系

# plt.thetagrids: 针对极坐标系

plt.thetagrids(angles=range(0, 360, 60), labels=labels)

plt.ylim(0, 100)

plt.legend(fontsize=6)

plt.show()

10多子图subplot

df['月份'] = df['订单日期'].dt.month

plt.figure(figsize=(5, 8), dpi=150)

# 第1个子图-饼图

plt.subplot(3, 1, 1)

df2 = df.groupby('产品类别').agg({'销售额': 'sum'}).reset_index()

plt.title('各产品的销售额占比')

plt.pie(x=df2['销售额'],

        wedgeprops=dict(edgecolor='w'),

        autopct='%.1f%%',

        labels=df2['产品类别'])

# 设置紧凑布局,避免重叠

plt.tight_layout()

# 第2个子图-折线图

plt.subplot(3, 1, 2)

df1 = df.groupby('月份').agg({'销售额': 'sum'}).reset_index()

plt.xticks(ticks=range(0, len(df1['月份']) + 1, 1))

plt.ylim(0, max(df1['销售额']))

# plt.ylim(0, 600000)

plt.xlabel('月份')

plt.title('各月的销售额趋势')

plt.plot(df1['月份'], df1['销售额'], label='销售额')

# 设置紧凑布局,避免重叠

plt.tight_layout()

# 第3个子图-柱形图

plt.subplot(3, 1, 3)

df3 = df.groupby('地区').agg({'销售额': 'sum'}).reset_index()

plt.title('各区的销售额对比')

plt.bar(df3['地区'], df3['销售额'])

# 设置紧凑布局,避免重叠

plt.tight_layout()

plt.show()

11组合图twinx

x, y1, y2 = df['月份'], df['销量'], df['转化率']

plt.figure(dpi=100)

plt.bar(x=x, height=y1)

plt.ylabel('销量')

plt.title('1-6月的销量及转化率趋势')

for a, b in zip(x, y1):

    plt.text(x=a, y=b, s=b, ha='center')

# 共享x轴,添加一个y轴

# 绘制次y轴的折线图

plt.twinx()

plt.plot(x, y2, color='g', marker='o')

plt.ylim(0, 1)

plt.ylabel('转化率')

for a, b in zip(x, y2):

    plt.text(x=a, y=b + 0.05, s='{:.1%}'.format(b), ha='center')

plt.show()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值