小编My *_*ork的帖子

避免 Seaborn 条形图颜色去饱和

我正在尝试使用几个不同的库(bokehseabornmatlotlib)在 Python 中绘制绘图,但保持相同的配色方案。我从 bokeh with: 中选择了分类调色板,
from bokeh.palettes import Category10 as palette
然后也在seaborn和中使用了它matplotlib。我的问题是,虽然matplotlib颜色看起来非常相似bokeh(如调色板中定义的),但seaborn显示出比应有的颜色明显更深的颜色(即饱和度较低或不饱和)。我想知道它是否默认对任何配色方案进行某种变暗,以及是否有任何方法可以避免这种情况。下面是使用不同库制作相同条形图的代码
使用bokeh

source = pd.DataFrame({'names': ['exp_1', 'exp_2'], 'data':[3, 5], 'color':palette[10][:2]})
p = bokeh.plotting.figure(x_range=['exp_1', 'exp_2'], y_range=(0,6), plot_height=500, title="test")
p.vbar(x='names', top='data', width=0.9,  legend_field="names", source=source, color='color')
p.xgrid.grid_line_color = None
p.legend.orientation = "horizontal"
p.legend.location = "top_center"
p.xaxis.major_label_text_font_size = '22pt'
p.yaxis.major_label_text_font_size = '22pt'
bokeh.io.show(p)
Run Code Online (Sandbox Code Playgroud)

使用matplotlib

# same palette both for seaborn and matplotlib …
Run Code Online (Sandbox Code Playgroud)

python plot matplotlib palette seaborn

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

无法从“skimage.feature”导入名称“graycomatrix”

我已经成功安装了 skimage 软件包,但是当我尝试导入

from skimage.feature import graycomatrix, graycoprops
Run Code Online (Sandbox Code Playgroud)

它会导致错误:

cannot import name 'graycomatrix' from 'skimage.feature' (/Users/ain/opt/anaconda3/lib/python3.8/site-packages/skimage/feature/__init__.py)
Run Code Online (Sandbox Code Playgroud)

python scikit-image jupyter-notebook

7
推荐指数
2
解决办法
9345
查看次数

Seaborn kde 图绘制概率而不是密度(没有条形的直方图)

我有一个关于seaborn的问题kdeplot。可以histplot设置他们想要的统计数据kde(计数、频率、密度、概率),如果与参数一起使用,它也适用于kdeplot. kdeplot但是,如果我只想使用概率进行 kde 图估计,我还没有找到如何直接更改它的方法。histplot或者,如果可以关闭酒吧,应该会得到相同的结果,但我也没有发现。那么如何才能做到这一点呢?

举一些直观的例子,我只想有红色曲线,即。要么将参数传递给kdeplotuse probabilities,要么从 中删除栏histplot

import seaborn

penguins = sns.load_dataset("penguins")
sns.histplot(data=penguins, x="flipper_length_mm", kde=True, stat="probability", color="r", label="probabilities")
sns.kdeplot(data=penguins, x="flipper_length_mm", color="k", label="kde density")
plt.legend()
Run Code Online (Sandbox Code Playgroud)

im1 - kde 和历史图

多谢。

python histogram seaborn

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

anova_lm() 中 type 的使用

抱歉,我是 python 和统计新手。我对函数typ中的感到好奇anova_lm()。典型 1、2、3 是什么意思以及它们有何不同?这是所使用的示例代码typ=2

aov_table = sm.stats.anova_lm(results, typ=2)
aov_table
Run Code Online (Sandbox Code Playgroud)

python anova statsmodels

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

Seaborn 通过多个 groupby 绘制 pandas 数据框

我有 pandas 数据框,其中我在两个类别(正、负)中嵌套了 4 个类别(50,60,70,80),并且我想使用基于列的 seaborn kdeplot(例如,A_mean...)进行绘图通过...分组。我想要实现的是这个图片(这是通过将 pandas 拆分到一个列表来完成的)。我浏览了几篇文章,此代码(Seaborn 中的多个单图与 pandas groupby 数据)适用于一个级别,但如果我想为每个 Game_RS 绘制此代码,则不适用于两个级别:

