柱状图的应用

一、柱状图

1、基本格式

# 柱状图的绘制
`matplotlib.pyplot.bar(x, height, width: float = 0.8, bottom = None, *, align: str = ‘center’, data = None, **kwargs)`

- x 表示x坐标,数据类型为float类型,一般为np.arange()生成的固定步长列表
- height 表示柱状图的高度,也就是y坐标值,数据类型为float类型,一般为一个列表,包含生成柱状图的所有y值
- width 表示柱状图的宽度,取值在0~1之间,默认值为0.8
- bottom 柱状图的起始位置,也就是y轴的起始坐标,默认值为None
- align 柱状图的中心位置,“center”,"lege"边缘,默认值为’center’
- color 柱状图颜色,默认为蓝色
- alpha 透明度,取值在0~1之间,默认值为1
- label 标签,设置后需要调用plt.legend()生成
- edgecolor 边框颜色 (ec)
- linewidth 边框宽度,浮点数或类数组,默认为None (lw)
- tick_label:柱子的刻度标签,字符串或字符串列表,默认值为None。
- linestyle :线条样式  (ls)

①准备数据

②控制柱宽

③控制第一组数据之后的数据的起始位置 (可以将横坐标的数据转为整数列表型,一般为起始位置+柱宽)

柱形图实例

奖牌实例

import matplotlib
from matplotlib import pyplot as plt
import numpy as np


# 国家
countries = ['挪威', '德国', '中国', '美国', '瑞典']

# 金牌个数
gold_medal = [16, 12, 9, 8, 8]
# 银牌个数
silver_medal = [8, 10, 4, 10, 5]
# 铜牌个数
bronze_medal = [13, 5, 2, 7, 5]

# 1.将x轴转换为数值

x = np.arange(len(countries))
print(x)
# 2.设置图形的宽度
width = 0.2

# ===============确定x起始位置==========
# 金牌起始位置
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")

# ================将x轴的坐标变回来

# 注意x标签的位置未居中
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")
    plt.text(silver_x[i], silver_medal[i], silver_medal[i], va="bottom", ha="center")
    plt.text(bronze_x[i], bronze_medal[i], bronze_medal[i], va="bottom", ha="center")
plt.show()

 2、堆叠型柱状图

设置bottom参数,为柱状图起始位置的y值

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)

# 设置坐标轴
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")

3、水平条形图

调用 Matplotlib 的 barh() 函数可以生成水平柱状图。
- barh() 函数的用法与 bar() 函数的用法基本一样,只是在调用 barh() 函数时使用 y参数传入 Y 轴数据,使用 width 参数传入代表条柱宽度的数据。
`plt.barh(y, width, height=0.8, left=None, *, align='center', **kwargs)`
# 由于牵扯计算,因此将数据转numpy数组
movie = ['新蝙蝠侠', '狙击手', '奇迹笨小孩']
# 第一天
real_day1 = np.array( [4053, 2548, 1543])

# 第二天
real_day2 = np.array([7840, 4013, 2421])

# 第三天
real_day3 = np.array([8080, 3673, 1342])


# =================1.y轴转换为数值型======
num_y = np.arange(len(movie))

# ================2.需要设置同图形的高度========
height = 0.2

# ================3.计算每个图形高度的起始位置 ==========
movie1_start_y = num_y               # 第一个电影不变
movie2_start_y = num_y + height      # 第二个电影加上1倍的height
movie3_start_y = num_y + 2 * height  # 第三个电影加上2倍的height


# ================4.绘制图形 ===================

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轴为值

# ============5.替换y轴数据
plt.yticks(num_y + height, movie)

plt.show()

 堆叠状条形图

# 由于牵扯计算,因此将数据转numpy数组
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_day3
# horizontalalignment控制文本的x位置参数表示文本边界框的左边,中间或右边。---->ha
# verticalalignment控制文本的y位置参数表示文本边界框的底部,中心或顶部 ---- va
for i in range(len(movie)):
    plt.text(sum_data[i], movie[i], sum_data[i],va="center" , ha="left")
plt.xlim(0,sum_data.max()+2000)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Echarts柱状图是一种用于展示数据的图表类型,可以通过柱形的高度来表示数据的大小。在使用Echarts柱状图时,可以设置主标题和副标题以及它们的样式和位置。首先,需要引入相关的文件,如React、Spin、echarts等。然后,可以使用Echarts的初始化方法来创建一个图表实例,并设置主题样式,可以选择使用默认主题或自定义主题。接下来,可以通过设置图表的属性来实现不同的效果,如渐变背景色、整体调色盘、线条样式、面积样式等。可以通过设置lable、visualMap等属性来实现数据的映射。在代码中,可以使用echarts.init方法传入相应的DOM元素和主题来初始化图表。最后,可以通过设置数据和配置项来展示柱状图的数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【Echart多场景示例应用】Echarts柱状图、折线图、饼图、雷达图等完整示例。 echarts主标题和副标题的位置...](https://blog.csdn.net/hdp134793/article/details/129457569)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [echarts 柱状图简单应用](https://blog.csdn.net/hhhhhhhhhtr/article/details/107331346)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [你不知道的Echarts柱状图应用在React中](https://blog.csdn.net/loringray/article/details/104513524)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值