据说matplotlibrc配置文件用于自定义各种属性matplotlib,可以动态更改默认rc设置以自定义默认参数,例如:
matplotlib.rcParams['font.family'] = 'times new roman'
Run Code Online (Sandbox Code Playgroud)
......但是:"rc"代表什么?
PS:对不起,这本身并不是一个编程问题,但这很可能是最好的讨论地点matplotlib......而且我在文档中找不到完整的词汇.
mutate_at每次使用前一列时,如何改变包含模式(我猜)的所有列dplyr?--> 例如,这里的所有列foo在其名称中都应该使用之前的列进行变异(即,a对于 column fooa,bforfoob等等)。
set.seed(13)
dfrows = 5
df = data.frame(a = rnorm(dfrows),
fooa = runif(dfrows),
b = rnorm(dfrows, mean=50, sd=5),
foob = runif(dfrows, min=0, max=5),
c = rnorm(dfrows, mean=100, sd=10),
fooc = runif(dfrows, min=0, max=10))
df
# a fooa b foob c fooc
# 1 0.5543269 0.6611216 48.26791 3.0999527 98.06053 6.035485
# 2 -0.2802719 0.8783709 51.15647 0.1586242 113.96432 2.299504
# 3 1.7751634 0.8905590 52.34582 2.3070636 101.00663 9.668332 …Run Code Online (Sandbox Code Playgroud) 在Matplotlib中,如何设置上标的字体大小(除了控制基础的字体大小)?例如,使用带有科学记数法的轴的Matplotlib创建图形:可以很容易地设置刻度标签的字体大小,但是如何指定其指数的字体大小?我想差异地对基数和指数进行控制(即,在刻度标签的字体大小上播放以获得所需大小的指数不是一个好选择 - 我们可以修改字体大小的比例吗?基数和指数?).谢谢.
我有一个简单的3D数组a1,以及它的蒙版模拟a2:
import numpy
a1 = numpy.array([[[ 0.00, 0.00, 0.00],
[ 0.88, 0.80, 0.78],
[ 0.75, 0.78, 0.77]],
[[ 0.00, 0.00, 0.00],
[ 3.29, 3.29, 3.30],
[ 3.27, 3.27, 3.26]],
[[ 0.00, 0.00, 0.00],
[ 0.41, 0.42, 0.40],
[ 0.42, 0.43, 0.41]]])
a2 = numpy.ma.masked_equal(a1, 0.)
Run Code Online (Sandbox Code Playgroud)
我想一次沿着几个轴执行这个数组的平均值(这是一个特殊的,未记录的axis参数使用numpy.mean,参见例如这里的例子):
numpy.mean(a1, axis=(0, 1))
Run Code Online (Sandbox Code Playgroud)
这工作正常a1,但我得到掩码数组的以下错误a2:
TypeError: tuple indices must be integers, not tuple
Run Code Online (Sandbox Code Playgroud)
并且我在屏蔽版本中遇到相同的错误numpy.ma.mean(a2, axis=(0, 1)),或者如果我通过unmask 屏蔽数组a2[a2.mask]=0. …
来自不同包的名称空间之间的名称冲突R可能很危险,package::function不幸的是,R... 的使用并没有得到普遍使用。
是否没有可以重设程序包名称空间优先于当前加载的所有其他功能的函数?当然可以detach,然后可以重新加载程序包,但是还没有其他更实用的(单命令)方法吗?
因为我经常在R会话中遇到许多程序包和名称冲突,所以我使用以下函数来做到这一点:
set_precedence <- function(pckg) {
pckg <- deparse(substitute(pckg))
detach(paste("package", pckg, sep = ":"), unload=TRUE, character.only=TRUE)
library(pckg, character.only=TRUE)
}
# Example
set_precedence(dplyr)
Run Code Online (Sandbox Code Playgroud)
没有内置的方法可以通过单个命令来实现?或者是一种不暗示detach和重新加载程序包的方式(以防加载繁重并直接在名称空间上工作)?
我想放置一条线在一个级别(例如,0)colorbar上contourf与情节matplotlib。使用下面的代码,我可以做到,但并非所有contour线条的属性都被保存(即,线条的颜色和宽度是正确的,但我不能将它点缀在颜色栏中)。知道如何在颜色栏中有一条与所需级别相对应的虚线吗?
import matplotlib.pyplot as plt
import numpy
x=y=range(10)
z=numpy.random.normal(0,2,size=(10,10))
surfplot=plt.contourf(x,y,z, cmap=plt.cm.binary_r)
cont=plt.contour(surfplot, levels=[0], colors='r', linewidths=5, linestyles=':')
cbar=plt.colorbar(surfplot)
cbar.add_lines(cont)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在R中有一个光栅,我如何在网格周围绘制一条轮廓线(不是连接中心或其他任何东西,真正遵循网格的边界)有一些价值(或通过一些掩模识别)?
以下示例显示如何获取值为0.6的区域周围的轮廓线:如何执行相同但使用网格边框后面的线条?该函数应该返回一个要添加到绘图的对象(作为SpatialLinesDataFramefor rasterToContour),并且相邻的网格应该包含在一个单独的轮廓线中(即,只应绘制多边形的外边界).我找不到解决方案rasterToPolygons(参见此处的视觉方面,但这对我没有帮助).
set.seed(2)
r <- raster(nrow=10, ncol=10)
r[] <- runif(ncell(r))
r[r>0.6] <- 0.6
rc <- rasterToContour(r, levels=c(0.6))
plot(r)
plot(rc, add=TRUE)
Run Code Online (Sandbox Code Playgroud)