for i, group in df_hb_SLR.groupby('Condition'):
    sns.kdeplot(data=group['A_mean_per_subject'], shade=True, color='blue', label = 'label name')
Run Code Online (Sandbox Code Playgroud)

我尝试使用这个(Seaborn groupby pandas Series),但第一个答案对我不起作用:

sns.kdeplot(df_hb_SLR.A_mean_per_subject, groupby=df_hb_SLR.Game_RS)

AttributeError: 'Line2D' object has no property 'groupby'
Run Code Online (Sandbox Code Playgroud)

以及我无法做出的关键答案。有没有直接来自seaborn的方法或者直接来自pandas Dataframe的更好方法?

我的数据可以在此链接下以 csv 格式访问——数据,我照常加载它们:

df_hb_SLR = pd.read_csv('data.csv')
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助。

python pandas seaborn pandas-groupby

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

链接 loc 和 iloc 后更改 pandas 中的值

我有以下问题:在 df 中,我想选择特定的行和特定的列,并在此选择中获取第一个n元素并为其分配新值。天真地,我认为下面的代码应该可以完成这项工作:

import seaborn as sns
import pandas as pd

df = sns.load_dataset('tips')
df.loc[df.day=="Sun", "smoker"].iloc[:4] = "Yes"
Run Code Online (Sandbox Code Playgroud)

loc和都iloc应该返回 df 的视图,并且该值应该被覆盖。但是,数据框不会改变。为什么?

我知道如何解决这个问题 - 首先使用 来创建一个新的 df loc,然后使用更改值iloc并更新回原始 df (如下所示)。

但是a)我认为这不是最佳的,b)我想知道为什么顶级解决方案不起作用。为什么它返回一个副本而不是视图的视图?

替代解决方案:

df = sns.load_dataset('tips')
tmp = df.loc[df.day=="Sun", "smoker"]
tmp.iloc[:4] = "Yes"
df.loc[df.day=="Sun", "smoker"] = tmp
Run Code Online (Sandbox Code Playgroud)

