我正在创建一个条形图,但我不知道如何在条形图上添加值标签(在条形图的中心或其上方)。
我认为解决方案是使用“文本”或“注解”,但我:a)不知道使用哪一个(一般来说,还不知道什么时候使用哪一个)。B)看不出让任何一个来显示值标签。
下面是我的代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
pd.set_option('display.mpl_style', 'default')
%matplotlib inline
# Bring some raw data.
frequencies = [6, 16, 75, 160, 244, 260, 145, 73, 16, 4, 1]
# In my original code I create a series and run on that,
# so for consistency I create a series from the list.
freq_series = pd.Series(frequencies)
x_labels = [108300.0, 110540.0, 112780.0, 115020.0, 117260.0, 119500.0,
121740.0, 123980.0, 126220.0, 128460.0, 130700.0]
# Plot the figure.
plt.figure(figsize=(12, 8))
fig = freq_series.plot(kind='bar')
fig.set_title('Amount Frequency')
fig.set_xlabel('Amount ($)')
fig.set_ylabel('Frequency')
fig.set_xticklabels(x_labels)
如何在条形图上添加值标签(在条形图的中心或其上方)?
7条答案
按热度按时间7bsow1i61#
首先,
freq_series.plot
返回一个轴,而不是一个图形,所以为了让我的答案更清楚一点,我已经修改了你给出的代码,将其称为ax
,而不是fig
,以与其他代码示例更一致。您可以从
ax.patches
成员获取图中生成的条形列表。然后,您可以使用thismatplotlib
gallery example中演示的技术,通过ax.text
方法添加标签。这将生成一个带标签的图,如下所示:
9w11ddsr2#
基于this answer to another question中提到的一个特性,我发现了一个非常普遍适用的在条形图上放置标签的解决方案。
遗憾的是,其他解决方案在许多情况下不起作用,因为标签和条形图之间的间距为given in absolute units of the bars或scaled by the height of the bar。前者仅适用于较窄范围的值,而后者在一个图中给出了不一致的间距。这两种方法都不适用于对数轴。
我提出的解决方案不依赖于比例(即对于小数字和大数字),甚至可以正确地放置负值和对数比例的标签,因为它使用视觉单位
points
表示偏移量。我添加了一个负数来展示在这种情况下标签的正确放置。
每个条形的高度值用作其标签。其他标签可以轻松地与Simon's
for rect, label in zip(rects, labels)
snippet一起使用。这将生成以下输出:
使用对数标度(并对输入数据进行一些调整以显示对数标度),结果如下:
htrmnn0y3#
根据上面的答案(太棒了!),我们还可以做一个水平条形图,只需做一些调整:
5cg8jx4n4#
如果只想标记条形图上方的数据点,可以使用plt.annotate()
我的代码:
通过分别指定
'center'
和'bottom'
的水平和垂直对齐,可以获得居中的注解。pjngdqdw5#
截至
matplotlib v3.4.0
matplotlib.pyplot.bar_label
label_type
设置的默认标签位置为'edge'
。要将标签居中放置在条形的中间,请使用'center'
kwargs
被传递到Axes.annotate
,Axes.annotate
接受Text
和kwargs
。color
、rotation
、fontsize
等属性。python 3.10
、pandas 1.4.2
、matplotlib 3.5.1
和seaborn 0.11.2
中测试**ax.containers
是BarContainer artists
的list
[0]
。list
中将有更多对象| * * 堆叠**| * * 分组**|
| - ------| - ------|
| How to annotate each segment of a stacked bar chart| How to plot and annotate grouped bars in seaborn|
| Stacked Bar Chart with Centered Labels| How to plot and annotate a grouped bar chart|
fmt
参数可以完成简单的标签格式化,如演示示例和How to annotate a seaborn barplot with the aggregated value中所示。label
参数,如演示示例和以下内容所示| * *
label=
示例**| * *label=
示例**|| - ------| - ------|
| stack bar plot in matplotlib and add label to each section| How to annotate a stacked bar plot and add legend labels|
| How to add multiple annotations to a barplot| How to customize bar annotations to not show selected values|
| How to plot a horizontal stacked bar with annotations| How to annotate bar plots when adding error bars|
| How to align annotations at the end of a horizontal bar plot||
kwargs
以进行其他自定义matplotlib.axes.Axes.text
的参数海运轴级图
ax.bar(...)
、plt.bar(...)
和df.plot(kind='bar',...)
完全相同Seaborn图形级图
seaborn.catplot
接受data
的 Dataframe 。.catplot
是FacetGrid(子图),唯一的区别是迭代图形的每个轴以使用.bar_labels
。∮ ∮ ∮ ∮
matplotlib.pyplot.bar
,则情况类似使用
bar_label
的其他示例| 关联销售订单答案|关联销售订单答案|
| - ------| - ------|
| How to create and annotate a stacked proportional bar chart| How to wrap long tick labels in a seaborn figure-level plot|
| How to calculate percent by row and annotate 100 percent stacked bars| How to annotate barplot with percent by hue/legend group|
| Stacked bars are unexpectedly annotated with the sum of bar heights| How to add percentages on top of bars in seaborn|
| How to plot and annotate grouped bars| How to plot percentage with seaborn distplot / histplot / displot|
| How to annotate bar chart with values different to those from get_height()| How to plot grouped bars in the correct order|
| Pandas bar how to label desired values| Problem with plotting two lists with different sizes using matplotlib|
| How to display percentage above grouped bar chart| How to annotate only one category of a stacked bar plot|
| How to set ticklabel rotation and add bar annotations| How to Increase subplot text size and add custom bar plot annotations|
| How to aggregate group metrics and plot data with pandas| How to get a grouped bar plot of categorical data|
| How to plot a stacked bar with annotations for multiple groups| How to create grouped bar plots in a single figure from a wide dataframe|
| How to annotate a stackplot or area plot| How to determine if the last value in all columns is greater than n|
| How to plot grouped bars| How to plot element count and add annotations|
| How to add multiple data labels in a bar chart in matplotlib| Seaborn Catplot set values over the bars|
| Python matplotlib multiple bars| Matplotlib pie chart label does not match value|
| plt grid ALPHA parameter not working in matplotlib| How to horizontally center a bar plot annotation|
aiqt4smr6#
我也需要条形图标签,注意我的y轴有一个缩放视图,使用y轴上的限制。将标签放在条形图顶部的默认计算仍然使用高度(在本例中use_global_coordinate=False)。但我想说明的是,在缩放视图中,使用matplotlib 3.0.2中的全局坐标也可以将标签放在图形的底部。希望它能帮助到一些人。
brqmpdu17#
如果您只想在条形图上方添加数据点,您可以使用以下命令轻松完成: