python横向柱状图问题

想做一个百分比占比图,所有数据都是float小数。不知道打标签同时把它们转换成百分比。
我做的图是这样的

img

表格和代码是这样的

img

plt.figure(figsize=(8,4),dpi=300)#定义画布
plt.barh(img_cost_structure['variable'],width=img_cost_structure['value'],height=0.4,error_kw = {'ecolor' : '0.2', 'capsize' :2},color='y',edgecolor='black')#画横向柱状图
plt.show()  

我想做成下面的样子

img

该怎么做?

import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
y_data = [ 10, 21, 13, 7, ]
x_data = ('a', 'b', 'c', 'd')
bar=plt.barh(x_data, y_data)
def to_percent(temp, position):
  return '%1.0f'%(temp) + '%'
#plt.gca().yaxis.set_major_formatter(FuncFormatter(to_percent))
plt.gca().xaxis.set_major_formatter(FuncFormatter(to_percent))
plt.bar_label(bar,fmt='%g%%')

img


希望有用

该回答引用GPTᴼᴾᴱᴺᴬᴵ
你可以使用 matplotlib 库来绘制横向柱状图,并将标签转换为百分比形式。下面是一个示例代码:

import matplotlib.pyplot as plt
import numpy as np

# 数据
data = np.array([0.12, 0.34, 0.54, 0.78])
labels = ['A', 'B', 'C', 'D']

# 将数据转换为百分比形式
data = data * 100

# 绘制横向柱状图
fig, ax = plt.subplots()
y_pos = np.arange(len(data))
ax.barh(y_pos, data, align='center')
ax.set_yticks(y_pos)
ax.set_yticklabels(labels)
ax.invert_yaxis()  # 反转 y 轴
ax.set_xlabel('Percentage')

# 在柱状图上添加标签
for i, v in enumerate(data):
    ax.text(v + 1, i, '{:.1f}%'.format(v), color='blue')

plt.show()


在这个示例代码中,我们首先将数据转换为百分比形式,然后绘制了横向柱状图,并在柱状图上添加了标签。标签使用了 ax.text 函数,并将标签转换为百分比形式。'{:.1f}%' 格式化字符串中的 :.1f 表示保留一位小数,% 表示输出百分号。

你可以根据自己的数据和需求修改示例代码,达到你想要的效果。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^