注意:我已经阅读了文档、这篇非常棒的文章和这个问题,但他们没有解释这一点。df.loc[mask,"z]他们关心的是和链式之间的区别df["z"][mask]

python dataframe pandas pandas-loc

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

python OpenCv IMREAD_UNCHANGED 只返回三个通道

我试图找出我的代码有什么问题。

我想加载包含 Alpha 通道的图像,官方网站的描述如下:

cv.IMREAD_UNCHANGED:如果设置,则按原样返回加载的图像(带有 Alpha 通道,否则会被裁剪)。

这是我的尝试:

import cv2 as cv 

img2 = cv.imread( 'lbj.jpg' , cv.IMREAD_UNCHANGED)

img2.shape
Run Code Online (Sandbox Code Playgroud)

结果显示:(350, 590, 3)

不是应该的吗(350,590,4)

谢谢!

python opencv image

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

Seaborn 和 matplotlib 控制子图中的图例

我一直在玩 plt.legend() 和 ax.legend() 以及来自seaborn本身的图例,我想我错过了一些东西。

我的第一个问题是,有人可以向我解释一下它们是如何结合在一起的,它们是如何工作的,如果我有次要情节,什么比什么更好?意思是我可以设置一个一般定义(例如,在此位置的所有子图中都有这个图例),然后为特定子图覆盖这个定义(例如通过 ax.legend() )?

我的第二个问题很实际,也展示了我的问题。我们以seaborn Smokers数据集来说明一下:

import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")

# define sizes for labels, ticks, text, ...
# as defined here /sf/ask/272998631/
SMALL_SIZE = 10
MEDIUM_SIZE = 14
BIGGER_SIZE = 18

plt.rc('font', size=SMALL_SIZE)          # controls default text sizes
plt.rc('axes', titlesize=SMALL_SIZE)     # fontsize of the axes title
plt.rc('axes', labelsize=BIGGER_SIZE)    # fontsize of the x and y labels
plt.rc('xtick', labelsize=MEDIUM_SIZE)    # fontsize of the tick labels
plt.rc('ytick', labelsize=MEDIUM_SIZE)    # fontsize …
Run Code Online (Sandbox Code Playgroud)

python matplotlib legend subplot seaborn

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

笔记本验证失败 Jupyter

这不是Notebook Validation Failed的副本。

我有一个 Jupyter ntb,它直到最近都运行良好。无论我做什么,我都会遇到那些正在改变的错误(我附上了一些例子),我用 ntb 做什么并不重要(我尝试重新启动内核,重新启动 Jupyter)。此外,它仅发生在此 ntb 中,即使在同一会话中同时运行,也不会发生在其他 ntb 中。我试图搜索,但找不到任何东西。我在 Jupyter 中得到的是: 在此处输入图片说明

其中有很多,相似但不同:

The save operation succeeded, but the notebook does not appear to be valid. The validation error was:
Notebook validation failed: Non-unique cell id 'geological-poker' detected. Corrected to 'front-hampshire'.:
"<UNKNOWN>"
Run Code Online (Sandbox Code Playgroud)

或其他:

Notebook validation failed: Non-unique cell id 'medieval-nebraska' detected. Corrected to 'stock-eating'.:
"<UNKNOWN>"
Run Code Online (Sandbox Code Playgroud)
Notebook validation failed: Non-unique cell id 'intense-award' detected. Corrected to 'blocked-garage'.:
"<UNKNOWN>"
Run Code Online (Sandbox Code Playgroud)

我在终端得到的是:

Notebook JSON is invalid: Non-unique cell id …
Run Code Online (Sandbox Code Playgroud)

python jupyter jupyter-notebook

3
推荐指数
3
解决办法
1004
查看次数

cmap 在seaborn 中如何工作以及如何更改分箱?

这个问题的灵感来自于R 中 pheatmap 的中断。问题是我是否可以定义我的着色和分箱在seaborn的热图中的“粗糙”程度、连续/离散程度。我找到了一种使用 cmap 和使用的颜色数量来做到这一点的方法(例如,seaborn 热图中的离散图例)。但是,我不知道这些颜色组的分配是如何完成的。


所以问题是,如果我使用 cmap 并强制 seaborn 仅使用一组离散的 colors=bins,数据如何分箱?我怎样才能手动设置它?例如。对于 R,我可以将中断设置为从 0 到 800,步长为 100,并将其传递给“breaks”参数。

中断列表 = seq(0, 800, by = 100)

如果我的比例是线性的,那么使用 cmap 和颜色数量非​​常简单,但如果我想让 bins=colorbar 对数或只是不等距,我该怎么做?


为了举一个具体的例子,我举一个航班数据集的例子。左边是原来的默认图,右边是我选择 5 种颜色来组成 5 个 bin。那么如何定义这些垃圾箱的边缘呢?我可以重置它们,以便我有例如。垃圾箱 0-200、200-300、300-400、400-600、600 以上?(我故意使用不等的垃圾箱来表达我的意思。)

# choose 5 colours to create 5 bins
cmap = sns.color_palette('rocket', n_colors=5)

# run this without the cmap argument to get the first image
flights = sns.load_dataset("flights")
flights = flights.pivot("month", …
Run Code Online (Sandbox Code Playgroud)

python r heatmap seaborn

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

有没有办法在 matplotlib 的单个图中使用 hlines() 函数绘制多条水平线?

我有一个pm2_5数据帧数据,我使用matplotlib scatterplot. 我想在不同的y 值处插入多条水平线,我通过为每个不同的y值手动调用 '''ax.axhline''' 函数来实现。有没有办法让整个过程自动化?

# making a graph with delineated health levels of pm2.5 in the year 2015
fig, ax=plt.subplots(figsize=(10,7));
pm2_5.plot(kind='scatter',x='S_no',y='pm2_5',c='pm2_5',ax=ax, cmap='tab20b');
ax.axhline(y=150,linestyle ='--')
ax.axhline(y=100,linestyle ='--')
ax.axhline(y=200,linestyle ='--')
ax.axhline(y=300,linestyle ='--')
Run Code Online (Sandbox Code Playgroud)

它应该是这样的: 在此输入图像描述

matplotlib scatter-plot horizontal-line

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