小编tsa*_*lis的帖子

r - ggplot2 - 在两个geom_abline图层之间创建阴影区域

关于在ggplot2中使用阴影区域的帖子一些 ,但我认为没有完全回答我的问题.我有两个斜坡用于跨越多个条件的线,我想遮蔽它们之间的区域.这是示例数据:

dat <- data.frame(cond1=c("a","a","b","b"),
              cond2=c("c","d","c","d"),
              x=c(1,5),
              y=c(1,5),
              sl=c(1,1.2,0.9,1.1),
              int=c(0,0.1,0.1,0),
              slopeU=c(1.1,1.3,1.2,1.2),
              slopeL=c(.9,1,0.7,1))
Run Code Online (Sandbox Code Playgroud)

这里,sl是来自单独拟合程序的平均斜率参数,slopeU并且slopeL表示每个条件中斜率估计的上下置信区域.拦截被限制为相同.以下代码使用一些分面绘制每个条件的最佳拟合线:

p <- ggplot(dat,aes(x=x,y=y,colour=cond1))
p <- p + facet_grid(. ~ cond2)
p <- p + geom_blank()
p <- p + geom_abline(aes(intercept=int,slope=sl,colour=cond1),data=dat)
p
Run Code Online (Sandbox Code Playgroud)

我想补充由定义的行intercept=int, slope=slopeUintercept=int, slope=slopeL(例如,在对小区和阴影它们之间的区域alpha=.5中的相应COND1颜色).

我认识到,通过一些操作,我可以创建一个数据框,指定这些线的值至少两个x值,然后绘制相应的geom_ribbon或geom_polygon来创建阴影区域,但是我想找到一个更优雅的解决方案.或者是从斜坡手动指定一些坐标并截取唯一的方法?如何最好地创建所需的数据框(需要比原始框架具有更多的行,以考虑条件和x,y对的所有组合).

r ggplot2

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

使用scikit-image将numpy数组保存为具有高精度(16位)的图像

我正在使用2D浮点numpy数组,我想保存到高精度的灰度.png文件(例如16位).skimage.io如果可能的话,我想使用scikit-image 包.

这是我尝试过的主要内容:

import numpy as np
from skimage import io, exposure, img_as_uint, img_as_float

im = np.array([[1., 2.], [3., 4.]], dtype='float64')
im = exposure.rescale_intensity(im, out_range='float')
im = img_as_uint(im)
im
Run Code Online (Sandbox Code Playgroud)

生产:

array([[    0, 21845],
       [43690, 65535]], dtype=uint16)
Run Code Online (Sandbox Code Playgroud)

首先,我尝试将其保存为图像,然后使用Python Imaging Library重新加载:

# try with pil:
io.use_plugin('pil')
io.imsave('test_16bit.png', im)
im2 = io.imread('test_16bit.png')
im2
Run Code Online (Sandbox Code Playgroud)

生产:

array([[  0,  85],
       [170, 255]], dtype=uint8)
Run Code Online (Sandbox Code Playgroud)

所以在某处(无论是写入还是读取)我都失去了精确度.然后我尝试使用matplotlib插件:

# try with matplotlib:
io.use_plugin('matplotlib')
io.imsave('test_16bit.png', im)
im3 = io.imread('test_16bit.png')
im3
Run Code Online (Sandbox Code Playgroud)

给我一个32位浮点数:

