当前位置: 首页 > 面试题库 >

如何从数据框向堆叠的条形图添加自定义注释?

赵嘉纳
2023-03-14
问题内容

我正在绘制某些类别中各个办公室的交叉表。我想放一张水平堆叠的条形图,在其中标记每个办公室及其值。

这是一些示例代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# create dataframe
df = pd.DataFrame({'office1': [1, np.nan, np.nan],
                   'office2': [np.nan, 8, np.nan],
                   'office3': [12, np.nan, np.nan],
                   'office4': [np.nan, np.nan, 3],
                   'office5': [np.nan, 5, np.nan],
                   'office6': [np.nan, np.nan, 7],
                   'office7': [3, np.nan, np.nan],
                   'office8': [np.nan, np.nan, 11],
                   'office9': [np.nan, 6, np.nan]},
                  index=['catA', 'catB', 'catC'])

# plot dataframe
ax = df.plot.barh(title="Office Breakdown by Category",
                  legend=False,
                  figsize=(10,7), stacked=True)

经过研究,我想到了以下代码,可以在“类别”轴上正确排列标签:

def annotateBars(row, ax=ax):
    for col in row.index:
        value = row[col]
        if (str(value) != 'nan'):
            ax.text(value/2, labeltonum(row.name), col+","+str(value))

def labeltonum(label):
    if label == 'catA':
        return 0
    elif label == 'catB':
        return 1
    elif label == 'catC':
        return 2

df.apply(annotateBars, ax=ax, axis=1)

但这不包括条的“堆积”。我还尝试遍历patchesplot命令返回的容器(可以让我检索每个矩形的x和y位置),但是随后我失去了与办公室标签的任何连接。


问题答案:

弄清楚了。如果我遍历数据帧每一行的列,则可以建立一个所需标签的列表,这些标签与中矩形的进行匹配ax.patches。解决方案如下:

labels = []
for j in df.columns:
    for i in df.index:
        label = str(j)+": " + str(df.loc[i][j])
        labels.append(label)

patches = ax.patches

for label, rect in zip(labels, patches):
    width = rect.get_width()
    if width > 0:
        x = rect.get_x()
        y = rect.get_y()
        height = rect.get_height()
        ax.text(x + width/2., y + height/2., label, ha='center', va='center')

现在只需要处理太小的条形标签。



 类似资料:
  • 我想在我的pandas条形图中添加百分比值-以及计数。然而,我不能这样做。我的代码如下所示,到目前为止,我可以得到要显示的计数值。有人能帮我在每个条显示的计数值旁边/下面添加相对%值吗? 我的代码的输出如下所示。如何在显示的每个计数值旁边添加%值?

  • 我有以下不同月份的数据 一月:[1,5,3] Feb:[10,5] 三月:[4,8] 四月:[7] 可能:[3,1,5,0,7] 我想生成如下所示的条形图 现在,我有以下代码,我想知道如何生成如上图所示的条形图。 }); 非常感谢。

  • Highcharts 条形图 以下实例演示了堆叠条形图。 我们在前面的章节已经了解了 Highcharts 基本配置语法。接下来让我们来看下其他的配置。 配置 plotOptions 配置图表堆叠使用 plotOptions.series.stacking,并设置为 "normal"。如果禁用堆叠可设置为 null , "normal" 通过值设置堆叠, "percent" 堆叠则按百分比。 v

  • 我已经在网上搜索了足够多的东西,但没有运气。 我已经创建了一个堆叠的3D条形图,其中我无法更改默认颜色。我试了所有提供的建议。 EvenI使用了,但它不起作用。与图表、情节和渲染器中的创作顺序有关吗? 当我打印行和列时,我得到以下信息:

  • 我需要一张这样的图表: 我找到了这个示例,但它使用了旧版本的。我尝试使用v2.0,但我不明白。 有人能贴个例子吗?

  • 问题内容: 在Bokeh指南中,可以创建各种条形图的示例。http://docs.bokeh.org/en/0.10.0/docs/user_guide/charts.html#id4 此代码将创建一个: 我的问题是是否可以向图表的每个单独的条形添加数据标签?我在网上搜索,但找不到明确的答案。 问题答案: 使用标签集 使用Labelset在每个单独的条形上方创建标签 在我的示例中,我将vbar与绘