文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python 之 Matplotlib 柱状图(竖直柱状图和水平柱状图)、直方图和饼状图

2023-09-05 17:23

关注

文章目录

from matplotlib import pyplot as pltimport numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = False​plt.rcParams['figure.dpi'] = 100​plt.rcParams['figure.figsize'] = (5,3)

一、柱状图

在这里插入图片描述

二、竖直柱状图

matplotlib.pyplot.bar(x, height, width: float = 0.8, bottom = None, *, align: str = ‘center’, data = None, **kwargs)

1. 基本的柱状图

import matplotlib.pyplot as pltx = range(5)​data = [5, 20, 15, 25, 10]​plt.title("基本柱状图")plt.grid(ls="--", alpha=0.5)plt.bar(x, data)

在这里插入图片描述

import matplotlib.pyplot as pltx = range(5)​data = [5, 20, 15, 25, 10]​plt.title("基本柱状图")​plt.grid(ls="--", alpha=0.5)plt.bar(x, data, bottom=[10, 20, 5, 0, 10])

在这里插入图片描述

import matplotlib.pyplot as pltx = range(5)data = [5, 20, 15, 25, 10]​plt.title("设置柱状图颜色")plt.grid(ls="--", alpha=0.5)​plt.bar(x, data ,facecolor="green")#plt.bar(x, data ,color="green")

在这里插入图片描述

import matplotlib.pyplot as pltx = range(5)data = [5, 20, 15, 25, 10]plt.title("color参数设置柱状图不同颜色")plt.grid(ls="--", alpha=0.5)plt.bar(x, data ,color=['r', 'g', 'b'])

在这里插入图片描述

import matplotlib.pyplot as plt​data = [5, 20, 15, 25, 10]​plt.title("设置边缘线条样式")​plt.bar(range(len(data)), data, ec='r', ls='--', lw=2)

在这里插入图片描述

2. 同位置多柱状图

在这里插入图片描述

在这里插入图片描述

countries = ['挪威', '德国', '中国', '美国', '瑞典']gold_medal = [16, 12, 9, 8, 8]silver_medal = [8, 10, 4, 10, 5]bronze_medal = [13, 5, 2, 7, 5]
plt.bar(countries, gold_medal,color="gold")plt.bar(countries,silver_medal,color="silver")plt.bar(countries,bronze_medal,color="red")

在这里插入图片描述

x = np.arange(len(countries))print(x)width = 0.2#[0 1 2 3 4]
gold_x = x​silver_x = x + width​bronze_x = x + 2 * width
plt.bar(gold_x,gold_medal,width=width,color="gold")​plt.bar(silver_x,silver_medal,width=width,color="silver")​plt.bar(bronze_x,bronze_medal,width=width, color="saddlebrown")

在这里插入图片描述

plt.xticks(x+width, labels=countries)

在这里插入图片描述

for i in range(len(countries)):    plt.text(gold_x[i],gold_medal[i], gold_medal[i],va="bottom",ha="center",fontsize=8)    plt.text(silver_x[i],silver_medal[i], gold_medal[i],va="bottom",ha="center",fontsize=8)    plt.text(bronze_x[i],bronze_medal[i], gold_medal[i],va="bottom",ha="center",fontsize=8)  plt.legend()

在这里插入图片描述

#库导入from matplotlib import pyplot as pltimport numpy as np#参数设置plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falseplt.rcParams['figure.dpi'] = 100plt.rcParams['figure.figsize'] = (5,3)#国家和奖牌数据导入countries = ['挪威', '德国', '中国', '美国', '瑞典']gold_medal = [16, 12, 9, 8, 8]silver_medal = [8, 10, 4, 10, 5]bronze_medal = [13, 5, 2, 7, 5]#将横坐标国家转换为数值x = np.arange(len(countries))width = 0.2#计算每一块的起始坐标gold_x = xsilver_x = x + widthbronze_x = x + 2 * width#绘图plt.bar(gold_x,gold_medal,width=width,color="gold",label="金牌")plt.bar(silver_x,silver_medal,width=width,color="silver",label="银牌")plt.bar(bronze_x,bronze_medal,width=width, color="saddlebrown",label="铜牌")#将横坐标数值转换为国家plt.xticks(x + width,labels=countries)#显示柱状图的高度文本for i in range(len(countries)):    plt.text(gold_x[i],gold_medal[i], gold_medal[i],va="bottom",ha="center",fontsize=8)    plt.text(silver_x[i],silver_medal[i], gold_medal[i],va="bottom",ha="center",fontsize=8)    plt.text(bronze_x[i],bronze_medal[i], gold_medal[i],va="bottom",ha="center",fontsize=8)  #显示图例plt.legend(loc="upper right") 