array([[ 0.        ,  0.33333334],
       [ 0.66666669,  1.        ]], …
Run Code Online (Sandbox Code Playgroud)

python numpy image-processing scipy scikit-image

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

Python中数字向量的R's paste命令的等价物

以前一定是这个问题,但我恐怕找不到答案.

在R中,我可以写

paste0('s', 1:10)
Run Code Online (Sandbox Code Playgroud)

返回10个字符(字符串)变量的列表:

[1] "s1"  "s2"  "s3"  "s4"  "s5"  "s6"  "s7"  "s8"  "s9"  "s10"
Run Code Online (Sandbox Code Playgroud)

我如何在Python中完成此操作?我能想到的唯一方法是使用for循环,但必须有一个简单的单行.

我尝试过类似的东西

's' + str(np.arange(10))
['s', str(np.arange(10))]
Run Code Online (Sandbox Code Playgroud)

python string r

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

Pandas通过布尔"loc"和后续的"iloc"进行索引

我想使用布尔掩码索引Pandas数据帧,然后根据整数索引在过滤后的数据帧的子集中设置一个值,并将此值反映在数据帧中.也就是说,如果这对数据框架有所了解,我会很高兴.

例:

In [293]:

df = pd.DataFrame({'a': [0, 1, 2, 3, 4, 5, 6, 7],
                   'b': [5, 5, 2, 2, 5, 5, 2, 2],
                   'c': [0, 0, 0, 0, 0, 0, 0, 0]})

mask = (df['a'] < 7) & (df['b'] == 2)
df.loc[mask, 'c']

Out[293]:
2    0
3    0
6    0
Name: c, dtype: int64
Run Code Online (Sandbox Code Playgroud)

现在我想设置过滤后的数据帧中返回的前两个元素的值.链接ilocloc上面的呼叫工作索引:

In [294]:

df.loc[mask, 'c'].iloc[0: 2]

Out[294]:

2    0
3    0
Name: c, dtype: int64
Run Code Online (Sandbox Code Playgroud)

但不要分配:

In [295]:

df.loc[mask, 'c'].iloc[0: 2] …
Run Code Online (Sandbox Code Playgroud)

python pandas

8
推荐指数
2
解决办法
7724
查看次数

使用Seaborn和Statsmodels在一个图中显示数据和模型预测

Seaborn是一个很棒的包,用于进行一些具有漂亮输出的高级绘图.然而,我正在努力使用Seaborn来覆盖来自外部拟合模型的数据和模型预测.在这个例子中,我在Statsmodels中拟合模型,这些模型对于Seaborn而言过于复杂而无法开箱即用,但我认为问题更为一般(即如果我有模型预测并希望使用Seaborn将它们和数据可视化).

让我们从导入和数据集开始:

import numpy as np
import pandas as pd
import seaborn as sns
import statsmodels.formula.api as smf
import patsy
import itertools
import matplotlib.pyplot as plt

np.random.seed(12345)

# make a data frame with one continuous and two categorical variables:
df = pd.DataFrame({'x1': np.random.normal(size=100),
                     'x2': np.tile(np.array(['a', 'b']), 50),
                     'x3': np.repeat(np.array(['c', 'd']), 50)})

# create a design matrix using patsy:
X = patsy.dmatrix('x1 * x2 * x3', df)

# some random beta weights:
betas = np.random.normal(size=X.shape[1])

# create the response variable as …
Run Code Online (Sandbox Code Playgroud)

python matplotlib statsmodels seaborn

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

Seaborn FacetGrid用户定义的绘图功能

在Seaborn中,您可以使用FacetGrid设置要绘制的数据感知网格.然后,您可以使用mapmap_dataframe方法绘制到这些网格.

我无法正确指定与map或一起使用的用户定义的绘图函数map_dataframe.在这个例子中,我使用errorbar我想要将错误值作为2xN数组传递的函数.在我的例子中(取自@ mwaskom 在这里的答案),错误是对称的 - 但想象我有一种情况,他们不是.

In [255]:

from scipy import stats
tips_all = sns.load_dataset("tips")
tips_grouped = tips_all.groupby(["smoker", "size"])
tips = tips_grouped.mean()
tips["error_min"] = tips_grouped.total_bill.apply(stats.sem) * 1.96
tips["error_max"] = tips_grouped.total_bill.apply(stats.sem) * 1.96
tips.reset_index(inplace=True)
tips

Out[255]:
    smoker  size    total_bill  tip     error_min   error_max
0   No  1   8.660000    1.415000    2.763600    2.763600
1   No  2   15.342333   2.489000    0.919042    0.919042
2   No  3   21.009615   3.069231    2.680447    2.680447
3   No  4   27.769231   4.195769 …
Run Code Online (Sandbox Code Playgroud)

python seaborn

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

覆盖两个numpy阵列,将第四个平面视为alpha级别

我有两个numpy形状的阵列(256,256,4).我想将第四个256 x 256平面视为alpha级别,并导出一个覆盖这些数组的图像.

代码示例:

import numpy as np
from skimage import io

fg = np.ndarray((256, 256, 4), dtype=np.uint8)
one_plane = np.random.standard_normal((256, 256)) * 100 + 128
fg[:,:,0:3] = np.tile(one_plane, 3).reshape((256, 256, 3), order='F')
fg[:, :, 3] = np.zeros((256, 256), dtype=np.uint8)
fg[0:128, 0:128, 3] = np.ones((128, 128), dtype=np.uint8) * 255
fg[128:256, 128:256, 3] = np.ones((128, 128), dtype=np.uint8) * 128

bg = np.ndarray((256, 256, 4), dtype=np.uint8)
bg[:,:,0:3] = np.random.standard_normal((256, 256, 3)) * 100 + 128
bg[:, :, 3] = np.ones((256, 256), dtype=np.uint8) …
Run Code Online (Sandbox Code Playgroud)

python numpy image alphablending scikit-image

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

计算矩阵中所有可能的列差异

我想计算矩阵的各列之间所有可能的成对差异(无重复)。什么是有效的/ pythonic方式做到这一点?

mat = np.random.normal(size=(10, 3))
mat 

array([[ 1.57921282,  0.76743473, -0.46947439],
       [ 0.54256004, -0.46341769, -0.46572975],
       [ 0.24196227, -1.91328024, -1.72491783],
       [-0.56228753, -1.01283112,  0.31424733],
       [-0.90802408, -1.4123037 ,  1.46564877],
       [-0.2257763 ,  0.0675282 , -1.42474819],
       [-0.54438272,  0.11092259, -1.15099358],
       [ 0.37569802, -0.60063869, -0.29169375],
       [-0.60170661,  1.85227818, -0.01349722],
       [-1.05771093,  0.82254491, -1.22084365]])
Run Code Online (Sandbox Code Playgroud)

在此矩阵中,存在3个成对的差异(N选择k个唯一的组合,顺序无关紧要)。

pair_a = mat[:, 0] - mat[:, 1]
pair_b = mat[:, 0] - mat[:, 2]
pair_c = mat[:, 1] - mat[:, 2]
Run Code Online (Sandbox Code Playgroud)

是一种(丑陋的)方式。您可以轻松想象将嵌套for循环用于较大的矩阵,但是我希望有更好的方法。

我希望结果是具有scipy.misc.comb(mat.shape[1], 2)列和mat.shape[0]行的另一个矩阵。

python numpy scipy

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