我想看看如何在Seaborn中使用条形图来显示数据框中的值,而不是图形中的值。
1.我希望在数据框中显示一个字段的值,同时绘制另一个字段的图形。例如,下面,我正在绘制“tip”,但我想将'total_bill'
的值居中放置在每个条形图的上方(i.e.325.88在周五上方,1778.40在周六上方,等等)。
1.有没有一种方法可以缩放条形图的颜色,使'total_bill'
的最小值具有最浅的颜色(在本例中为星期五),而'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/1st-edition/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/1st-edition/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”对象没有属性“argsort”
所以我尝试了一个修改:
import pandas as pd
import seaborn as sns
%matplotlib inline
df = pd.read_csv("https://raw.githubusercontent.com/wesm/pydata-book/1st-edition/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])
那我就只能
IndexError:索引4超出大小为4的轴0的界限
8条答案
按热度按时间ccgok5k51#
matplotlib 3.4.0新增
现在有一个内置的
Axes.bar_label
来自动标记bar容器:hue
),迭代多个条形容器:更多详情:
sns.countplot
和sns.catplot
)fmt
参数)labels
参数)颜色分级版本
是否有办法缩放条形图的颜色,使
total_bill
的最低值具有最浅的颜色(在本例中为星期五),而total_bill
的最高值具有最深的颜色?total_bill
值的秩:Series.sort_values
:Series.sub
来压缩Ernest的Series.rank
版本:ranks
重新索引调色板:vc6uscn92#
这适用于单个ax或ax矩阵(子图):
a0zr77ik3#
坚持使用Changing color scale in seaborn bar plot的解决方案,它使用
argsort
来确定条形图颜色的顺序。在链接的问题中,argsort
应用于Series
对象,而这里您有DataFrame
。选择DataFrame
的一列来应用argsort
。第二次尝试也很好,唯一的问题是
rank()
返回的秩从1
开始,而不是从0
开始。因此必须从数组中减去1
。为了索引,我们需要整数值,因此将其转换为int
。matplotlib 3.4.0
开始,有一个.bar_label
,它有一个用于自定义标签的label
参数。.bar_label
的答案没有使用labels=
自定义标签。.bar_label
的详细解释,并提供文档和示例链接。day
列以category Dtype
的形式下载,这样可以按顺序显示一周中的日期。这也可以确保x轴上的条形图和tb
中的值的绘图顺序。.bar_label
从左到右添加标签,因此tb
中的值与条形图的顺序相同。pd.Categorical
来设置顺序。sns.barplot
中,指定estimator=sum
对tip
求和。默认值为mean
。5f0d552i4#
为了防止有人对水平条形图的标注感兴趣,我修改了Sharon's answer如下:
两个参数说明:
h_v
-条形图是水平还是垂直。"h"
表示水平条形图,"v"
表示垂直条形图。space
-值文本和条形图上边缘之间的间距。仅适用于水平模式。示例:
pwuypxnk5#
sq1bmfud6#
7gyucuyw7#
希望对#2有帮助:
a)您可以按总账单排序,然后将索引重置到此列
B)使用palette=“Blue”使用此颜色将图表从浅蓝色缩放到深蓝色(如果深蓝色到浅蓝色,则使用palette=“Blues_d”)
cl25kdpy8#
一个简单的方法是添加下面的代码(对于Seaborn):
示例: