偏移 柱状图_Matplotlib图鉴基础柱状图79

本文是Matplotlib柱状图系列的第三篇,主要介绍如何绘制分组柱状图,包括基础的分组柱状图、添加数值显示以及水平分组柱状图的制作方法。
摘要由CSDN通过智能技术生成

7dcdfce69fee315a969584e3f8d80905.gif

本文为Matplotlib柱状图系列基础柱状图绘制的第三篇文章,主要将讲解如何绘制分组柱状图。9ad0cb7eecafa937ca518a36da749e5e.png8847fd6d08d8da92322409338f6ad4de.pngda1ad5de5557a824a5cd0581a8d88493.png

基础柱状图-007

下面我们就来讲解如何绘制第一个分组柱状图,我们以两系列分组柱状图为例。注意,代码在以下环境全部通过测试:

  • Python == 3.7.1
  • matplotlib == 3.0.2
  • pandas == 0.23.4
  • numpy == 1.15.4

因版本不同,可能会有部分语法差异,如有报错,请先检查拼写及版本是否一致!

首先导入相关库

import matplotlib
print(matplotlib.__version__) #查看Matplotlib版本
import pandas as pd
print(pd.__version__) #查看pandas版本
import numpy as np
print(np.__version__) #查看numpy版本
import matplotlib.pyplot as plt 
plt.rcParams['font.sans-serif'] = ['SimHei']  #设置中文

和以前一样,我们先创建一组简单的数据

x = np.array(list(range(7)))
y1 = [7,6,5,4,3,2,1]
y2 = [6,2,3,3,1,1,0.5]

接下来很关键的是,其实分组柱状图,就是在同一个画布上,先绘制一个柱状图,然后再绘制一个柱状图,让第二个柱状图的每根柱子放在第一根柱子的某一侧就行了,就这么简单!所以我们需要设置这个偏移量如下

width = 0.4
x = x - 0.2

现在就可以和以前一样,创建一个画布,并绘制柱状图

plt.figure(figsize=(9,6))

plt.bar(x, y1,  width=width, label='系列1',edgecolor = 'black',alpha = 0.7)
plt.bar(x + width, y2, width=width, label='系列2',edgecolor = 'black')
7b889109319d39c475cfb310f9979911.png

接下来就是修改X轴、添加标题等修饰,最终完整代码和效果如下

x = np.array(list(range(7)))
y1 = [7,6,5,4,3,2,1]
y2 = [6,2,3,3,1,1,0.5]

width = 0.4
x = x - 0.2

plt.figure(figsize=(9,6))

plt.bar(x, y1,  width=width, label='系列1',edgecolor = 'black',alpha = 0.7)
plt.bar(x + width, y2, width=width, label='系列2',edgecolor = 'black')

plt.xticks(x + 0.2,['周一', '周二', '周三', '周四', '周五', '周六', '周日'])


plt.legend(loc=1,fontsize=13)  # 设置图例位置
plt.ylabel('我是Y轴',fontsize=15)
plt.xlabel('我是X轴',fontsize=15)
plt.title("基础柱状图——分组柱状图",fontsize=17)

plt.show()
9ad0cb7eecafa937ca518a36da749e5e.png
03_01

基础柱状图-008

在上面学会了如何制作分组柱状图之后,我们来给每个柱子添加数值来更具体的展示差异!

其实和基础柱状图第二篇中的添加百分比类似,就是利用plt.text来往画布上添加文字

最重要的就是计算每个文字的位置,之后循环写入即可,所以只需要在上一幅的基础下,在plt.show()之前添加下面代码即可

for a, b in zip(x,y1):
    plt.text(a, b+0.1, b, ha='center', va='bottom',fontsize = 14)
    
for a,b in zip(x,y2):
    plt.text(a+width, b+0.1, b, ha='center', va='bottom',fontsize = 14)
8847fd6d08d8da92322409338f6ad4de.png
03_02

基础柱状图-009

最后是水平分组柱状图的制作方法,水平在上一篇有讲,本篇就不再展开讲解,下面是完整代码!

x = np.array([1,2,3,4,5,6,7])
y1 = [7,5,3,4,3,2,1]
y2 = [6,2,6,3,1,1,0.5]
names = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
width = 0.4

fig, ax = plt.subplots(figsize=(9,6))
ax.barh(x, y1, width, label='系列1',edgecolor = 'black',alpha = 0.7)
ax.barh(x + width, y2, width, label='系列2',edgecolor = 'black',color = 'deeppink',alpha = 0.7)

ax.set(yticks=x + 0.2, yticklabels=names, ylim=[0.5, 8])

ax.set_title("基础柱状图——分组柱状图——水平",fontsize = 16)
ax.set_xlabel('我是X轴',fontsize=15)
ax.set_ylabel('我是Y轴',fontsize=15)
ax.legend(fontsize = 14)


for i in range(len(x)):
    
    plt.text(y1[i]+0.1,x[i]-0.1,y1[i],fontsize = 12)
    
    plt.text(y2[i]+0.1,x[i]+0.3,y2[i],fontsize = 12)

plt.show()
a24622011dee08bb846993911165f053.png

好了,基础柱状图第三篇到这里就结束了,对于本篇内容有任何问题欢迎也请一定给我留言,谢谢!

-END-

6773cbc89a8631b9d10a7c16242305a5.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值