小编gau*_*den的帖子

geom_rect failure:eval(expr,envir,enclos)中的错误:找不到对象'variable'

我试图复制GGPLOT2书,他在那里覆盖geom_rects显示在失业率趋势执政党的86页哈德利韦翰的例子.这是我的核心代码,包含一些示例数据:

library("ggplot2")
library("reshape2")
library("lubridate")

con <- textConnection("Date,Var1,Var2
8-Jan-12,100.8,116
15-Jan-12,99.4,115.5
22-Jan-12,98.4,115
28-Jan-12,97.1,114
4-Feb-12,95.9,112
11-Feb-12,95.3,113
18-Feb-12,93.9,111.5
25-Feb-12,93.5,111.5
3-Mar-12,92.6,110
10-Mar-12,91.4,108
17-Mar-12,90.2,106.8
24-Mar-12,90,107.5
31-Mar-12,89.9,106
5-Apr-12,90.4,106.5
12-Apr-12,89.8,106") 

track <- read.csv(con, header=TRUE)
track$Date <- as.Date( dmy(track$Date) )

track <- melt(track, 
            id.vars = c("Date"))

con <- textConnection("City,From,To
Auckland,5-Apr-12,10-Apr-12
Brussels,1-Apr-12,3-Apr-12
Cleveland,24-Jan-12,26-Jan-12
Darjeeling,18-Jan-12,19-Jan-12
Erehwon,8-Feb-12,10-Feb-12
Florence,5-Mar-12,7-Mar-12
Gandalf,25-Mar-12,27-Mar-12")

trips <- read.csv(con, header=TRUE)
trips$From <- as.Date( dmy(trips$From) )
trips$To <- as.Date( dmy(trips$To) )

# draw the Time Series data
p <- ggplot(track, 
            aes(x = Date, 
                y = value, 
                colour=variable,
                group = variable)) …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

11
推荐指数
2
解决办法
6511
查看次数

有效地为高密度区域创建密度图,为稀疏区域创建点

我需要制作一个图表,其功能类似于图上高密度区域的密度图,但低于某个阈值则使用单个点.我找不到任何类似于我在matplotlib缩略图库或谷歌搜索中所需的代码.我有一个我自己编写的工作代码,但它有些棘手,而且(更重要的是)当点/箱的数量很大时,需要花费不可思议的长时间.这是代码:

import numpy as np
import math
import matplotlib as mpl
import matplotlib.pyplot as plt
import pylab
import numpy.random

#Create the colormap:
halfpurples = {'blue': [(0.0,1.0,1.0),(0.000001, 0.78431373834609985, 0.78431373834609985),
(0.25, 0.729411780834198, 0.729411780834198), (0.5,
0.63921570777893066, 0.63921570777893066), (0.75,
0.56078433990478516, 0.56078433990478516), (1.0, 0.49019607901573181,
0.49019607901573181)],

    'green': [(0.0,1.0,1.0),(0.000001,
    0.60392159223556519, 0.60392159223556519), (0.25,
    0.49019607901573181, 0.49019607901573181), (0.5,
    0.31764706969261169, 0.31764706969261169), (0.75,
    0.15294118225574493, 0.15294118225574493), (1.0, 0.0, 0.0)],

    'red': [(0.0,1.0,1.0),(0.000001,
    0.61960786581039429, 0.61960786581039429), (0.25,
    0.50196081399917603, 0.50196081399917603), (0.5,
    0.41568627953529358, 0.41568627953529358), (0.75,
    0.32941177487373352, 0.32941177487373352), (1.0,
    0.24705882370471954, 0.24705882370471954)]} 

halfpurplecmap = mpl.colors.LinearSegmentedColormap('halfpurples',halfpurples,256)

#Create x,y arrays of normally …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

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

关闭散景中的刻度标记

我正在研究Bokeh(0.6.1)教程并尝试关闭其中一个运动图中的刻度线和标签,即散点图:

from __future__ import division

import numpy as np
from six.moves import zip
from bokeh.plotting import *
from bokeh.objects import Range1d

output_file("scatter.html")

figure()

N = 4000

x = np.random.random(size=N) * 100
y = np.random.random(size=N) * 100
radii = np.random.random(size=N) * 1.5
colors = [
    "#%02x%02x%02x" % (r, g, 150) 
    for r, g in zip(np.floor(50+2*x), np.floor(30+2*y))
]

circle(x, y, radius=radii,
       fill_color=colors, fill_alpha=0.6,
       line_color=None, Title="Colorful Scatter")

grid().grid_line_color = None
axis().axis_line_color = None

# QUESTION PART 1: Is this the right …
Run Code Online (Sandbox Code Playgroud)

python bokeh

10
推荐指数
2
解决办法
6321
查看次数

修改Windows上的Click命令行界面上的Usage字符串

我有一个Python包tdsm,我使用Armin Ronacher的Click包第一次转换为命令行界面.我在这个目录结构中设置了我的脚本:

在此输入图像描述

我也创建了一个setup.py文件:

from setuptools import setup

setup(
    name='tdsm',
    version='0.1',
    py_modules=['tdsm.scripts.data_manager',
                'tdsm.scripts.visuals'],
    include_package_data=True,
    install_requires=[
        'click',
        'numpy',
        'scipy',
        'pandas',
        'wand',
        'matplotlib',
    ],
    entry_points='''
        [console_scripts]
        tdsm=tdsm.main:cli
    ''',
)
Run Code Online (Sandbox Code Playgroud)

经过一段时间pip install --editable .,我开始工作,直到某一点:

# tdsm --help
Run Code Online (Sandbox Code Playgroud)

现在发出:

Usage: tdsm-script.py [OPTIONS] COMMAND [ARGS]...

  TDSM standard workflow -- typical sequence of commands:

      `init <path>` or `open <path>`: to set up the project or to open
      a new session on an existing project.

      `plot`: framework for setting up …
Run Code Online (Sandbox Code Playgroud)

python command-line-interface

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

在R中绘制一年计划员

我一直试图将甘特图的绘制扩展到更一般的情况.我在这里说明了部分结果:

R的年度计划员

在该图表上绘制了许多行程,红点表示离开,绿点表示返回.现在,这是我的挑战:

  1. 我想用灰点标记出发和返回之间的所有日子,并保持其他所有人不受影响.
  2. 我希望这些要点能够正确地包裹不同的月份长度(例如,6月28日的出发将标志着6月30日的日子,然后环绕到7月1日).
  3. 在一日游的情况下,脚本不应该失败(例如,在9月初的旅行中,出发和返回在同一天发生,而较小的绿点在较大的红色标记上绘制).

使用下面的代码生成此图表是微不足道的,并且很容易将点与红色到绿色的线连接起来,这两个点都发生在同一个月.任何人都可以帮助处理一个环绕的情况,以一般的方式进行跳跃和非闰年等?

library("ggplot2")

# ----------------
# LOAD DATA

df <- read.table(text='id,dep_month,dep_day,ret_month,ret_day
c,1,5,1,16
v,2,1,2,6
a,3,28,3,31
z,4,9,4,11
y,4,25,5,3
f,6,28,7,7
w,8,19,8,29
b,9,9,9,9
k,9,29,10,6
n,11,20,12,3', header = TRUE,
                 sep = ',')

# ----------------
# DRAW YEAR CHART

p <- ggplot(data = df,
            aes(x = dep_day,
                y = dep_month
                )
            )
p <- p + theme_bw()
p <- p + geom_point(colour = 'red',
                    size = 6)
p <- p + geom_point(aes(x = ret_day,
                       y = ret_month
                       ),
                   colour = …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

Python:计算列表列表中元素对的频率

实际上,我有一个关于"会议"的数据集.例如,A,B,C有会议,那么列表将是[A,B,C].像这样,每个列表都包含参加会议的成员列表.因此:

line1 =(A,B,C)

line2 =(A,C,D,E)

line3 =(D,F,G)

...

我只想计算每对成员相遇的次数.例如,成员A从line1和line2遇到C两次,成员B从line1遇到C一次.所以,我想制作一个这样的图表..

    A  B  C  D E F G...

 A  .  1  2  1 ...  

 B  1  . 1  0 

 C
Run Code Online (Sandbox Code Playgroud)

...

我觉得一开始会很容易,但我很困惑.请帮助我,并提前感谢你.

python csv

5
推荐指数
2
解决办法
2174
查看次数

控制哪些边在r中的igraph中的网络图中可见

我在下面创建了以下图表 igraph

set.seed(1410)
df<-data.frame(
"site.x"=c(rep("a",4),rep("b",4),rep("c",4),rep("d",4)),
"site.y"=c(rep(c("e","f","g","h"),4)),
"bond.strength"=sample(1:100,16, replace=TRUE))

library(igraph)
df<-graph.data.frame(df)
V(df)$names <- c("a","b","c","d","e","f","g","h")
layOUT<-data.frame(x=c(rep(1,4),rep(2,4)),y=c(4:1,4:1))
E(df)[ bond.strength < 101 ]$color <- "red"
E(df)[ bond.strength < 67 ]$color <- "yellow"
E(df)[ bond.strength < 34 ]$color <- "green"
V(df)$color <- "white"
l<-as.matrix(layOUT)
plot(df,layout=l,vertex.size=10,vertex.label=V(df)$names,
edge.arrow.size=0.01,vertex.label.color = "black")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我想显示所有顶点/节点,但只显示bond.strength> 34的边(即只有红色和黄色边).我可以通过将bond.strength <34设置为白色来控制这个,但是当我在实际数据集上完成时它不是很漂亮,因为白色边缘"穿过"其他边缘,即

在此输入图像描述

有没有其他方法可以简单地控制哪些边是可见的,同时显示所有顶点?谢谢

r colors vertices edges igraph

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

在ggplot2中为转换后的数据标记重新标记的值

问题

当我试验热图时,这是一个循环问题,可能有一个令人沮丧的明显答案......

我回答了一个关于使用和包绘制具有不同数据的热图的问题.它基本上允许非常不同的缩放x和y轴插入,并准备好用于绘图.fieldsggplot2akima

不幸的是,我无法找到一种方法来重新标记轴,以便它们返回原始值.我知道它将涉及使用breakslabels参数,ggplot2但我一直无法产生任何错误.我们非常感谢两种绘图方案的解决方案......

更新了解决方案

为方便起见,这是我的代码使用ggplot2:

library("akima")
library("ggplot2")

x.orig <- rnorm(20, 4, 3)
y.orig <- rnorm(20, 5e-5, 1e-5)
x <- scale(x.orig)  
y <- scale(y.orig) 
z <- rnorm(20)

t. <- interp(x,y,z)
t.df <- data.frame(t.)

gt <- data.frame( expand.grid(x=t.$x, 
                              y=t.$y), 
                  z=c(t.$z), 
                  value=cut(c(t.$z), 
                            breaks=seq(min(z),max(z),0.25)))

p <- ggplot(gt) + geom_tile(aes(x,y,fill=value)) + 
    geom_contour(aes(x=x,y=y,z=z), colour="black") 

# --------------------------------------------------------------
# Solution below prompted by X. He's answer:

get.labels <- function(break.points, orig.data, scaled.data, digits) { 
    labels …
Run Code Online (Sandbox Code Playgroud)

r heatmap ggplot2

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

在没有for循环的情况下标记连续的观察块

我有一个标准的"我可以避免循环"问题,但无法找到解决方案.

在@splaisan回答了这个问题,但我不得不在中间部分采用一些丑陋的扭曲,for并进行多次if测试.我在这里模拟一个更简单的版本,希望有人能给出更好的答案......

问题

给定这样的数据结构:

df <- read.table(text = 'type
a
a
a
b
b
c
c
c
c
d
e', header = TRUE)
Run Code Online (Sandbox Code Playgroud)

我想识别相同类型的连续块并将它们分组.第一个块应标记为0,下一个块应标记为0,依此类推.存在无限数量的块,并且每个块可以仅与一个成员一样短.

type    label
   a    0
   a    0
   a    0
   b    1
   b    1
   c    2
   c    2
   c    2
   c    2
   d    3
   e    4
Run Code Online (Sandbox Code Playgroud)

我的解决方案

我不得不求助于for循环来执行此操作,这里是代码:

label <- 0
df$label <- label

# LOOP through the label column and increment the label
# whenever a new …
Run Code Online (Sandbox Code Playgroud)

r

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

matplotlib自定义标记

我想要标记,如空格,+,或x,或.,或任何内部厚度可调; 事实上,像Origin一样.它似乎需要定制.

代码示例:

import numpy as np
import matplotlib.pyplot as plt

plt.plot(np.arange(10) ** 2,
         'k-',
         marker = 's',
         mfc = 'none',
         lw = 2,
         mew = 2,
         ms = 20)
plt.show()
Run Code Online (Sandbox Code Playgroud)

python matplotlib

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