我是使用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网格线的风格的想法......特别是,我喜欢让它们更窄.
这是一个显示每个子图的颜色条的示例:
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],但是如何从图中完全删除它们呢?我不认为在调用热图时可以选择不绘制颜色条.
Seaborn提供了一些非常有趣的科学数据表示图形.因此,我开始使用这些Seaborn图形穿插其他定制的matplotlib图.问题是,一旦我这样做:
import seaborn as sb
Run Code Online (Sandbox Code Playgroud)
这个导入似乎设置了seaborn全局的图形参数,然后导入下面的所有matplotlib图形都获得了seaborn参数(它们得到灰色背景,linewithd更改等等).
在SO中有一个答案解释如何使用matplotlib配置生成seaborn图,但我想要的是在将两个库一起使用时保持matplotlib配置参数不变,同时能够在需要时生成原始的seaborn图.
我需要将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)
但这不起作用,文档也不是很清楚.我该怎么做呢?
我如何使用“tick_top”以外的其他东西将 xlabel 定位在图的顶部 - 这会为 x 标签添加一个勾号,而我不想要它。
代码:
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)
代码:
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) 我正在尝试使用seaborn 绘制直方图。obj[:, None]当我尝试设置 kde=True 时,返回此错误: ValueError:不再支持多维索引(例如)。在建立索引之前转换为 numpy 数组。
sns.histplot(data=df, x='age', kde=True);
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
鉴于以下热图,我将如何删除轴标题('月'和'年')?
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)
我想知道是否可以创建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)
结果:
我正在使用来自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) 我想比较一组得分(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)
我对这个情节有一些问题:
model值original是特殊的,因为所有其他分布应该与分布进行比较original.这应该在视图中直观地反映出来.我可以制作original每组的第一个盒子吗?我可以以某种方式偏移或标记它吗?是否有可能在每个original分布的中位数和一组方框中绘制一条水平线?score非常小,如何正确缩放y轴来显示它们?编辑:
这是一个带有对数刻度的y轴的示例 - 也不是理想的.为什么有些盒子似乎在低端切断?
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吗?如果是这样,那怎么做呢?
seaborn ×10
python ×8
matplotlib ×7
heatmap ×3
pandas ×2
plot ×2
boxplot ×1
histogram ×1
legend ×1
python-3.x ×1