3. 堆叠柱状图

在这里插入图片描述

#库导入from matplotlib import pyplot as pltimport numpy as np#参数设置plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falseplt.rcParams['figure.dpi'] = 100plt.rcParams['figure.figsize'] = (5,3)#国家和奖牌数据输入、柱状图宽度设置countries = ['挪威', '德国', '中国', '美国', '瑞典']gold_medal = np.array([16, 12, 9, 8, 8])silver_medal = np.array([8, 10, 4, 10, 5])bronze_medal = np.array([13, 5, 2, 7, 5])​width = 0.3#绘图plt.bar(countries, gold_medal, color='gold', label='金牌',        bottom=silver_medal + bronze_medal,width=width)plt.bar(countries, silver_medal, color='silver', label='银牌', bottom=bronze_medal,width=width)​plt.bar(countries, bronze_medal, color='#A0522D', label='铜牌',width=width)#设置y轴标签,图例和文本值​plt.ylabel('奖牌数')​plt.legend(loc='upper right')for i in range(len(countries)):    max_y = bronze_medal[i]+silver_medal[i]+gold_medal[i]    plt.text(countries[i], max_y, max_y, va="bottom", ha="center")

在这里插入图片描述

三、水平柱状图

1. 基本的柱状图

plt.barh(y, width, height=0.8, left=None, *, align='center', **kwargs)
countries = ['挪威', '德国', '中国', '美国', '瑞典']gold_medal = np.array([16, 12, 9, 8, 8])plt.barh(countries, width=gold_medal)

在这里插入图片描述

2. 同位置多柱状图

movie = ['新蝙蝠侠', '狙击手', '奇迹笨小孩']real_day1 = [4053, 2548, 1543]real_day2 = [7840, 4013, 2421]real_day3 = [8080, 3673, 1342]
#库导入from matplotlib import pyplot as pltimport numpy as np#参数设置plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falseplt.rcParams['figure.dpi'] = 100plt.rcParams['figure.figsize'] = (5,3)#数据的输入movie = ['新蝙蝠侠', '狙击手', '奇迹笨小孩']real_day1 = np.array( [4053, 2548, 1543])​real_day2 = np.array([7840, 4013, 2421])​real_day3 = np.array([8080, 3673, 1342])​​#y轴转换为数值型num_y = np.arange(len(movie))#设置同图形的高度height = 0.2#计算每个图形高度的起始位置movie1_start_y = num_y              movie2_start_y = num_y + height      movie3_start_y = num_y + 2 * height  ​​#绘制图形​plt.barh(movie1_start_y, real_day1, height=height)​plt.barh(movie2_start_y, real_day2,  height=height)​plt.barh(movie3_start_y, real_day3, height=height)# 计算宽度值和y轴值,替换y轴数据​plt.yticks(num_y + height, movie)

在这里插入图片描述

3. 堆叠柱状图

在这里插入图片描述

#库导入from matplotlib import pyplot as pltimport numpy as np#参数设置plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falseplt.rcParams['figure.dpi'] = 100plt.rcParams['figure.figsize'] = (5,3)#数据的输入movie = ['新蝙蝠侠', '狙击手', '奇迹笨小孩']real_day1 = np.array( [4053, 2548, 1543])real_day2 = np.array([7840, 4013, 2421])real_day3 = np.array([8080, 3673, 1342])#确定距离左侧​left_day2 = real_day1​left_day3 = real_day1 + real_day2 ​# 设置线条高度height = 0.2# 绘制图形:plt.barh(movie, real_day1, height=height)​plt.barh(movie, real_day2, left=left_day2, height=height) ​plt.barh(movie, real_day3, left=left_day3, height=height)# 设置数值文本,计算宽度值和y轴为值​sum_data = real_day1 + real_day2 +real_day3for i in range(len(movie)):    plt.text(sum_data[i], movie[i], sum_data[i],va="center" , ha="left")

在这里插入图片描述

四、直方图 plt.hist()

在这里插入图片描述

柱状图直方图
柱状图一般用于描述离散型分类数据的对比直方图一般用于描述连续型数据的分布关系
每根柱子宽度固定,柱子之间会有间距每根柱子宽度可以不一样,且一般没有间距
横轴变量可以任意排序横轴变量有一定顺序规则
plt.hist(x, bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, normed=None, *, data=None, **kwargs)
x_value = np.random.randint(140,180,300)plt.hist(x_value, bins=10, edgecolor='white')plt.title("数据统计")plt.xlabel("身高")plt.ylabel("比率")

在这里插入图片描述

1. 返回值

