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

海运巴士场-显示值

宋嘉禧
2023-03-14

我想看看如何在Seaborn中使用条形图来显示数据框中的值,而不是图形中的值

1) 我希望在一个数据帧中显示一个字段的值,同时绘制另一个字段的图形。例如,在下面,我画的是“小费”,但我想把“总账单”的价值放在每个横条的中心位置(即周五上方325.88,周六上方1778.40,等等)

2) 有没有一种方法可以缩放条的颜色,最低的“total_bill”值的颜色最浅(在本例中为星期五),最高的“total_bill”值的颜色最深。显然,当我进行缩放时,我会坚持使用一种颜色(即蓝色)。

谢谢我相信这很容易,但我错过了。。

虽然我看到其他人认为这是另一个(或两个)问题的重复,但我缺少如何使用图形中不存在的值作为标签或着色的基础的部分。我怎么说呢,以总账单为基础。对不起,根据这些答案我就是想不出来。

从下面的代码开始,

import pandas as pd
import seaborn as sns
%matplotlib inline
df=pd.read_csv("https://raw.githubusercontent.com/wesm/pydata-    book/master/ch08/tips.csv", sep=',')
groupedvalues=df.groupby('day').sum().reset_index()
g=sns.barplot(x='day',y='tip',data=groupedvalues)

我得到以下结果:

临时解决办法:

for index, row in groupedvalues.iterrows():
    g.text(row.name,row.tip, round(row.total_bill,2), color='black', ha="center")

在着色上,使用下面的示例,我尝试了以下操作:

import pandas as pd
import seaborn as sns
%matplotlib inline
df=pd.read_csv("https://raw.githubusercontent.com/wesm/pydata-book/master/ch08/tips.csv", sep=',')
groupedvalues=df.groupby('day').sum().reset_index()

pal = sns.color_palette("Greens_d", len(data))
rank = groupedvalues.argsort().argsort() 
g=sns.barplot(x='day',y='tip',data=groupedvalues)

for index, row in groupedvalues.iterrows():
    g.text(row.name,row.tip, round(row.total_bill,2), color='black', ha="center")

但这给了我以下错误:

DataFrame对象没有属性

所以我尝试了一个修改:

import pandas as pd
import seaborn as sns
%matplotlib inline
df=pd.read_csv("https://raw.githubusercontent.com/wesm/pydata-book/master/ch08/tips.csv", sep=',')
groupedvalues=df.groupby('day').sum().reset_index()

pal = sns.color_palette("Greens_d", len(data))
rank=groupedvalues['total_bill'].rank(ascending=True)
g=sns.barplot(x='day',y='tip',data=groupedvalues,palette=np.array(pal[::-1])[rank])

那就留给我

索引器:索引4超出大小为4的轴0的界限

共有3个答案

满玉泽
2023-03-14

为了以防万一,如果有人对标记水平条形图感兴趣,我将Sharon的答案修改如下:

def show_values_on_bars(axs, h_v="v", space=0.4):
    def _show_on_single_plot(ax):
        if h_v == "v":
            for p in ax.patches:
                _x = p.get_x() + p.get_width() / 2
                _y = p.get_y() + p.get_height()
                value = int(p.get_height())
                ax.text(_x, _y, value, ha="center") 
        elif h_v == "h":
            for p in ax.patches:
                _x = p.get_x() + p.get_width() + float(space)
                _y = p.get_y() + p.get_height()
                value = int(p.get_width())
                ax.text(_x, _y, value, ha="left")

    if isinstance(axs, np.ndarray):
        for idx, ax in np.ndenumerate(axs):
            _show_on_single_plot(ax)
    else:
        _show_on_single_plot(axs)

解释了两个参数:

h_v-条形图是水平的还是垂直的<代码>“h”表示水平条形图,“v”表示垂直条形图。

space-值文本和条形图顶部边缘之间的空间。仅适用于水平模式

例子:

show_values_on_bars(sns_t, "h", 0.3)
翟展
2023-03-14

让我们继续使用链接问题的解决方案(改变seaborn条形图中的颜色比例)。您需要使用argsort来确定用于为条形图着色的颜色顺序。在链接问题中,argsort应用于一个Series对象,这很好,而这里有一个DataFrame。因此,您需要选择该数据帧的一列来应用argsort。

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

