我刚刚开始在R中使用网状包,我仍然会发现一些问题.特别是,导入matplotlib并不顺利.我尝试了两种不同的方式,每种方式都有不同的错误信息.
首先,在RStudio的交互式shell中使用repl_python:
library(reticulate)
use_python('/home/craig/anaconda3/bin/python')
py_discover_config()
repl_python()
import matplotlib.pyplot as plt
Run Code Online (Sandbox Code Playgroud)
打开的REPL Python shell似乎有正确的版本和所有内容,但是当我尝试导入matplotlib.pyplot时,我看到以下内容:
ImportError:/lib/x86_64-linux-gnu/libz.so.1:找不到版本`ZLIB_1.2.9'(/home/craig/anaconda3/lib/python3.6/site-packages/matplotlib/../ ../.././libpng16.so.16)
安装zlib(使用sudo apt-get install lib64z1-dev lib64z1)似乎没有改变任何东西.import matplotlib只要我不需要,FWIW 工作得很好pyplot.
我也尝试在R Markdown文档中做同样的事情:
```{r}
library(reticulate)
py_discover_config()
```
```{python}
import matplotlib.pyplot as plt
```
Run Code Online (Sandbox Code Playgroud)
这次我看到:
py_get_attr_impl(x,name,silent)出错:AtributeError:模块'matplotlib'没有属性'pyplot'调用:... $ .python.builtin.object - > py_get_attr - > py_get_attr_impl - > .Call执行暂停
任何想法可能会发生在这里?
谢谢!
更新:正如我在评论中提到的,安装网格的开发者版本修复了一些问题,但不是全部.如果我尝试运行此Rmd:
```{r}
library(reticulate)
use_python('/home/craig/anaconda3/bin/python')
```
```{python}
import matplotlib.pyplot as plt
```
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
Error in py_run_string_impl(code, local, convert) :
ImportError: /home/craig/anaconda3/lib/python3.6/site-packages/PyQt5/../../../libxcb-dri3.so.0: undefined symbol: xcb_send_request_with_fds
Detailed …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 igraph 中制作一个网络图,通过对某些重要边缘进行不同的着色来突出显示某些重要边缘。对于大图,它们经常被埋在其他图下面。例如:
library(igraph)
test <- barabasi.game(200,m=2)
E(test)$color <- "gray"
E(test)[1]$color <- "red"
sort(order(E(test)$color)[E(test)],decreasing=TRUE)
plot(test,
vertex.label=NA,
vertex.shape="none",
vertex.size=0,
edge.arrow.mode=0,
edge.width=2)
Run Code Online (Sandbox Code Playgroud)
给我一个图,其中单个红色边缘位于底部。
如果我选择对编号较高的边(而不是#1)进行着色,则它更有可能不被掩埋。
所以在我看来,一种选择是以某种方式重新排列边缘。我试过
E(test) <- E(test)[order(E(test)$color)]
Run Code Online (Sandbox Code Playgroud)
但这给我带来了“无效索引”错误。关于我还应该尝试什么的任何想法?
我想要做的是创建一个动画,其中图形的节点随时间改变颜色.当我在matplotlib中搜索有关动画的信息时,我通常会看到如下所示的示例:
#!/usr/bin/python
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.animation import ArtistAnimation
fig = plt.figure(figsize=(8,8))
images = []
for i in range(10):
data = np.random.random(100).reshape(10,10)
imgplot = plt.imshow(data)
images.append([imgplot])
anim = ArtistAnimation(fig, images, interval=50, blit=True)
anim.save('this-one-works.mp4')
plt.show()
Run Code Online (Sandbox Code Playgroud)
所以我想我可以这样做:
#!/usr/bin/python
import numpy as np
import networkx as nx
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.animation import ArtistAnimation
G = nx.Graph()
G.add_edges_from([(0,1),(1,2),(2,0)])
fig = plt.figure(figsize=(8,8))
pos=nx.graphviz_layout(G)
images = []
for i in range(10):
nc = np.random.random(3)
imgplot …Run Code Online (Sandbox Code Playgroud) 我真的是R的新手,所以请多多包涵。我正在使用卡方检验比较给定位置的核苷酸频率,并在两个不同的数据集中计算了A,C,G,T的数量:
x1 <- c(272003,310418,201601,237168)
x2 <- c(239614,316515,182070,198025)
Run Code Online (Sandbox Code Playgroud)
我可以想到两种方法来进行两样本卡方检验:
> chisq.test(x1,x2)
Pearson's Chi-squared test
data: x1 and x2
X-squared = 12, df = 9, p-value = 0.2133
Warning message:
In chisq.test(x1, x2) : Chi-squared approximation may be incorrect
Run Code Online (Sandbox Code Playgroud)
要么
> chisq.test(cbind(x1,x2))
Pearson's Chi-squared test
data: cbind(x1, x2)
X-squared = 2942.065, df = 3, p-value < 2.2e-16
Run Code Online (Sandbox Code Playgroud)
我怀疑第二个版本是正确的,因为我也可以这样做:
> chisq.test(x1,x1)
Pearson's Chi-squared test
data: x1 and x1
X-squared = 12, df = 9, p-value = 0.2133
Warning message:
In chisq.test(x1, x1) : …Run Code Online (Sandbox Code Playgroud)