在igraph
应用模块化算法查找图形社区之后,我想绘制一个网络布局,清楚地显示不同的社区及其连接.类似于Cytoscape中的"组属性布局":我希望显示每个组/社区的成员彼此接近,并在组/社区之间保持一定距离.我无法找到igraph
提供此功能的任何功能.在发布这个问题时,我已经找到了一个简单的diy解决方案,我将把它作为答案发布.但我想知道是否有更好的可能性,或更详细的解决方案?
我在一个循环中读取150个excel文件,打开它们xlrd.open_workbook()
,返回一个Book
对象.最后,当我尝试umount
卷时,我无法使用,当我查看时lsof
,我发现其中6个文件仍处于打开状态:
$ lsof | grep volumename
python2 32349 deeenes mem REG 0,40 138240 181517 /.../150119.xls
python2 32349 deeenes mem REG 0,40 135168 181482 /.../150609.xls
python2 32349 deeenes mem REG 0,40 140800 181495 /.../140828.xls
python2 32349 deeenes 5r REG 0,40 140800 181495 /.../140828.xls
python2 32349 deeenes 6r REG 0,40 135168 181482 /.../150609.xls
python2 32349 deeenes 7r REG 0,40 138240 181517 /.../150119.xls
Run Code Online (Sandbox Code Playgroud)
这是我的函数我用以下内容读取xls文件:( 为了清晰起见而剥离)
import sys
import xlrd
from xlrd.biffh import XLRDError
def read_xls(xls_file, …
Run Code Online (Sandbox Code Playgroud) 我最近决定学习Python装饰器,并遵循这个方法.特别是在"向装饰者传递参数"一节中的例子.我想要做的是(1)装饰器函数应该接受一些参数(decarg),(2)处理它们,以及(3)用参数调用装饰函数(funarg).我看到如何为装饰器提供参数,但我还没有看到任何示例,其中装饰函数的参数仅在装饰器中可用.当我调用装饰函数时,我完全不确定我应该做什么参数,因为它的参数是在装饰器函数中计算的.以下是基于提到的howto的示例:
def dec(decarg):
def _dec(fun):
funarg = decarg + 7
def _fun(funarg):
return fun(funarg)
return _fun
return _dec
def main(mainarg):
decarg = mainarg + 2
@dec(decarg)
def fun1(funarg):
return funarg + 3
return fun1(decarg)
main(1)
Run Code Online (Sandbox Code Playgroud)
这将返回6,当我期望13.我希望参数增加2 main()
和7 in _dec()
,这应该将此变量传递给装饰函数,它将3添加到它.
之后,我读了这个和这个 howtos,并使用他们的方法我创建了一个像我想象的那样工作的例子:
class dec(object):
def __init__(self, fun):
self.fun = fun
def __call__(self, decarg):
funarg = decarg + 7
return self.fun(funarg)
def main(mainarg):
decarg = mainarg + 2
@dec
def fun1(funarg):
return funarg + 3 …
Run Code Online (Sandbox Code Playgroud) plotly的文档说,通过参数range
我们可以设置轴的限制,例如range = [0, 10]
将轴最小值设置为0,最大值设置为10。根据文档,它可以在figure、layout、scene或xaxis下使用。事实上Scatter
,andLayout
接受xaxis
和yaxis
参数,它们要么是字典,要么是plotly.graph_objs.XAxis
对象,并且可以提供一个range
值。然而,在尝试了我能想象到的所有变化后,它显然未能设定限制。此外,第一个子图似乎低于其他子图。请参阅下面的最小工作示例,它可以在任何 Jupyter 笔记本中运行。
额外问题:为什么fill
参数 atScatter
无法设置点的填充颜色?
import plotly
import plotly.tools
import plotly.graph_objs
plotly.offline.init_notebook_mode()
data = {
'A': {
'x': [1.0, 2.0, 6.0, 8.0],
'y': [34.0, 36.0, 38.0, 40.0],
's': [0.00416, 0.01125, 0.0038, 0.002]
},
'B': {
'x': [1.0, 1.0, 2.0, 2.0, 1.0, 2.0, 3.0, 2.0, 2.0, 3.0,
4.0, 2.0, 4.0, 5.0, 6.0, 7.0, 7.0],
'y': [30.0, 32.0, …
Run Code Online (Sandbox Code Playgroud) 随着ggplot::geom_point
我们能够设置使用绘图符号的任意字符scale_shape_manual
.我将举例说明目的:使用三角形在每个单元格中创建一个具有两个值的热图:
require(ggplot2)
data <- data.frame(
val = rnorm(40),
grp = c(rep('a', 20), rep('b', 20)),
x = rep(letters[1:4], 5),
y = rep(letters[1:5], 4)
)
p <- ggplot(data, aes(x = x, y = y, color = val, shape = grp)) +
geom_point(size = 18) +
scale_shape_manual(values=c("\u25E4","\u25E2")) +
theme_minimal() +
theme(panel.grid = element_blank())
ggsave('triangle-tiles.pdf', device = cairo_pdf, width = 4.1, height = 3.5)
Run Code Online (Sandbox Code Playgroud)
如果用于符号的字体具有这些特殊字符,则此方法可以正常工作.否则显然是失败的.我知道我们可以明确地定义字体并获得相同的结果geom_text
:
require(dplyr)
data <- data %>% mutate(sym = ifelse(grp == 'a', "\u25E4", "\u25E2"))
p …
Run Code Online (Sandbox Code Playgroud) 我正在尝试绘制带有无边界条的条形图。默认情况下,条具有黑色细边框。在Seaborn的开发版本(0.6)中,我可以将kwargs(linewidth
,edgecolor
)传递给pyplot.bar()
via seaborn.barplot()
,但是在当前版本(0.5.1)中,此功能似乎尚不可用。看着返回的AxesSubplot
对象,尽管有很多方法,我找不到将线宽设置为零或将颜色设置为完全透明的方法,所以我仍然希望有一种方法可以实现这一点。
import matplotlib.pyplot as plt
import seaborn as sns
fig, ax = plt.subplots()
ax = sns.barplot(data = data, x = 'var1', color = '#007b7f')
fig.tight_layout()
fig.savefig('fig.pdf')
Run Code Online (Sandbox Code Playgroud) 在 matplotlib 的文档中boxplot
我们可以读到:
Whiskerprops : dict 或 None (默认)如果提供,将设置胡须的绘图样式
好的,所以我通过了一个指令来在胡须上设置一些视觉样式:
whiskerprops = {'ls': 'solid', 'lw': 0.5, 'color': '#777777'}
boxplot(..., whiskerprops = whiskerprops)
Run Code Online (Sandbox Code Playgroud)
除了 之外,这些设置没有任何影响color
。
在其他 prop 上也可以观察到相同的行为:capprops
、medianprops
、boxprops
等。
后来我找到了原因,我会在答案中发布。我这样做只是因为其他人可能面临同样的问题,并且文档和教程没有回答这个问题。
我在y上有一个连续变量,在x轴上有一个分类变量。在分类变量中,顺序是有道理的,按其索引拟合回归是有意义的,我的意思是不要c('a', 'b', 'c')
使用索引 ( order(c('a', 'b', 'c'))
,即c(1, 2, 3)
),并根据此拟合模型。但是,geom_smooth(method = lm)
如果一个变量不是数字,ggplot 拒绝拟合 a 。好的,那么我可以告诉它使用顺序:
geom_smooth(aes(x = order(hgcc), y = rtmean), method = lm)
Run Code Online (Sandbox Code Playgroud)
但随后它从数据框中获取整列的索引scales = 'free'
,当x
一个图上仅出现变量水平的一个子集时,这对于分面来说并不好。整个数据帧中的索引平均要高得多,所以回归将绘制在右边很远的地方:
这是一个最小的工作示例:
require(ggplot2)
load(url('http://www.ebi.ac.uk/~denes/54b510889336eb2591d8beff/sample_data.RData'))
ggplot(adata12cc, aes(x = hgcc, y = rtmean, color = cls, size = log10(intensity))) +
geom_point(stat = 'sum', alpha = 0.33) +
geom_smooth(
aes(x = order(hgcc), y = rtmean),
method = 'glm') +
facet_wrap( ~ uhgroup, scales …
Run Code Online (Sandbox Code Playgroud)