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

在向Pandas数据框条形图添加值标签时遇到问题[duplicate]

姜胤
2023-03-14

我一直在努力将一个简单的东西作为值标签添加到Pandas数据框条形图中。我已经查看了20多个线程(其中这三个最有帮助-如何在matplotlib中的条形图中的列上显示文本?、matplotlib高级条形图和Python熊猫/matplotlib在条形图列上注释标签,但什么都不起作用。

我的数据一点也不复杂。数据帧结构为:

+------+----------+----------+----------+----------+-------+
| Year | Product1 | Product2 | Product3 | Product4 | Total |
+------+----------+----------+----------+----------+-------+
| 2005 |      123 |      123 |      123 |      123 |   492 |
| 2006 |      111 |      111 |      111 |      111 |   444 |
+------+----------+----------+----------+----------+-------+

年份是数据帧的索引。

我正在寻找的表示很简单。所有产品的堆叠条形图,只有“总计”的值标签显示在堆叠列的顶部(我不想在图表中表示“总计”)。

我目前使用的代码是:

fig,ax = plt.subplots()
ax =df.ix[:,df.columns.difference(['Total'])].plot.bar(stacked=True, colormap='coolwarm',figsize=(14,12),ax=ax)
ax.set_ylabel("Total sales", fontsize=14)
ax.set_xlabel("Year", fontsize=14)
ax.legend(loc='best', fancybox=True, framealpha=0.5)
for i, label in enumerate(list(df.index)):
    score = df.ix[label]['Total']
    ax.annotate(str(score), (i - 0.2, score))
fig = ax.get_figure()
fig.savefig('sumplot.png',dpi=100,bbox='Tight')

我现在得到的是遥远的价值观。我认为这是因为高度是由所有其他列的“总计”值决定的?有什么方法可以修改这个高度,使其仅仅是“总”的高度吗?摆弄ax.annotate代码片段中的score值没有帮助,因为在中数据值有很大的变化(上面的数据结构只是代表性的,不是实际的数据)

共有1个答案

竺承望
2023-03-14

我运行了以下代码,没有做太多修改。我所做的只是将年份设置为数据帧的索引,并将th. ix更新为. loc方法调用。

您的问题可能是由于没有绘制年份,而是绘制了一个数字索引,该索引将年份作为一个值绘制在您感兴趣的数据之上。

如果我没理解错你的问题,下面的代码会产生你想要的结果。我会给你一张我的地块的图片来验证。

数据图

import matplotlib.pyplot as plt
import pandas as pd

data = {
    "Year": [2005, 2006],
    "Product1": [123, 111],
    "Product2": [123, 111],
    "Product3": [123, 111],
    "Product4": [123, 111],
    "Total": [492, 444]
}

df = pd.DataFrame(data).set_index("Year", drop=True)

fig,ax = plt.subplots()
ax =df.loc[:,df.columns.difference(['Total'])].plot.bar(stacked=True, colormap='coolwarm',figsize=(14,12),ax=ax)
ax.set_ylabel("Total sales", fontsize=14)
ax.set_xlabel("Year", fontsize=14)
ax.legend(loc='best', fancybox=True, framealpha=0.5)
for i, label in enumerate(list(df.index)):
    score = df.loc[label]['Total']
    ax.annotate(str(score), (i - 0.2, score))
fig = ax.get_figure()
fig.savefig('sumplot.png',dpi=100,bbox='Tight')
 类似资料:
  • 我已经在网上看了,但我仍然无法理解如何将图形添加到JPanel 以下是我的panel类的代码: 我的主要方法是: 文本只会出现在屏幕的一小部分(这适用于我试图绘制的任何图形对象)。我做错了什么?

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

  • 我一直试图得到一个条形图,每个条形图上都有值标签。我找遍了,但还是找不到。我的df如下所示。 到目前为止,我的代码是

  • 问题内容: 我陷入一种感觉应该相对容易的事情上。我在下面提供的代码是基于我正在从事的一个较大项目的示例。我没有理由发布所有详细信息,因此请原样接受我带来的数据结构。 基本上,我正在创建一个条形图,我可以弄清楚如何在条形图上(在条形图的中心或上方)添加值标签。一直在网上查看示例,但在我自己的代码上实现未成功。我相信解决方案是使用“文本”或“注释”,但是我:a)不知道要使用哪个(通常来说,还没有弄清楚

  • 我陷入了感觉应该相对容易的事情。我下面带来的代码是基于我正在进行的一个更大项目的示例。我认为没有理由发布所有细节,所以请按原样接受我带来的数据结构。 基本上,我正在创建一个条形图,我只是想知道如何在条形图上添加值标签(在条形图的中心,或者就在它的上面)。我一直在网上寻找示例,但是在我自己的代码上没有成功实现。我相信解决方法是用“文本”或“注释”,但我:a)不知道用哪一个(而且总的来说,还没想好什么

  • 所以我用一个JFrame对象打开一个窗口,添加一堆图形。首先我添加了一个图像,然后我尝试添加一些线,但这条线似乎是从上一个图像的Y中心开始的。我希望它从页面顶部开始。这是我的JFrame代码: 这是Draw类的代码 结果是 谢谢你的帮助