小编ohn*_*lus的帖子

点颜色的散点图表示seaborn FacetGrid中的连续变量

我试图在python中使用seaborn生成多面板图,我希望我的多面板图中的点的颜色由连续变量指定.以下是我尝试使用"iris"数据集的示例:

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt
iris = sns.load_dataset('iris')

g = sns.FacetGrid(iris, col = 'species', hue = 'petal_length', palette = 'seismic')
g = g.map(plt.scatter, 'sepal_length', 'sepal_width', s = 100, alpha = 0.5)
g.add_legend()
Run Code Online (Sandbox Code Playgroud)

这使得下图: iris_continuous

这很好,但传说太长了.我想像这些值的1/4一样(理想情况下)或禁止显示颜色条.例如,这样的事情可能是可以接受的,但我仍然想把它分成三个物种.

plt.scatter(iris.sepal_length, iris.sepal_width, alpha = .8, c = iris.petal_length, cmap = 'seismic')
cbar = plt.colorbar()
Run Code Online (Sandbox Code Playgroud)

一个小组

关于如何充分利用这两个情节的任何想法?

编辑:这个主题似乎是一个好的开始.

https://github.com/mwaskom/seaborn/issues/582

不知何故,对于这个用户,只需在其他所有运行之后附加plt.colorbar似乎以某种方式工作.但在这种情况下似乎没有帮助.

python matplotlib seaborn

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

使用purrr映射dplyr :: select

我有一个数据框架,其中有一堆嵌套的数据框架,我想将dplyr :: select应用于每个嵌套的数据框架。这是一个例子

 library(tidyverse)

 mtcars %>%
 group_by(cyl) %>%
 nest %>%
 mutate(data2 = ~map(data, dplyr::select(.,-mpg)))
Run Code Online (Sandbox Code Playgroud)

我认为这将导致一个包含三列的数据框。cyl:柱面数,data:嵌套数据,data2:与数据相同,除了每个元素没有mpg列。

而是R崩溃:

 *** caught segfault ***
address 0x7ffc1e445000, cause 'memory not mapped'

Traceback:
 1: .Call(`_dplyr_mutate_impl`, df, dots)
 2: mutate_impl(.data, dots)
 3: mutate.tbl_df(., data2 = ~map(data, dplyr::select(., -mpg)))
 4: mutate(., data2 = ~map(data, dplyr::select(., -mpg)))
 5: function_list[[k]](value)
 6: withVisible(function_list[[k]](value))
 7: freduce(value, `_function_list`)
 8: `_fseq`(`_lhs`)
 9: eval(quote(`_fseq`(`_lhs`)), env, env)
10: eval(quote(`_fseq`(`_lhs`)), env, env)
11: withVisible(eval(quote(`_fseq`(`_lhs`)), env, env))
12: mtcars %>% group_by(cyl) %>% …
Run Code Online (Sandbox Code Playgroud)

r dplyr purrr

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

我可以在 R markdown 中删除方程式中的文本吗

我在 r-markdown 中写了一个方程,如下所示

$$ 2 \frac{meter}{day} * 3 ~ days $$
Run Code Online (Sandbox Code Playgroud)

基本方程

我想days通过删除它们来表明取消。您通常可以通过以下方式删除 r-markdown 中的文本~~surrounding the text in tildaes~~

然而,表达式中的代字号似乎只插入空格。

$$ 2 \frac{meter}{~~day~~} * 3 ~ ~~days~~ $$

鹬科

我也尝试过乳胶

$$ 2 \frac{meter}{sout{day}} * 3 ~ days $$

但这似乎也不起作用。

苏特肯

是否有任何选项可以删除在 r-markdown 方程中起作用的方程部分?

equation r r-markdown

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

ggplot geom_bar 正在绘制计数而不是值,即使启用了 stat="identity" 设置

我在 python 中使用 ggplot,只是想制作一个基本的条形图。由于我不明白的原因,条形高度对应于变量名称的计数,而不是实际变量。

简单的例子

pattern = pd.Series(['standard', 'woolly', 'brown', 'spotted', 'red', 'wheat', 'grey'], dtype = 'category')
population = pd.Series([12, 2, 7, 3, 2, 4,5])
patternCount = pd.DataFrame({'color':pattern, 'population':population})

ggplot(aes(x = 'attribute', y = 'population'), data = animalCounts) +\
geom_bar(stat = "identity")
Run Code Online (Sandbox Code Playgroud)

给我一个看起来像这样的条形图。 显示计数而不是值的条形图

我知道这些是计数,而不仅仅是数字,因为如果我有这些名称中的任何一个重复,该变量将显示为“2”。

我想我在这里犯了一些非常简单的错误。谢谢你的帮助。

编辑:根据罗恩诺里斯的要求,这里是相同的数字,但缩放到 12,而不是 1。

如上所述,但缩放比例不同

python python-3.x pandas python-ggplot

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

在ggplot的geom_rug中使用与在图表其余部分中使用的数据不同的数据

我在获取geom_rug将某些数据绘制到现有绘图中时遇到麻烦。这是一个示例图,在这里我将某天的访问量与某些度量的大小进行比较。

test <- data.frame(
    visit = rep(c(0, 1.5, 3.5, 6.5, 12), 5),
    mag = rnorm(n = 25)
    )

ggplot(test, aes(x = visit, y = mag)) + geom_point()
Run Code Online (Sandbox Code Playgroud)

生成以下图。 测试图2

我还有其他一些数据,我想在x轴上添加额外的标记。

vac <- data.frame(
    visit = c(2, 4, 6, 8)
    )
Run Code Online (Sandbox Code Playgroud)

由于我不理解的原因,当我运行以下代码时,我什么都没有。

ggplot(test, aes(x = visit, y = mag)) + geom_point() + 
      geom_rug(data=vac, aes(x = visit))
Run Code Online (Sandbox Code Playgroud)

我想我已经以某种方式搞砸了语法,但是我似乎无法弄清楚我在这里做错了什么。有什么建议么?

r ggplot2

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

通过y轴值对ggplot的每个方面中的因子进行排序

让我们说,在R中,我有一个数据框字母,数字和动物,我想以图形方式检查这三者之间的关系.我可以做点什么.

library(dplyr)
library(ggplot2)
library(gridExtra)

set.seed(33)
my_df <- data.frame(
letters = c(letters[1:10], letters[6:15], letters[11:20]),
animals = c(rep('sheep', 10), rep('cow', 10), rep('horse', 10)),
numbers = rnorm(1:30)
    )

ggplot(my_df, aes(x = letters, y = numbers)) + geom_point() +
   facet_wrap(~animals, ncol = 1, scales = 'free_x')
Run Code Online (Sandbox Code Playgroud)

我会得到一些看起来像的东西.未分类的信件

但是,我希望x轴的顺序取决于y轴的顺序.根据这个例子,这很容易做到没有方面.我甚至可以为每只动物制作一个有序的图形,然后用grid.arrange将它们绑定在一起,如本例所示

my_df_shp <- my_df %>% filter(animals == 'sheep')
my_df_cow <- my_df %>% filter(animals == 'cow')
my_df_horse <- my_df %>% filter(animals == 'horse')

my_df_shp1 <- my_df_shp %>% mutate(letters = reorder(letters, numbers))
my_df_cow1 <- my_df_cow %>% …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

将purrr :: walk2()应用于管道末端的data.frames的data.frame

我有一个R数据框,其中有一列数据框,我想将每列数据打印到一个文件中:

df0 <- tibble(x = 1:3, y = rnorm(3))
df1 <- tibble(x = 1:3, y = rnorm(3))
df2 <- tibble(x = 1:3, y = rnorm(3))

animalFrames <- tibble(animals = c('sheep', 'cow', 'horse'),
                       frames = list(df0, df1, df2))
Run Code Online (Sandbox Code Playgroud)

我可以使用for循环来做到这一点:

for (i in 1:dim(animalFrames)[1]){
    write.csv(animalFrames[i,2][[1]], file = paste0('test_', animalFrames[i,1], '.csv'))
}
Run Code Online (Sandbox Code Playgroud)

或具有purrrwalk2功能:

