小编yos*_*bai的帖子

ggplot2 scale_brewer的逆序

看似非常简单的事情,但我花了30分钟没有找到答案.

如何反转颜色顺序?通过查看scale_brewer的文档,我认为它可能是formatter=可疑的论点.我通过'rev'然后rev,但它们没有效果(没有错误信息,只是被忽略).

r ggplot2

53
推荐指数
4
解决办法
5万
查看次数

Boxplot,如何匹配异常值的颜色以填补美学?

我试图将boxplot的异常值颜色与美学(scale_colour_discrete)设置的填充颜色相匹配.

这是一个例子.

m <- ggplot(movies, aes(y = votes, x = factor(round(rating)),
    fill=factor(Animation)))
m + geom_boxplot() + scale_y_log10()
Run Code Online (Sandbox Code Playgroud)

这会在下面生成图表.如何将这些黑点更改为身体中使用的偏红/绿色?如果我理解正确的话,boxplot的outlier.colour选项似乎选择了一种颜色,而不是审美.如果有帮助,我不介意使用色彩美学.

原始版本


编辑:

改编了这个解决方案(在geom_boxplot中更改whisker定义).水平躲闪由stats_summary重置,我无法弄清楚如何取回它.因为我现在知道,所以我可以根据需要放弃异常值和拉伸胡须.

# define the summary function
f <- function(x) {
  r <- quantile(x, probs = c(0.05, 0.25, 0.5, 0.75, 0.95))
  names(r) <- c("ymin", "lower", "middle", "upper", "ymax")
  r
}
# define outlier function, beyound 5 and 95% percentiles
o <- function(x) {
  subset(x, x < quantile(x,probs=c(0.05))[1] | quantile(x,probs=c(0.95))[1] < x)
}

