标签: seaborn

AttributeError: 'float' 对象在使用 seaborn 时没有属性 'shape'

我创建了一个随机数据框来模拟来自seaborn的数据集提示

import numpy as np
import pandas as pd

time = ['day','night']
sex = ['female','male']
smoker = ['yes','no']
for t in range(0,len(time)):
    for s in range(0,len(sex)):
        for sm in range(0,len(smoker)):
            randomarray = np.random.rand(10)*10
            if t == 0 and s == 0 and sm == 0:
                df = pd.DataFrame(index=np.arange(0,len(randomarray)),columns=["total_bill","time","sex","smoker"])
                L = 0
                for i in range(0,len(randomarray)):
                    df.loc[i] = [randomarray[i], time[t], sex[s], smoker[sm]]
                    L = L + 1
            else:
                for i in range(0,len(randomarray)):
                    df.loc[i+L] = [randomarray[i], time[t], sex[s], …
Run Code Online (Sandbox Code Playgroud)

python attributeerror seaborn

1
推荐指数
1
解决办法
7918
查看次数

在seaborn情节中更改图例标题大小的优雅方法?

我创建了一个 seaborn pairplot,我想更改图例标题的大小。我已经这样做了:

matrix = sns.pairplot(...)
lg = plt.gcf().legend(title='something')
lg.get_title().set_fontsize(30)
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的方法来做到这一点?

我知道由 seaborn 使用的 matplotlib 没有此处讨论的相关属性:https : //github.com/matplotlib/matplotlib/issues/8699

python matplotlib seaborn

1
推荐指数
1
解决办法
7021
查看次数

使用每日数据集绘制以月份为 x 轴的 seaborn boxplot

我有一个这样的数据集:

>>> print(ds.head())

         date     sum
  0  2013-08-31  19.000
  1  2013-09-01  37.000
  2  2013-09-02  10.750
  3  2013-09-03  21.500
  4  2013-09-04  44.125

>>> print(ds.tail())


            date      sum
    1742  2018-08-24  129.875
    1743  2018-08-25  196.375
    1744  2018-08-26  247.000
    1745  2018-08-27  104.125
    1746  2018-08-28  149.250
Run Code Online (Sandbox Code Playgroud)

该数据集包含大约 1700 行的每日数据。我想绘制一个箱线图,以便查看每月的值。像这样的东西 每月箱线图

我需要像 JAN/FEB/MAR 等 x 轴上的月份。

如果我有每日数据集,我找不到任何可行的解决方案来实现这一目标。我想我必须先做数据准备并首先对每个月的值进行分组?或者我如何以简单快捷的方式进行编程?

python boxplot seaborn

1
推荐指数
1
解决办法
8611
查看次数

带有 2 个 y 轴的分组箱线图,每个 x 刻度有 2 个绘制变量

我正在尝试制作一个 18 年的月降雨量和洪水频率记录的箱线图。即每个 x 刻度是月份,每个 x 刻度与两个箱线图相关联,一个是降雨量,一个是洪水频率。到目前为止,我已经设法使用 seaborn 绘制了这些图(请参阅以下代码和图像),但是我不知道如何创建带有两个 y 轴的箱线图,这是我需要的,因为每个变量的比例不同。

数据是这样的(数据集中flood_freq的最大值是7,这里没有显示):

    Group   Rainfall    Flood_freq
0   Jan     115.679997  0
1   Jan     72.929999   0
2   Jan     39.719999   0
3   Jan     46.799999   1
4   Jan     54.989998   0
...
212 Dec     51.599998   0
213 Dec     45.359999   0
214 Dec     10.260000   0
215 Dec     52.709998   0
Run Code Online (Sandbox Code Playgroud)

这是我使用的代码:

dd=pd.melt(FBPdf,id_vars=['Group'],value_vars=['Rainfall','Flood_freq'],var_name='Data')
sns.boxplot(x='Group',y='value',data=dd,hue='Data')
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此处输入图片说明

从那以后,我查看了 seaborn 文档,它似乎不允许 2 y 轴(带有 2 y 轴的 Seaborn boxplot)。有没有人能够为我想要实现的目标提供潜在的替代方案?上面链接中的解决方案与我遇到的这个双 y 轴和分组箱线图问题无关。

非常感谢您提前!

python matplotlib boxplot seaborn

1
推荐指数
1
解决办法
1145
查看次数

在seaborn热图中重新标记轴刻度

我有一个由值矩阵构建的 seaborn 热图。矩阵的每个元素对应一个实体,我想为矩阵中的每一行/列制作刻度标签。

我尝试使用该ax.set_xticklabel()函数来完成此操作,但似乎什么也没做。这是我的代码:

type(jr_matrix)
>>> numpy.ndarray

jr_matrix.shape
>>> (15, 15)

short_cols = ['label1','label2',...,'label15'] # list of strings with len 15

fig, ax = plt.subplots(figsize=(13,10)) 
ax.set_xticklabels(tuple(short_cols)) # i also tried passing a list
ax.set_yticklabels(tuple(short_cols))
sns.heatmap(jr_matrix, 
            center=0, 
            cmap="vlag", 
            linewidths=.75, 
            ax=ax,
            norm=LogNorm(vmin=jr_matrix.min(), vmax=jr_matrix.max()))
Run Code Online (Sandbox Code Playgroud)

仍然有矩阵索引作为标签:

在此处输入图片说明

关于如何正确更改这些标签的任何想法将不胜感激。

编辑:如果重要的话,我正在使用 jupyter notebooks 来做这件事。

python seaborn jupyter

1
推荐指数
1
解决办法
2983
查看次数

在seaborn直方图上添加标准的正常pdf

我想在使用seaborn.

import numpy as np
import seaborn as sns 
x = np.random.standard_normal(1000)
sns.distplot(x, kde = False)
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激!

python distribution seaborn

1
推荐指数
1
解决办法
6730
查看次数

如何按递增顺序(按中值)对箱线图值进行排序?

这是我的熊猫数据帧:

Area            Gender  Quantity
XXX             Men     115
XXX             Men     105    
XXX             Men     114
YYY             Men     100
YYY             Men     90    
YYY             Men     95
YYY             Men     101
XXX             Women   120    
XXX             Women   122
XXX             Women   115
XXX             Women   117    
YYY             Women   91
YYY             Women   90
YYY             Women   90
Run Code Online (Sandbox Code Playgroud)

这就是我创建箱线图的方式。

import seaboard as sns
import matplotlib.pyplot as pat

fig, ax = plt.subplots(figsize=(15,11))
ax = sns.boxplot(x="Area", y="Quantity", hue="Gender", data=df, palette="Set3")
Run Code Online (Sandbox Code Playgroud)

我想AreaQuantity递增顺序按中位数对组进行排序。我该怎么做?

python matplotlib pandas seaborn

1
推荐指数
1
解决办法
1316
查看次数

如何像R语言一样在热图单元格上添加交叉(X)?

我想在热图单元格上添加交叉(X)(取决于显着性水平,但问题在于添加 X)。

就像在 R 语言中一样(sig.level = XXX)。

请参阅使用的 Python 和 R 代码以及相应的输出图像。

感谢您的帮助。

# Draw the heatmap with the mask and correct aspect ratio
sns.heatmap(corr, mask=mask, cmap=cmap, center=0, vmin=-1, vmax=1, square=True, linewidths=0.5, fmt=".2f",
            cbar_kws={"shrink": .65, "orientation": "horizontal", "ticks":np.arange(-1, 1+1, 0.2)}, 
            annot = True, annot_kws={"weight": 'bold', "size":15})




corrplot(cor(subset (wqw, select = 
                       c(fixed.acidity:quality,ratio.sulfur.dioxide))),
         # compute the p matrix
         p.mat = cor.mtest(subset 
            (wqw, select = c(fixed.acidity:quality,ratio.sulfur.dioxide))), 
         # significance level 0.01
         sig.level = 0.01, 
         # Method to display : color (could be corcle, ...) …
Run Code Online (Sandbox Code Playgroud)

python matplotlib heatmap seaborn

1
推荐指数
1
解决办法
666
查看次数

如何在matplotlib图上叠加seaborn热图

我试图在一个足球场的 matplotlib 图上叠加一个热图。

这是由下面的代码块创建的 matplotlib 音高的图像:

在此处输入图片说明


import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib.patches as plt_p
import numpy as np

def draw_pitch(ax):
    # size of the pitch is 120, 80
    #Create figure

    #Pitch Outline & Centre Line
    plt.plot([0,0],[0,80], color="black")
    plt.plot([0,120],[80,80], color="black")
    plt.plot([120,120],[80,0], color="black")
    plt.plot([120,0],[0,0], color="black")
    plt.plot([60,60],[0,80], color="black")

    #Left Penalty Area
    plt.plot([14.6,14.6],[57.8,22.2],color="black")
    plt.plot([0,14.6],[57.8,57.8],color="black")
    plt.plot([0,14.6],[22.2,22.2],color="black")

    #Right Penalty Area
    plt.plot([120,105.4],[57.8,57.8],color="black")
    plt.plot([105.4,105.4],[57.8,22.5],color="black")
    plt.plot([120, 105.4],[22.5,22.5],color="black")

    #Left 6-yard Box
    plt.plot([0,4.9],[48,48],color="black")
    plt.plot([4.9,4.9],[48,32],color="black")
    plt.plot([0,4.9],[32,32],color="black")

    #Right 6-yard Box
    plt.plot([120,115.1],[48,48],color="black")
    plt.plot([115.1,115.1],[48,32],color="black")
    plt.plot([120,115.1],[32,32],color="black")

    #Prepare Circles …
Run Code Online (Sandbox Code Playgroud)

python matplotlib pandas seaborn

1
推荐指数
1
解决办法
4606
查看次数

Seaborn:Violinplot 在变量太多时遇到困难?

我想使用 seaborn 用 violinplots 来可视化我的整个 Pandas 数据框,并且我认为我已经进行了必要的更正,以便为我的数据框拥有的 270 个变量生成一个大图。

但是,无论我做什么,小提琴图都只显示每个变量的内部迷你箱线图(正如这里描述的另一个问题),而不是它们的 kde:

fig, ax = plt.subplots(figsize=(50,5))
ax.set_ylim(-6, 6)

a = sns.violinplot(x='variable', y='value', data=pd.melt(train_norm), ax=ax)
a.set_xticklabels(a.get_xticklabels(), rotation=90);

plt.savefig('massive_violinplot.png', figsize=(50,5), dpi=220)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

(为裁剪图道歉,整个事情太大而无法发布)

而以下代码,使用相同的pd.Dataframe,但只显示前六个变量,显示正确:

fig, ax = plt.subplots(figsize=(10,5))
ax.set_ylim(-6, 6)

a = sns.violinplot(x='variable', y='value', data=pd.melt(train_norm.iloc[:,:6]), ax=ax)
a.set_xticklabels(a.get_xticklabels(), rotation=90);

plt.savefig('massive_violinplot.png', figsize=(10,5), dpi=220)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我怎么能得到像上面所有变量的图表,用适当的小提琴图来显示他们的kde?

python data-visualization matplotlib pandas seaborn

1
推荐指数
1
解决办法
2156
查看次数