我想看看如何在Seaborn中使用条形图显示数据框中的值,而不是图形中的值
1)我想在绘制数据框的同时显示另一个字段的值。例如,在下面,我正在绘制“提示”图表,但我想将“total_bill”的值放在每个小节上方的中心位置(即星期五上方325.88,
星期六之上1778.40,等等)
2)有一种方法可以缩放条形的颜色,“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/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")
但这给了我以下错误:
AttributeError:'DataFrame'对象没有属性'argsort'
所以我尝试了一个修改:
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])
那让我
IndexError:索引4超出了轴0的范围,大小为4
最佳答案
让我们坚持链接问题(Changing color scale in seaborn bar plot)的解决方案。您要使用argsort来确定用于对条进行着色的颜色顺序。在链接的问题中,将argsort应用于Series对象,该对象工作正常,而这里有一个DataFrame。因此,您需要选择该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()
返回的排名始于1
而不是零。因此必须从数组中减去1。同样对于索引,我们需要整数值,因此我们需要将其强制转换为int
。rank = groupedvalues['total_bill'].rank(ascending=True).values
rank = (rank-1).astype(np.int)
关于python - Seaborn Barplot-显示值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43214978/