首页 > 编程语言 >Python绘制多种形式的条形图(柱状图)

Python绘制多种形式的条形图(柱状图)

时间:2023-08-03 18:33:00浏览次数:40  
标签:plt gold Python country width 柱状图 num fontsize 条形图

绘图前的准备

因为涉及到中文显示,所以需要用两行代码解决中文乱码问题

import numpy as np
from matplotlib import pyplot as plt

plt.rcParams['font.sans-serif'] = [u'SimHei'] # SimHei就是中文字体
# 因为设置了中文后,负号就乱码了,所以还要设置负号的编码
plt.rcParams['axes.unicode_minus'] = False # 修改坐标轴中符号的编码
# 设置图片尺寸和分辨率
plt.figure(figsize=(10,8),dpi=100) # 1000*800 像素

1、竖放单条形图

准备数据

# 国家
countries = ['挪威','德国','中国','美国','瑞典']
# 国家的序号0-4
country_num = np.arange(len(countries))
# 金牌数
gold_num = np.array([16,12,9,8,8])

绘制图形并显示

# 绘制柱状图
plt.bar(countries,gold_num,width=0.3,color='gold')
# 设置坐标轴标签
plt.xlabel('国家', fontsize=14,loc='right')
plt.ylabel('奖牌数', fontsize=14,loc='top')
# 设置图形标题
plt.title('冬奥会各个国家所获奖牌数',fontsize=18)
# 设置x轴刻度
plt.xticks(country_num,countries,fontsize=14)
# 给每一个柱体添加数据显示
for i in country_num:
    plt.text(country_num[i], gold_num[i], gold_num[i], 
             fontdict=dict(fontsize=14),va='bottom',ha='center')

plt.show()

Python绘制多种形式的条形图(柱状图)_图例

2、竖放多条形图

如果要同时绘制金银铜牌的数量图,可以使用多条形图绘制 准备数据

# 国家
countries = ['挪威','德国','中国','美国','瑞典']
# 国家的序号0-4
country_num = np.arange(len(countries))
# 金牌数
gold_num = np.array([16,12,9,8,8])
# 银牌数
silver_num = np.array([8,10,4,10,5])
# 铜牌数
bronze_num = np.array([13,5,2,7,5])

绘制图形并展示

# 设置每个条形的宽度
width = 0.2
# 银牌在x轴刻度的起始位置
silver_start = country_num
# 金牌在x轴刻度的起始位置
gold_start = country_num + width
# 铜牌在x轴刻度的起始位置
bronze_start = country_num + width*2

# 加上label标签,为设置图例使用
plt.bar(silver_start, silver_num, width=width,color='silver',label='银牌')
plt.bar(gold_start, gold_num, width=width,color='gold',label='金牌')
plt.bar(bronze_start, bronze_num, width=width,color='#4c300a',label='铜牌')
plt.xlabel('国家', fontsize=14,loc='right')
plt.ylabel('奖牌数', fontsize=14,loc='top')
plt.title('冬奥会各个国家所获奖牌数',fontsize=18)
# 为了让国家名称在三个柱状的中间,需要改变xticks
plt.xticks(gold_start,countries,fontsize=14)
# 设置图例
plt.legend()
for i in country_num:
    plt.text(gold_start[i], gold_num[i], gold_num[i], 
              fontdict=dict(fontsize=14),va='bottom',ha='center')
    plt.text(silver_start[i], silver_num[i], silver_num[i], 
              fontdict=dict(fontsize=14),va='bottom',ha='center')
    plt.text(bronze_start[i], bronze_num[i], bronze_num[i], 
              fontdict=dict(fontsize=14),va='bottom',ha='center')
plt.show()

Python绘制多种形式的条形图(柱状图)_图例_02

3、堆叠条形图

如果要同时直观展示奖牌总数,可以使用堆叠柱状图 准备数据

# 国家
countries = ['挪威','德国','中国','美国','瑞典']
# 国家的序号0-4
country_num = np.arange(len(countries))
# 金牌数
gold_num = np.array([16,12,9,8,8])
# 银牌数
silver_num = np.array([8,10,4,10,5])
# 铜牌数
bronze_num = np.array([13,5,2,7,5])

绘制图形并展示

width = 0.3
# 设置bottom属性,表示柱体从bottom高度向上绘制
# 铜牌柱体在最下面
plt.bar(country_num, bronze_num, bottom=0,width=width,color='#4c300a',label='铜牌')
# 银牌在铜牌上面 bottom=bronze_num
plt.bar(country_num, silver_num, bottom=bronze_num,width=width,color='silver',label='银牌')
# 金牌在银牌上面 bottom=bronze_num+silver_num
plt.bar(country_num, gold_num, bottom=bronze_num+silver_num,width=width,color='gold',label='金牌')
plt.xlabel('国家', fontsize=14,loc='right')
plt.ylabel('奖牌数', fontsize=14,loc='top')
plt.title('冬奥会各个国家所获奖牌数',fontsize=18)
plt.xticks(country_num,countries,fontsize=14)
# 设置图例
plt.legend()
# 在每个柱体上面标记奖牌总数
for i in country_num:
    sum = bronze_num[i]+silver_num[i]+gold_num[i]
    plt.text(i, sum, sum, fontdict=dict(fontsize=14),va='bottom',ha='center')
plt.show()

Python绘制多种形式的条形图(柱状图)_绘制图形_03

标签:plt,gold,Python,country,width,柱状图,num,fontsize,条形图
From: https://blog.51cto.com/u_16200950/6951795

相关文章

  • python3.13是否移除了GIL的限制
     近日看到新闻:https://baijiahao.baidu.com/s?id=1773013936355276204&wfr=spider&for=pchttps://www.thepaper.cn/newsDetail_forward_24052522?commTag=true         ==================================================  乍一看好像说的是Pytho......
  • Ubuntu 更新后出现多个 Python 版本
    电脑本来只有一个Python3.10,可能是由于系统升级的原因,发现电脑多了一个Python3.11版本,这带来了好多麻烦,比如我很多软件包都安装在python3.10中,但是命令行输入pip调用的是python3.11的,并且之前创建的虚拟环境感觉也不太正常了。我决定删除旧版本Pythonpython3.10-m......
  • 18.python打包win32print时报错,说找不到该模块
    相关插件自己提前安装好。代码:1#encoding:utf-823fromtkinterimport*4fromtkinterimportmessagebox5importwin32print6importtime7fromtkinterimportscrolledtext89#控制输入框只能输入数字且小于8位数10defvalidate_op(in......
  • Python中实现远程调用(RPC、RMI)简单例子
    远程调用使得调用远程服务器的对象、方法的方式就和调用本地对象、方法的方式差不多,因为我们通过网络编程把这些都隐藏起来了。远程调用是分布式系统的基础。远程调用一般分为两种,远程过程调用(RPC)和远程方法调用(RMI)。RPCRPC属于函数级别的远程调用,其多是通过HTTP传输数据,数据形式有......
  • python以及java环境搭建+解决不同版本环境共存问题
    1.搭建python环境1.安装python3.9.7,选择自定义安装、将文件添加至环境路径,然后选择下一步。2.默认、然后选择下一步。3.选择适用于所有使用者,选择自己想要存放的路径,然后选择点击安装。等待片刻。。。4.点击安装完成。使用cdm命令,输入python查看是否安装成功。5.安装python2......
  • minio python sdk使用
    如下fromminioimportMiniofromminio.errorimportS3Errorimportlogginglogging.basicConfig(filename='logs/myProgramLog.log',level=logging.INFO,format='%(asctime)s-%(levelname)s-%(message)s')classBucket......
  • [算法题python]728.自除数
    自除数 是指可以被它包含的每一位数整除的数。例如,128 是一个 自除数 ,因为 128%1==0,128%2==0,128%8==0。自除数 不允许包含0。给定两个整数 left 和 right ,返回一个列表,列表的元素是范围 [left,right] 内所有的 自除数 。 示例1:输入:left=......
  • Python | 判断语句、循环语句
    上一篇:Python|基础语法判断是程序最基础最核心的逻辑功能。1.布尔类型和比较运算符1.1布尔(bool)类型布尔(bool)表达现实生活中的逻辑,即真和假:True表示真;False表示假。True本质上是一个数字记作1,False记作01.1.1布尔类型字面量True表示真(是、肯定)False表示假(否......
  • python第三天
    python开发ide:pycharm,eclipse一、运算符1、算数运算符+-*/幂**余%求整数9//2=4判断字符是否在字符串里面in   notinname="阿拉斯加"if"文件"inname:print("ok")else:print("notok")  2、比较运算符==<><=>=!=不等于<......
  • [数据分析与可视化] Python绘制数据地图4-MovingPandas入门指北
    MovingPandas是一个基于Python和GeoPandas的开源地理时空数据处理库,用于处理移动物体的轨迹数据。它提供了一组强大的工具,可以轻松地加载、分析和可视化移动物体的轨迹。通过使用MovingPandas,用户可以轻松地处理和分析移动对象数据,并从中提取有关行为、模式和趋势的见解。无论是处......