walk2(animalFrames$animals, animalFrames$frames,  ~write.csv(.y, file
= paste0('test_', .x, '.csv')))
Run Code Online (Sandbox Code Playgroud)

有什么方法可以将此游走功能放在magrittr管道的末端?

我在想类似的东西:

animalFrames %>% do({walk2(.$animals, .$frames, ~write.csv(.y, file = paste0('test_', .x, '.csv')))})
Run Code Online (Sandbox Code Playgroud)

但这给我一个错误:

Error: Result must …
Run Code Online (Sandbox Code Playgroud)

r purrr

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

如果 purrr:possible() 内部的表达式失败,则返回映射对象

我有一个数据框,其中一列包含更多数据框。其中一个数据框缺少一列。我想从其他两个数据框中删除该列(如果存在)。

\n\n

这是一个例子:

\n\n
library(tidyverse)\n\nmtcars %>%\ngroup_by(cyl) %>%\nnest -> tmp\ntmp[3,'data'][[1]][[1]] <- dplyr::select(tmp[3,'data'][[1]][[1]], -mpg)\n\nprint(tmp)\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n
# A tibble: 3 x 2\n    cyl data              \n  <dbl> <list>            \n1    6. <tibble [7 \xc3\x97 10]> \n2    4. <tibble [11 \xc3\x97 10]>\n3    8. <tibble [14 \xc3\x97 9]>\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

因此,在这里,该data列包含三个小标题,其中最后一个不包含该列mpg。我可以在数据列上映射 dplyr::select ,并通过返回捕获错误NA如下所示:

\n\n
 tmp %>% mutate(data2 = map(data, possibly(~dplyr::select(.,-mpg), otherwise = NA)))\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n
# A tibble: 3 x 3\n    cyl data               data2            \n  <dbl> <list>             <list>           \n1    6. …
Run Code Online (Sandbox Code Playgroud)

error-handling r purrr

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

使用"*"或"|" ggplot2中的符号注释

我想使用该annotate()函数将以下等式放入R中的ggplot中.

方程

我似乎能够到目前为止最接近的是以下内容

ggplot()+ annotate("label", x = 1, y = 1, label = "APC == 0.50 ~ Depth ^ {-0.99} * (Cone == 0~Net == 1) ^ {0.59}", parse = TRUE, size = 5)
Run Code Online (Sandbox Code Playgroud)

好的注释

这很好,但能够从等式中添加*|符号会很好.我尝试了以下方法:

ggplot()+ annotate("label", x = 1, y = 1, label = "APC == 0.50 * Depth ^ {-0.99} * (Cone == 0|Net == 1) ^ {0.59}", parse = TRUE, size = 5)
Run Code Online (Sandbox Code Playgroud)

但它最终看起来很奇怪

奇怪的注释

关于如何添加or和星形符号的任何建议?

如果有人可以向我解释|当我尝试使用符号时实际发生了什么,为什么它出现在它的位置并添加括号和逗号?

r ggplot2

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

迭代 purrr 中的公式

我有一堆公式,作为字符串,我想在 glm 中一次使用一个,最好使用 tidyverse 函数。这就是我现在所在的地方。

library(tidyverse)
library(broom)

mtcars %>% dplyr::select(mpg:qsec) %>% colnames -> targcols
paste('vs ~ ', targcols) -> formulas
formulas

#> 'vs ~  mpg' 'vs ~  cyl' 'vs ~  disp' 'vs ~  hp' 'vs ~  drat' 'vs ~  wt' 'vs ~  qsec' 
Run Code Online (Sandbox Code Playgroud)

我可以使用这些公式中的任何一个来运行一般线性模型:

glm(as.formula(formulas[1]), family = 'binomial', data = mtcars) %>% glance

#>  null.deviance,  df.null,    logLik, AIC,    BIC,    deviance,   df.residual
#> 43.86011,    31,     -12.76667,  29.53334,   32.46481,   25.53334,   30 
Run Code Online (Sandbox Code Playgroud)

我想用列表中的每个可能的公式运行 glm 。我尝试这样做,如下所示。

data.frame(formulas = formulas) %>%
    mutate(mod = map(formulas, function(fs){ …
Run Code Online (Sandbox Code Playgroud)

r linear-regression purrr

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