我被困在一些感觉应该相对容易的事情上.我下面的代码是基于我正在研究的更大项目的示例.我没有理由发布所有细节,所以请接受我带来的数据结构.
基本上,我正在创建一个条形图,我只是想弄清楚如何在条形图上添加值标签(在条形图的中心,或者在它上面).一直在寻找网络上的样本,但没有成功实现我自己的代码.我相信解决方案要么是'text',要么是'annotate',但是我:a)不知道使用哪一个(一般来说,还没弄清楚何时使用哪个).b)无法看到要么呈现价值标签.非常感谢您的帮助,我的代码如下.提前致谢!
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
pd.set_option('display.mpl_style', 'default')
%matplotlib inline
# Bring some raw data.
frequencies = [6, 16, 75, 160, 244, 260, 145, 73, 16, 4, 1]
# In my original code I create a series and run on that,
# so for consistency I create a series from the list.
freq_series = pd.Series.from_array(frequencies)
x_labels = [108300.0, 110540.0, 112780.0, 115020.0, 117260.0, 119500.0,
121740.0, 123980.0, 126220.0, 128460.0, 130700.0]
# Plot the figure. …Run Code Online (Sandbox Code Playgroud) 我想看看如何在Seaborn中做两件事,使用条形图来显示数据框中的值,但不在图表中
1)我想在绘制另一个字段时显示数据框中一个字段的值.例如,下面,我正在绘制'tip',但我想将'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)
Run Code Online (Sandbox Code Playgroud)
我得到以下结果:
临时解决方案:
for index, row in groupedvalues.iterrows():
g.text(row.name,row.tip, round(row.total_bill,2), color='black', ha="center")
Run Code Online (Sandbox Code Playgroud)
在着色上,使用下面的示例,我尝试了以下内容:
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")
Run Code Online (Sandbox Code Playgroud)
但这给了我以下错误:
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=',') …Run Code Online (Sandbox Code Playgroud) 我需要重新创建一个类似于下面在Excel中创建的图表.我希望使用matplotlib,但似乎无法找到任何关于如何做这样的图表的例子或参考.我需要根据性能阈值对条形进行着色,并显示阈值.谁能指出我正确的方向?不过,我确实需要能够用Python做到这一点.
有没有办法在 distplot 上绘制百分比而不是计数?
ax = sns.FacetGrid(telcom, hue='Churn', palette=["teal", "crimson"], size=5, aspect=1)
ax = ax.map(sns.distplot, "tenure", hist=True, kde=False)
ax.fig.suptitle('Tenure distribution in customer churn', y=1, fontsize=16, fontweight='bold');
plt.legend();
Run Code Online (Sandbox Code Playgroud)
我使用生成了一个集群映射seaborn.clustermap.我想在热图的顶部绘制/绘制一条水平线,如图所示
我只是尝试使用matplotlib:
plt.plot([x1, x2], [y1, y2], 'k-', lw = 10)
Run Code Online (Sandbox Code Playgroud)
但是没有显示该行.返回的对象seaborn.clustermap没有像这个类似问题中的任何属性.我该如何绘制线条?
以下是生成类似于我发布的"随机"群集图的代码:
import numpy as np
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
import random
data = np.random.random((50, 50))
df = pd.DataFrame(data)
row_colors = ["b" if random.random() > 0.2 else "r" for i in range (0,50)]
cmap = sns.diverging_palette(133, 10, n=7, as_cmap=True)
result = sns.clustermap(df, row_colors=row_colors, col_cluster = False, cmap=cmap, linewidths = 0)
plt.plot([5, 30], [5, 5], 'k-', lw …Run Code Online (Sandbox Code Playgroud) 我有一个水平条形图,例如,seaborn 文档中示例的简化版本:https ://seaborn.pydata.org/examples/horizontal_barplot.html
import seaborn as sns
import matplotlib.pyplot as plt
f, ax = plt.subplots(figsize=(6, 15))
crashes = sns.load_dataset("car_crashes").sort_values("total", ascending=False)
sns.barplot(x="total", y="abbrev", data=crashes,
label="Total", color="b")
ax.set(xlim=(0, 24), ylabel="",
xlabel="Automobile collisions per billion miles")
plt.show()
Run Code Online (Sandbox Code Playgroud)
如何获得标有每个条形值的条形?
我为垂直条尝试了这种方法(如何在 seaborn 的条上添加百分比?),但它似乎不起作用。将高度更改为宽度不会产生我认为的效果。
for p in ax.patches:
height = p.get_width()
ax.text(p.get_y()+p.get_height()/2.,
height + 3,
'{:1.2f}'.format(height),
ha="center")
Run Code Online (Sandbox Code Playgroud)
我假设水平图的工作方式不同?
您好,我正在尝试向我的 5 个类别和 2 个值(旧的和年轻的)添加百分比countplot。我尝试添加来自
如何在seaborn中的条形顶部添加百分比?
我的代码:
plt.figure(figsize =(7,5))
ax = sb.countplot(data = df_x_1, x = 'concern_virus', hue = 'age')
plt.xticks(size =12)
plt.xlabel('Level of Concern', size = 14)
plt.yticks(size = 12)
plt.ylabel('Number of People', size = 12)
plt.title("Older and Younger People's Concern over the Virus", size = 16)
ax.set_xticklabels(ax.get_xticklabels(), rotation=40, ha="right");
for p in ax.patches:
percentage = '{:.1f}%'.format(100 * p.get_height()/total)
x = p.get_x() + p.get_width()
y = p.get_height()
ax.annotate(percentage, (x, y),ha='center')
plt.show()
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,百分比没有意义。
python ×7
matplotlib ×6
seaborn ×5
pandas ×4
plot ×2
countplot ×1
displot ×1
graph ×1
histplot ×1
python-2.7 ×1