num#array([25., 28., 34., 39., 29., 25., 37., 34., 26., 23.])bins_limit#array([140. , 143.9, 147.8, 151.7, 155.6, 159.5, 163.4, 167.3, 171.2,#       175.1, 179. ])for i in patches:    print(i)    print(i.get_x())    print(i.get_y())    print(i.get_height())    print(i.get_width())

在这里插入图片描述

patches[0].get_width()#3.9000000000000057

在这里插入图片描述

2. 添加折线直方图

#创建一个画布fig, ax = plt.subplots()# 绘制直方图num,bins_limit,patches = ax.hist(x_value, bins=10, edgecolor='white')# 注意num返回的个数是10,bins_limit返回的个数为11,需要截取print(bins_limit[:-1])# 曲线图ax.plot(bins_limit[:10], num, '--',marker="o")plt.xticks(bins_limit,rotation=45)

在这里插入图片描述

3. 不等距分组

fig, ax = plt.subplots()x = np.random.normal(100,20,100)bins = [50, 60, 70, 90, 100,110, 140, 150]ax.hist(x, bins, color="g",rwidth=0.5)ax.set_title('不等距分组')plt.show()

在这里插入图片描述

4. 多类型直方图

n_bins=10​fig,ax=plt.subplots(figsize=(8,5))​x_multi = [np.random.randn(n) for n in [10000, 5000, 2000]]​ax.hist(x_multi, n_bins, histtype='bar',label=list("ABC"))​ax.set_title('多类型直方图')​ax.legend()

在这里插入图片描述

5. 堆叠直方图

x_value = np.random.randint(140,180,200)x2_value = np.random.randint(140,180,200)
plt.hist([x_value,x2_value],bins=10, stacked=True)#([array([16., 23., 27., 22., 13., 22., 18., 21., 18., 20.]),#  array([39., 46., 44., 35., 33., 47., 41., 42., 33., 40.])],# array([140. , 143.9, 147.8, 151.7, 155.6, 159.5, 163.4, 167.3, 171.2,#        175.1, 179. ]),

在这里插入图片描述

五、饼状图 pie()

pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None)

在这里插入图片描述

plt.rcParams['figure.figsize'] = (5,5)labels = ['娱乐','育儿','饮食','房贷','交通','其它']​x = [200,500,1200,7000,200,900]​plt.pie(x,labels=labels)#[Text(1.09783,0.0690696,'娱乐'),#  Text(1.05632,0.30689,'育儿'),#  Text(0.753002,0.801865,'饮食'),#  Text(-1.06544,-0.273559,'房贷'),#  Text(0.889919,-0.646564,'交通'),#  Text(1.05632,-0.30689,'其它')])

在这里插入图片描述

1. 百分比显示 percentage

labels = ['娱乐','育儿','饮食','房贷','交通','其它']​x = [200,500,1200,7000,200,900]​plt.title("饼图示例-8月份家庭支出")​plt.pie(x,labels=labels,autopct='%.2f%%')#[Text(1.09783,0.0690696,'娱乐'),#  Text(1.05632,0.30689,'育儿'),#  Text(0.753002,0.801865,'饮食'),#  Text(-1.06544,-0.273559,'房贷'),#  Text(0.889919,-0.646564,'交通'),#  Text(1.05632,-0.30689,'其它')],# [Text(0.598816,0.0376743,'2.00%'),#  Text(0.576176,0.167395,'5.00%'),#  Text(0.410728,0.437381,'12.00%'),#  Text(-0.58115,-0.149214,'70.00%'),#  Text(0.48541,-0.352671,'2.00%'),#  Text(0.576176,-0.167395,'9.00%')])

在这里插入图片描述

2. 饼状图的分离

labels = ['娱乐','育儿','饮食','房贷','交通','其它']x = [200,500,1200,7000,200,900]​explode = (0.03,0.05,0.06,0.04,0.08,0.21)​plt.pie(x,labels=labels,autopct='%3.2f%%',explode=explode)

在这里插入图片描述

3. 设置饼状图百分比和文本距离中心位置

labels = ['娱乐','育儿','饮食','房贷','交通','其它']​x = [200,500,1200,7000,200,900]​explode = (0.03,0.05,0.06,0.04,0.08,0.1)​plt.pie(x,labels=labels,autopct='%3.2f%%',explode=explode, labeldistance=1.35, pctdistance=1.2)

在这里插入图片描述

4. 图例

labels = ['娱乐','育儿','饮食','房贷','交通','其它']​x = [200,500,1200,7000,200,900]​explode = (0.03,0.05,0.06,0.04,0.08,0.1)​plt.pie(x,labels=labels,autopct='%3.2f%%',explode=explode, labeldistance=1.35, pctdistance=1.2)plt.legend()

在这里插入图片描述

来源地址:https://blog.csdn.net/weixin_45891612/article/details/129082746

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