标签: seaborn

使用seaborn将小网格线添加到matplotlib图中

我是使用Matplotlib制作外观漂亮的Seaborn包的粉丝.但我似乎无法弄清楚如何在我的情节中显示小网格线.

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

x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)

fig, ax = plt.subplots(1, 1)
ax.scatter(x, y)

ax.grid(b=True, which='major')
ax.grid(b=True, which='minor')
Run Code Online (Sandbox Code Playgroud)

得到:

在此输入图像描述

这有什么想法?还有任何关于如何调整Seaborn网格线的风格的想法......特别是,我喜欢让它们更窄.

python matplotlib seaborn

19
推荐指数
2
解决办法
2万
查看次数

一个colorbar用于subplot中的seaborn heatmaps

这是一个显示每个子图的颜色条的示例:

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

df = pd.DataFrame(np.random.random((10,10,)))

fig,axn = plt.subplots(2, 2, sharex=True, sharey=True)

for ax in axn.flat:
    sns.heatmap(df, ax=ax)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如何删除每个子图的颜色条?我想只有一个垂直或水平方向的颜色条.我知道我可以访问每个颜色条轴fig.get_axes()[:-4],但是如何从图中完全删除它们呢?我不认为在调用热图时可以选择不绘制颜色条.

python matplotlib heatmap seaborn

19
推荐指数
2
解决办法
2万
查看次数

Seaborn配置隐藏了默认的matplotlib

Seaborn提供了一些非常有趣的科学数据表示图形.因此,我开始使用这些Seaborn图形穿插其他定制的matplotlib图.问题是,一旦我这样做:

import seaborn as sb
Run Code Online (Sandbox Code Playgroud)

这个导入似乎设置了seaborn全局的图形参数,然后导入下面的所有matplotlib图形都获得了seaborn参数(它们得到灰色背景,linewithd更改等等).

在SO中有一个答案解释如何使用matplotlib配置生成seaborn图,但我想要的是在将两个库一起使用时保持matplotlib配置参数不变,同时能够在需要时生成原始的seaborn图.

python matplotlib seaborn

19
推荐指数
2
解决办法
4856
查看次数

在seaborn heatmap上设置颜色条的最大值

我需要将seaborn heatmap的最大值设置cbar为2.我尝试过:

cbar_kws = { 'ticks' : [0, 2] }
sns.heatmap(tiles, robust=True, fmt="f", cmap= 'RdBu_r', cbar_kws = cbar_kws)
Run Code Online (Sandbox Code Playgroud)

但这不起作用,文档也不是很清楚.我该怎么做呢?

python matplotlib heatmap seaborn

19
推荐指数
1
解决办法
2万
查看次数

如何在不添加“刻度”的情况下从下到上移动标签

我如何使用“tick_top”以外的其他东西将 xlabel 定位在图的顶部 - 这会为 x 标签添加一个勾号,而我不想要它。

底部的 xlabel 没有勾号: 在此处输入图片说明

代码:

import numpy as np; np.random.seed(0)
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
uniform_data = np.random.rand(10, 12)
ax = sns.heatmap(uniform_data, vmin=0, vmax=1)
plt.yticks(rotation=0)
plt.show()
Run Code Online (Sandbox Code Playgroud)

xlabel 在顶部但带有勾号: 在此处输入图片说明

代码:

import numpy as np; np.random.seed(0)
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
uniform_data = np.random.rand(10, 12)
ax = sns.heatmap(uniform_data, vmin=0, vmax=1)
plt.yticks(rotation=0)
ax.xaxis.tick_top() # x axis on top
ax.xaxis.set_label_position('top')
plt.show()
Run Code Online (Sandbox Code Playgroud)

python plot matplotlib heatmap seaborn

19
推荐指数
2
解决办法
1万
查看次数

ValueError:不再支持多维索引(例如“obj[:, None]”)。在索引之前转换为 numpy 数组

我正在尝试使用seaborn 绘制直方图。obj[:, None]当我尝试设置 kde=True 时,返回此错误: ValueError:不再支持多维索引(例如)。在建立索引之前转换为 numpy 数组。

sns.histplot(data=df, x='age', kde=True);
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

visualization histogram kernel-density seaborn

19
推荐指数
2
解决办法
2万
查看次数