m <- ggplot(movies, aes(y = votes, x = …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

16
推荐指数
2
解决办法
9501
查看次数

指定图中某些节点的位置

有没有办法指定连接图的某个节点子集的位置,而某些算法决定其他节点的位置?我希望找到一种算法,将边缘视为弹簧,以便它不会远离其他节点,例如graphopt.我查看了igraph中的其他几种算法,例如lgl,drl,但它们似乎都不允许指定节点的位置,我必须让算法完全控制所有节点的位置.

我问这个是因为我有数据网络,有些节点我可以找到近似的地理坐标.我希望在地图上显示整个网络.在地图上查看网络然后我可以迭代地识别具有一些地理标识的更多节点,并且最后我具有至少在视觉上具有相当准确性的地理参考图.

我开始使用R上的igraph,但我愿意尝试其他软件包/语言,甚至是GIS工具,如果有什么东西接近我正在寻找的东西.

谢谢!

[编辑]

毕竟,这个问题不是一个很好的问题,但是自从我开始这个问题之后,让我进一步描述一下我在寻找什么.希望我所寻求的是有意义的,有人之前已经这样做了.

G5W的建议正朝着我想要的方向发展,但我希望能够应用原始算法的原理,然后将其固定到所需的方向.

FR方法的论文说:

图绘制只有两个原则:

  • 由边缘连接的顶点应相互靠近.
  • 不应将顶点绘得太近.

所以我认为包括路径10-8-4-1-3在内的大循环应该缩小并接近剩余的节点.我想我可以找到如下的布局,如果我像G5M那样修复四点.

我想要的是

我认为算法可能偶然创建这样的图形,并尝试如下,非常粗糙,强力的方法.但算法从来没有生成我想要的...我想我需要指定一些豁免算法来处理固定节点之间的那些边缘.

library(igraph)
set.seed(1)
g = erdos.renyi.game(10, 0.3)
LO = layout_with_fr(g)
plot(g, layout=LO)

n <- nrow(LO)
i <-  0
for (i in 1:100000) {
#  i <- i + 1
  LO <- layout_with_fr(g)
  chk <- c(all(LO[c(5,7),2] >= sort(LO[-c(5,7),2])[n-3]), # 5,7 should come close to top
           all(LO[c(2,9),2] <= sort(LO[-c(2,9),2])[2]),   # 2,9 near bottom 
           all(LO[c(2,7),1] <= sort(LO[-c(2,7),1])[2]),   # 2,7 toward left
           all(LO[c(5,9),1] >= sort(LO[-c(5,9),1])[n-3])  # 5,9 toward right …
Run Code Online (Sandbox Code Playgroud)

javascript algorithm r graph d3.js

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

leaflet 插件和 leafletProxy 以 polylineDecorator 为例

另请参阅问题传单插件和 leafletProxy

我想在 R 的传单中 使用polylineDecorator 插件。

按照如何使用 R 中的传单插件的说明,如果我将该方法与leaflet(). 请参阅第一个示例,它按我想要的方式工作。但如果我尝试使用相同的方法leafletProxy(),它不会做任何事情,我只会得到没有装饰器的线。请参阅第二个示例。

我的问题是如何将传单插件与 R 一起使用leafletProxy()

示例 1:有效的版本,不使用 lefletProxy。

library(shiny)
library(leaflet)
library(htmltools)

download.file(
          'https://raw.githubusercontent.com/bbecquet/Leaflet.PolylineDecorator/master/dist/leaflet.polylineDecorator.js', 
          'leaflet.polylineDecorator.js')

polylineDecoratorPlugin <- htmlDependency('Leaflet.PolylineDecorator',
                                          '1.6.0',
                      src = normalizePath('.'), 
                      script = 'leaflet.polylineDecorator.js')

registerPlugin <- function(map, plugin) {
  map$dependencies <- c(map$dependencies, list(plugin))
  map
}


ui <- bootstrapPage( 
            tags$style(type = "text/css", "html, body {width:100%;height:100%}"), 
            leafletOutput("map", width = "100%", height = "100%")
            )

server <- function(input, output) {
  dat <- …
Run Code Online (Sandbox Code Playgroud)

r leaflet shiny

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

seaborn clustermap FloatingPointError:NaN 相异值

我尝试运行这段代码:

import pandas as pd
import seaborn as sns

df = pd.DataFrame(clusters, columns=cols)

sns.clustermap(df, cmap="vlag", vmin=0, vmax=1, metric="correlation", 
    z_score=None, standard_scale=None, yticklabels=True, 
    figsize=(size, size))
Run Code Online (Sandbox Code Playgroud)

簇的值为:

clusters = [[0.89463602, 0.,         0.,         0.85185185, 0.9023569,  0.,
  0.,         0.83333333, 0.,         0.,         0.,        ],

 [0.75,       0.66666667, 0.,         0.,         0.69444444, 0.,
  0.89272031, 0.,         0.69444444, 0.,         0.69444444,],

 [0.85185185, 0.88910175, 0.,         0.,         0.9043771,  0.,
  0.,         0.,         0.89092141, 0.77777778, 0.69444444,],

 [0.75,       0.89825458, 0.,         0.,         0.77777778, 0.,
  0.8908046,  0.,         0.75,       0.91550069, 0.8,       ],]
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

in linkage
    linkage_wrap(N, X, Z, mthidx[method])
FloatingPointError: …
Run Code Online (Sandbox Code Playgroud)

python pandas seaborn

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

使用列表推导表达式使用对象填充列表

我试图使用一个列表推导表达式填充8个Ingredient对象的列表.代码看起来像这样:

import random
ings = (('w1', 200, 25, 80),
   ('su1', 50, 55, 150),
   ('su2', 400, 100, 203),
   ('sy1', 10, 150, 355),
   ('sy2', 123, 88, 101),
   ('sy3', 225, 5, 30),
   ('sy4', 1, 44, 99),
   ('sy5', 500, 220, 300),)

class Ingredient: 
    def __init__(self, n, p, mi, ma):
        self.name = n
        self.price = p
        self.min = mi
        self.max = ma
        self.perc = random.randrange(mi, ma)

class Drink:
    def __init__(self): 
        self.ing = []
Run Code Online (Sandbox Code Playgroud)

我想获得相当于此的结果:

self.ing = [Ingredient('w1', 200, 25, 80), Ingredient('su1', 50, 55, 150) ... …
Run Code Online (Sandbox Code Playgroud)

python list-comprehension

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

传单R,如何使与儿童统计相关的群集图标出现?

我想根据子标记的属性总和自定义 Leaflet/Shiny 应用程序中群集标记的外观。

它类似于这个问题,它根据孩子的数量制作集群的图标颜色。如果我想根据地震的震级总和自定义图标怎么办?

使用纯 javascript 应用程序,似乎我应该能够将自定义属性设置为单个标记,然后从 访问它iconCreateFunction,如本例中所做的那样。

但是我正在为 R添加带有addCircleMarkersaddMarkers来自传单的标记,并且似乎我无法向正在生成的标记添加任意属性。下面的代码有效,但如果我取消注释两行(mag = ~magsum += markers[i].mag;),则无效

leaflet(quakes) %>% addTiles() %>% addMarkers(
  # mag = ~mag,
  clusterOptions = markerClusterOptions(
  iconCreateFunction=JS("function (cluster) {    
    var markers = cluster.getAllChildMarkers();
    var sum = 0; 
    for (i = 0; i < markers.length; i++) {
    //  sum += markers[i].mag;
      sum += 1;
    }
    return new L.DivIcon({ html: '<div><span>' + sum + '</span></div>'});

  }")

  )
) …
Run Code Online (Sandbox Code Playgroud)

javascript r leaflet

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

将终端输出写入文件

在我的机器上,我有一些软件在终端中接收命令并返回值列表.

要运行它,我必须键入以下内容:

pdv -t filename
Run Code Online (Sandbox Code Playgroud)

我试图将它作为python程序的一部分运行.当我运行以下内容时:

os.system('pdv -t %s' % (epoch_name))
Run Code Online (Sandbox Code Playgroud)

然后我得到了我希望返回到终端的值(其中epoch_name是文件名的变量名).但是当我尝试将结果写入文件时:

os.system('pdv -t %s % "(epoch_name)" > 123.txt')
Run Code Online (Sandbox Code Playgroud)

生成文件123.txt但它是空的.

我知道我错放了"和/或"字符,但我无法弄清楚它们应该去哪里.

感谢任何帮助!

python os.system

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