df = sns.load_dataset("tips")
groupedvalues=df.groupby('day').sum().reset_index()

pal = sns.color_palette("Greens_d", len(groupedvalues))
rank = groupedvalues["total_bill"].argsort().argsort() 
g=sns.barplot(x='day',y='tip',data=groupedvalues, palette=np.array(pal[::-1])[rank])

for index, row in groupedvalues.iterrows():
    g.text(row.name,row.tip, round(row.total_bill,2), color='black', ha="center")

plt.show()
rank = groupedvalues['total_bill'].rank(ascending=True).values
rank = (rank-1).astype(np.int)
焦学海
2023-03-14

使用单个ax或ax矩阵(子批次)

from matplotlib import pyplot as plt
import numpy as np

def show_values_on_bars(axs):
    def _show_on_single_plot(ax):        
        for p in ax.patches:
            _x = p.get_x() + p.get_width() / 2
            _y = p.get_y() + p.get_height()
            value = '{:.2f}'.format(p.get_height())
            ax.text(_x, _y, value, ha="center") 

    if isinstance(axs, np.ndarray):
        for idx, ax in np.ndenumerate(axs):
            _show_on_single_plot(ax)
    else:
        _show_on_single_plot(axs)

fig, ax = plt.subplots(1, 2)
show_values_on_bars(ax)
 类似资料:
  • 我们正在使用spring云配置服务器。Spring配置客户端使用Spring控制总线(RabbitMQ)获取更新。 看起来每个配置客户端实例都会创建一个连接到'spring.cloud.bus'交换的队列。 对有多少应用程序实例可以连接到“spring.cloud.bus”交换有任何可伸缩性限制? 我想RabbitMQ可以扩展来处理这个问题。 寻找这方面的指导方针。 许多感谢,

  • 我正在GWT中创建一个类似MVP的应用程序。 有多个面板,每一个都是随时可见的。 每个面板都有一个Presenter,并且有一个AppController位于所有Presenter之上。 有一些应用程序级别的事件出现在一个演示者中,但对其他演示者有影响。 为此建议的架构似乎涉及事件总线。然而,我不确定我是否看到了比更简单的东西更有优势。 特别是,简单地允许AppController(并且只有App

  • 我很难理解在GWT中使用事件总线概念的好处。我知道它是怎么做的,但我不明白为什么它有帮助。 我举个例子: 为了将事件总线功能添加到上面的代码中,我们必须引入更多的代码: 1) 创建扩展event的事件类(实现2个方法) 2)为事件处理程序创建接口,其中dosomething()将是抽象的 3)实现接口 4)事件发生的类必须实现HasHandler接口、intreoduce HandlerManag

  • 面试职位:海外市场运营(SEO) HR面: 电面,问题包括所学专业是工科,为啥来做市场工作;出生年月;期望薪资等,并且简单介绍了一下职位的三个方向:SEO,内容和用户运营。电话的最后告知有笔试,需24小时之内完成。 笔试: 两道题,一题是中译英,另一个是用英文介绍竞品,300字左右。笔试作业交给HR后,当天告知通过,约好下一轮视频面试。 视频面试: 面试官为负责台湾市场的负责人。告知面试的职位是S

  • 这次是被调岗加面一轮,由于自己的身体状况原因,中间歇了一段时间没有面试,发现距离上次面试已经过去大半个月了。 1.自我介绍 2.介绍一下上段实习主要做什么的,并且进行深挖 3.介绍一下上上段实习是干嘛的,通过什么模型之类的进行工作 4.你觉得你碰到最有挑战的工作是什么 5.为什么投了阿里 6.还投了什么其他公司,并追问为什么没去呢 我:因为没过面试 7.那你觉得面试为什么会没通过 8.读书和工作期

  • 我已经创建了一个名为“产品”的自定义帖子类型和一个名为“配料”的帖子类型中的自定义分类。 我已经添加了一个名为“成分INCI”的repeater字段和“成分INCI组”的子字段,该字段调用分类法“成分”中的值。 自定义中继器字段屏幕截图: 每个产品都有很多成分,我想展示一个产品所选成分的列表。这是我的模板代码: 此代码似乎破坏了输出。请帮忙!