当前位置: 首页 > 知识库问答 >
问题:

如何在Python中绘制水平条形图的百分比标签?

贲绪
2023-03-14

有人可以帮我绘制x轴标签的百分比给我的水平条形图的以下代码吗?

发现很难找到,因为我想要一个没有x轴标签和刻度的更简单的图表。

[水平条形图][1]

# Plot the figure size
plt.figure(figsize= (8,6))

# New variable and plot the question of the data frame in a normalized in a horizontal bar chat. 
ax1 = df[q1].value_counts(normalize=True).sort_values().plot(kind="barh", color='#fd6a02', width=0.75, zorder=2)

# Draw vague vertical axis lines and set lines to the back of the order
vals = ax1.get_xticks()
for tick in vals:
    ax1.axvline(x=tick, linestyle='dashed', alpha=0.4, color = '#d3d3d3', zorder=1)
    
# Tot3als to produce a composition ratio
total_percent = df[q1].value_counts(normalize=True) *100

# Remove borders
ax1.spines['right'].set_visible(False)
ax1.spines['top'].set_visible(False)
ax1.spines['left'].set_visible(False)
ax1.spines['bottom'].set_visible(False)

# Set the title of the graph inline with the Y axis labels. 
ax1.set_title(q1, weight='bold', size=14, loc = 'left', pad=20, x = -0.16)
             
# ax.text(x,y,text,color)
for i,val in enumerate(total):
    ax1.text(val - 1.5, i, str("{:.2%}".format(total_percent), color="w", fontsize=10, zorder=3)

# Create axis labels
plt.xlabel("Ratio of Responses", labelpad=20, weight='bold', size=12)

每次我得到一个EOF错误。有人能帮忙吗?

共有1个答案

钦永贞
2023-03-14

它不是基于您的代码,但我会从官方参考中自定义答案。该点是通过 ax.text() 实现的,这是一个循环过程。

import matplotlib.pyplot as plt
import numpy as np

# Fixing random state for reproducibility
np.random.seed(19680801)

plt.rcdefaults()
fig, ax = plt.subplots()

# Example data
people = ('Tom', 'Dick', 'Harry', 'Slim', 'Jim')
y_pos = np.arange(len(people))
performance = 3 + 10 * np.random.rand(len(people))

ax.barh(y_pos, performance,  align='center')
ax.set_yticks(y_pos)
ax.set_yticklabels(people)
ax.invert_yaxis()  # labels read top-to-bottom
ax.set_xlabel('Performance')
ax.set_title('How fast do you want to go today?')

# Totals to produce a composition ratio
total = sum(performance)

# ax.text(x,y,text,color)
for i,val in enumerate(performance):
    ax.text(val - 1.5, i, str("{:.2%}".format(val/total)), color="w", fontsize=10)

plt.show()
 类似资料:
  • 我正试着做一个水平条形图。我在左轴上总共有24个标签。我在绘制条形图时面临几个问题: 1)条形图开始时,我显示的条目数量有限。用户可以滚动以查看其他条目。正如您在图1中看到的,一个条形图出现在Y轴的“下方”。我无法弄清楚如何将所有条形图保持在轴的顶部。 2)第二个问题是值(或条形图)向下移动了1。“00 AM”标签前面没有条形图,但在11 AM的最后一个条目下方有一个额外的条形图,如第二张图片所示

  • 任何人都可以帮我把城市名称添加到每个水平条的顶部吗?我已经做了其他一切。只需要弄清楚这一点。 这是我为了得到条形图而写的代码。我需要指导每个条顶部的标签。

  • 只是想知道是否有任何方法可以使用图表.js为y轴设置水平条标签。以下是我如何设置图表: Javascript: 正如你们所看到的,第一个和第三个标签太长了,被切断了。有没有办法使标签多行?

  • 我正在尝试使用2.3.0绘制chart.js水平条形图- 但它只显示一个小节。我错过了什么?

  • 我遇到了一个关于Python中matplotlib的棘手问题。我想用几个代码创建一个分组条形图,但是图表出错了。你能给我一些建议吗?代码如下。 这个代码模块的输出真是一团糟。但我所期望的应该像图中的条形图。你能告诉我代码中哪一点不正确吗?

  • 可以帮我弄清楚怎么用matplotlib画这种图吗? 我有一个熊猫数据框对象来表示这个表: 我想可视化每个< code >图形的< code>n和< code>m的大小:一个水平条形图,其中每一行在y轴的左侧都有一个包含< code >图形名称的标签;在y轴的右边,有两个细的水平条,一个在另一个的正下方,其长度代表< code>n和< code>m。应该可以清楚地看到,两个细条都属于标有图形名称的