在Seaborn隐藏轴标题

鉴于以下热图,我将如何删除轴标题('月'和'年')?

import seaborn as sns

# Load the example flights dataset and conver to long-form
flights_long = sns.load_dataset("flights")
flights = flights_long.pivot("month", "year", "passengers")

# Draw a heatmap with the numeric values in each cell
sns.heatmap(flights, annot=True, fmt="d", linewidths=.5)
Run Code Online (Sandbox Code Playgroud)

当前图表

python-3.x seaborn

18
推荐指数
1
解决办法
2万
查看次数

Seaborn计数图,每组标准化y轴

我想知道是否可以创建Seaborn计数图,但是不是y轴上的实际计数,而是显示其组内的相对频率(百分比)(如hue参数所指定).

我用以下方法解决了这个问题,但我无法想象这是最简单的方法:

# Plot percentage of occupation per income class
grouped = df.groupby(['income'], sort=False)
occupation_counts = grouped['occupation'].value_counts(normalize=True, sort=False)

occupation_data = [
    {'occupation': occupation, 'income': income, 'percentage': percentage*100} for 
    (income, occupation), percentage in dict(occupation_counts).items()
]

df_occupation = pd.DataFrame(occupation_data)

p = sns.barplot(x="occupation", y="percentage", hue="income", data=df_occupation)
_ = plt.setp(p.get_xticklabels(), rotation=90)  # Rotate labels
Run Code Online (Sandbox Code Playgroud)

结果:

含有seaborn的百分比图

我正在使用来自UCI机器学习库的众所周知的成人数据集.pandas数据框的创建方式如下:

# Read the adult dataset
df = pd.read_csv(
    "data/adult.data",
    engine='c',
    lineterminator='\n',

    names=['age', 'workclass', 'fnlwgt', 'education', 'education_num',
           'marital_status', 'occupation', 'relationship', 'race', 'sex',
           'capital_gain', 'capital_loss', 'hours_per_week', …
Run Code Online (Sandbox Code Playgroud)

python pandas seaborn

18
推荐指数
6
解决办法
2万
查看次数

调整seaborn.boxplot

我想比较一组得分(score)的分布,按一些类别(centrality)分组并用其他一些()着色model.我用seaborn试过以下内容:

plt.figure(figsize=(14,6))
seaborn.boxplot(x="centrality", y="score", hue="model", data=data, palette=seaborn.color_palette("husl", len(models) +1))
seaborn.despine(offset=10, trim=True)
plt.savefig("/home/i11/staudt/Eval/properties-replication-test.pdf", bbox_inches="tight")
Run Code Online (Sandbox Code Playgroud)

我对这个情节有一些问题:

  • 有大量的异常值,我不喜欢它们是如何绘制的.我可以删除它们吗?我可以改变外观以减少混乱吗?我可以给它们着色至少使它们的颜色与盒子颜色相匹配吗?
  • modeloriginal是特殊的,因为所有其他分布应该与分布进行比较original.这应该在视图中直观地反映出来.我可以制作original每组的第一个盒子吗?我可以以某种方式偏移或标记它吗?是否有可能在每个original分布的中位数和一组方框中绘制一条水平线?
  • 有些值score非常小,如何正确缩放y轴来显示它们?

在此输入图像描述

编辑:

这是一个带有对数刻度的y轴的示例 - 也不是理想的.为什么有些盒子似乎在低端切断?

在此输入图像描述

python plot matplotlib boxplot seaborn

18
推荐指数
1
解决办法
3万
查看次数

AttributeError:seaborn中的未知属性图例

seaborn stripplot具有允许的功能hue.

使用https://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.stripplot.html中的示例

import seaborn as sns
sns.set_style("whitegrid")
tips = sns.load_dataset("tips")
ax = sns.stripplot(x=tips["total_bill"])
ax = sns.stripplot(x="sex", y="total_bill", hue="day", data=tips, jitter=True)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在这种情况下,图例非常小,每天显示不同的色调.但是,我想删除传说.

通常,一个包括参数legend=False.但是,对于stripplot,这似乎输出属性错误:

AttributeError: Unknown property legend
Run Code Online (Sandbox Code Playgroud)

可以删除传说stripplots吗?如果是这样,那怎么做呢?

python matplotlib legend pandas seaborn

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