对于具有3列(X位置,Y位置和某些值VAL)的数据集,我想对包含在某些XxY间隔/区间中的所有VAL执行一些操作(例如,平均值)(即,我想对我的空间进行网格化) ).
我最初写的幼稚下面的函数来这样做(myT是通过数据集,xbounds并且ybounds是连续的间隔中断点(箱)的向量):
calcPerBin1 <- function(myT, xbounds, ybounds) {
newT <- data.frame(matrix(0, nrow=(length(xbounds)-1)*(length(ybounds)-1), ncol=3))
names(newT) <- c("X","Y","MEAN")
line <- 1
for (i in 1:(length(xbounds)-1)) {
for (j in 1:(length(ybounds)-1)) {
myTsubset <- myT[myT$X >= xbounds[i] & myT$X < xbounds[i+1] &
myT$Y >= ybounds[j] & myT$Y < ybounds[j+1], ]
newT$MEAN[line] <- mean(myTsubset$VAL)
newT$X[line] <- mean(c(xbounds[i], xbounds[i+1]))
newT$Y[line] <- mean(c(ybounds[j], ybounds[j+1]))
line <- line+1
}
}
return(newT)
}
Run Code Online (Sandbox Code Playgroud)
SHORTCUT问题:如何改进上面的代码?(以下是我的第一次尝试 - 如果太长时间可以跳过!)
双for循环当然非常不理想,它的执行时间很糟糕(无法用我的真实数据集).我因此尝试了以下代码(即,如果我没有错误,内部循环被矢量化):
calcPerBin2 …Run Code Online (Sandbox Code Playgroud) 在R使用中dplyr,我需要cut使用非常量(非唯一)在一列中进行值breaks,这些对于每一行,由同一数据帧的其他列中的值定义.因此我使用rowwise.虽然breaks似乎功能正常(即每行更新),但labels似乎并不一致.
例如:
library(dplyr)
set.seed(10)
myDF = data.frame(a=runif(5, min=0.3, max=0.7),
bmin = rep(0, 5),
bmid = c(0.5, 0.3, 0.6, 0.7, 0.4),
bmax = rep(1, 5))
myDF %>% rowwise() %>% mutate(grp1 = cut(a, breaks=c(bmin, bmid, bmax)),
grp2 = cut(a, breaks=c(bmin, bmid, bmax),
labels=c(paste(bmin, bmid, sep='-'),
paste(bmid, bmax, sep='-'))),
grp3 = cut(a, breaks=c(bmin, bmid, bmax),
labels=c(1, 2)))
# a bmin bmid bmax grp1 grp2 grp3
# (dbl) (dbl) (dbl) …Run Code Online (Sandbox Code Playgroud) With a function f calling another well-known function in Python (e.g. a matplotlib function), what is the most pythonic/efficient/elegant way to define some default values while still giving the possibility to the user of f to fully customize the called function (typically with **kwargs), including to overwrite the default keyword arguments defined in f?
import numpy as np
import matplotlib.pyplot as plt
v = np.linspace(-10.,10.,100)
x,y = np.meshgrid(v, v)
z = -np.hypot(x, y)
def f(ax, n=12, **kwargs):
ax.contourf(x, …Run Code Online (Sandbox Code Playgroud) 在程序中有许多嵌套子程序Fortran 90,我想将这些嵌套级别打印到压缩长度与级别成比例的文件中(即嵌套子程序中打印的信息比调用子程序具有更高的缩进).将写入包括不同数据类型的其他信息(字符串,整数,...).
我想到了不同的方法(在这个例子中,lev是级别,只是在循环中构建,但在每个子例程中以其他方式更新):
Program adaptIndent
INTEGER :: lev
CHARACTER (LEN=*), PARAMETER :: fmt1 = '(I1,'': ''A)'
CHARACTER (LEN=*), PARAMETER :: fmt2 = '(I2,'': ''A)'
DO lev=1,10
CALL printindent1
!CALL printindent2
!CALL printindent3
ENDDO
CONTAINS
SUBROUTINE printindent1 !convert everything (incl. indent and lev) to CHAR
CHARACTER(LEN=lev) :: indent
CHARACTER(LEN=2) :: strlev
WRITE(indent, '(A)') ' '
WRITE(strlev, '(I2)') lev
WRITE(*, '(A)') indent//TRIM(ADJUSTL(strlev))//': this is my level'
END SUBROUTINE printindent1
SUBROUTINE printindent2 !build a new format defining the indentation …Run Code Online (Sandbox Code Playgroud) 我想在 data.frame 中建立一个新列,myDF这是一个函数为每一行返回的值,该函数getval将该行中的元素作为参数。getval还使用外部向量v1作为参数。例如:
myn = 1000
a = seq(0, 1, length.out = myn)
b = seq(-1, 1, length.out = myn)
myDF = expand.grid(a=a, b=b)
set.seed(13)
v1 = rnorm(100)
getval = function(a, b, v) {
return(sum(a*v + b/2*v))
}
myDF$val = apply(myDF, 1, function(x) {getval(a=x[1], b=x[2], v=v1)})
head(myDF)
# a b val
# 1 0.000000000 -1 3.091267
# 2 0.001001001 -1 3.085078
# 3 0.002002002 -1 3.078889
# 4 0.003003003 -1 3.072700
# …Run Code Online (Sandbox Code Playgroud) r ×6
python ×4
dplyr ×3
matplotlib ×3
arguments ×1
data.table ×1
fortran ×1
fortran90 ×1
indentation ×1
numpy ×1
packages ×1
performance ×1
r-raster ×1