小编Wil*_*uck的帖子

删除ggplot2中的额外图例

我有一个简单的数据框,我正在尝试使用组合线和点图ggplot2.假设我的数据如下所示:

df <- data.frame(x=rep(1:10,2), y=c(1:10,11:20), 
                 group=c(rep("a",10),rep("b",10)))
Run Code Online (Sandbox Code Playgroud)

而我正试图制作一个情节:

g <- ggplot(df, aes(x=x, y=y, group=group))
g <- g + geom_line(aes(colour=group))
g <- g + geom_point(aes(colour=group, alpha = .8))
g
Run Code Online (Sandbox Code Playgroud)

结果看起来很好,有一个例外.它有一个额外的图例显示alpha我的geom_point图层.

<code> geom_point </ code>透明度的额外图例

如何保持图例显示组颜色,但不能显示我的alpha设置?

r legend ggplot2

79
推荐指数
3
解决办法
6万
查看次数

R的Emacs模式?

在emacs中是否有一种模式可以为R编程语言进行语法高亮显示?R模式似乎不起作用......

emacs r

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

将"rank"列添加到数据框

我有一个数据框,其中包含不同年份的不同项目的数量:

df <- data.frame(item = rep(c('a','b','c'), 3),
                 year = rep(c('2010','2011','2012'), each=3),
                 count = c(1,4,6,3,8,3,5,7,9))
Run Code Online (Sandbox Code Playgroud)

我想添加一个"year.rank"列,它给出一个项目在给定年份内的排名,其中较高的计数会导致更高的"排名".有了上面的内容,它看起来像:

  item year count year.rank
1    a 2010     1         3
2    b 2010     4         2
3    c 2010     6         1
4    a 2011     3         2
5    b 2011     8         1
6    c 2011     3         3
7    a 2012     5         3
8    b 2012     7         2
9    c 2012     9         1
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用整个数据框执行此操作order(df$count),但我不确定如何按年完成.

r

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

Emacs:帮助我理解文件/缓冲区管理

我过去三年一直在使用emacs来满足我的所有文本编辑需求.当我在一个文件中,处理代码或诸如此类的东西时,我效率很高.有两个文件,我可以在它们之间"Cx b RET",我做得很好.但是,每当我需要一次处理两个以上的文件时,我往往会迷路.

以下是我想要解决的一些问题:

  1. 我忘记了我的一些缓冲区被调用,但我不明白为什么Cx Cb将我的窗口分成两个缓冲区并退出迷你缓冲区.当然我可以切换缓冲区并选择一个缓冲区来访问,但这感觉不直观,让我打开两个缓冲区.

  2. 当我访问目录而不是文件时,我有一个方便的所有文件和目录列表.我通常希望用以下两种方法之一做:1)打开一个文件,再也不会看到这个缓冲区或2)打开一堆文件,再也不会看到这个缓冲区了.我真的不知道如何做到这一点,因为将点移动到文件并点击返回不会做这些事情.

  3. 我知道我的缓冲区不像标签,但我倾向于想要滚动它们以找到我想要的东西.我不知道有任何关键绑定,但我希望它是Mn/Mp等.然后,这可能是一种非常低效的切换缓冲区的方法.

  4. 当我打开任何类型的交互式帮助时(例如在ESS中),我习惯切换回我正在使用的缓冲区并使用Cx 1返回单个缓冲区.但是,当我这样做时,帮助缓冲区在我的缓冲区列表中挂起,这让我更加困惑.我知道我可以切换到那个缓冲区,杀死它,切换回来,然后回到单个缓冲区,但这似乎是错误的.

到目前为止我处理这个问题的方法涉及在不同的工作空间中使用平铺窗口管理器和几个emacs窗口,而不是实际学习管理emacs中的大量文件的最佳方法.我不一定想改变emacs以更好地满足我的需求(尽管如果它符合我要说的话我会对此持开放态度),相反,我想在处理文件后面思考一下思维过程/缓冲emacs的工作方式,以及如何提高它的效率.

任何能够帮助我理解正确方法的答案,或管理我的缓冲区或文件的更有效方法都将非常感激.

emacs

30
推荐指数
2
解决办法
5757
查看次数

在Python中生成正弦波声音

我需要在Python中生成正弦波声音,我需要能够控制频率,持续时间和相对音量.通过'生成'我的意思是我希望它立即通过扬声器播放,而不是保存到文件中.

最简单的方法是什么?

python audio

27
推荐指数
3
解决办法
4万
查看次数

SQL:为每个类别选择最近的日期

我从数据库中提取数据,其中一个表包含两列,它们共同标识一个位置,另一列包含每次服务的日期.是否可以编写SQL查询,以便获得每个位置服务的最新时间?

所以,如果我的原始数据如下所示:

category_a  category_b  date
       1           a     1/1/01
       1           a     2/2/02
       1           b     1/2/01
       1           b     2/3/02
       2           a     1/3/01
       2           a     2/4/02
       2           b     1/4/01
       2           b     2/5/02
Run Code Online (Sandbox Code Playgroud)

然后查询将返回此:

category_a  category_b  date
       1           a     2/2/02
       1           b     2/3/02
       2           a     2/4/02
       2           b     2/5/02
Run Code Online (Sandbox Code Playgroud)

如果数据库是以类别组合存储在单独的表中的方式创作的,那么这很容易做到.但是,我不控制这个数据库,所以我不能对它进行更改.

sql

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

修补在另一个函数中导​​入的函数

为了避免循环导入,我被迫定义一个看起来像这样的函数:

# do_something.py

def do_it():
    from .helpers import do_it_helper
    # do stuff
Run Code Online (Sandbox Code Playgroud)

现在我希望能够通过do_it_helper修补来测试这个功能.如果导入是顶级导入,

class Test_do_it(unittest.TestCase):
    def test_do_it(self):
        with patch('do_something.do_it_helper') as helper_mock:
            helper_mock.return_value = 12
            # test things
Run Code Online (Sandbox Code Playgroud)

会工作得很好.但是,上面的代码给了我:

AttributeError: <module 'do_something'> does not have the attribute 'do_it_helper'
Run Code Online (Sandbox Code Playgroud)

一时兴起,我也尝试将补丁语句更改为:

with patch('do_something.do_it.do_it_helper') as helper_mock:
Run Code Online (Sandbox Code Playgroud)

但这产生了类似的错误.有没有办法模拟这个函数,因为我被迫在它使用的函数中导入它?

python testing unit-testing mocking python-unittest

19
推荐指数
1
解决办法
7691
查看次数

Python:加快地理比较

我编写了一些包含嵌套循环的代码,其中内循环执行大约150万次.我在这个循环中有一个函数,我正在尝试优化.我做了一些工作,并得到了一些结果,但我需要一些输入来检查我所做的事情是否合情合理.

一些背景:

我有两个地理点集合(纬度,经度),一个相对较小的集合和一个相对庞大的集合.对于小集合中的每个点,我需要找到大集合中的最近点.

显而易见的方法是使用hasrsine公式.这里的好处是距离绝对准确.

from math import radians, sin, cos, asin, sqrt

def haversine(point1, point2):
    """Gives the distance between two points on earth.
    """
    earth_radius_miles = 3956
    lat1, lon1 = (radians(coord) for coord in point1)
    lat2, lon2 = (radians(coord) for coord in point2)
    dlat, dlon = (lat2 - lat1, lon2 - lon1)
    a = sin(dlat/2.0)**2 + cos(lat1) * cos(lat2) * sin(dlon/2.0)**2
    great_circle_distance = 2 * asin(min(1,sqrt(a)))
    d = earth_radius_miles * great_circle_distance
    return d
Run Code Online (Sandbox Code Playgroud)

但是,在我的机器上运行这150万次大约需要9秒(根据时间).由于准确的距离并不重要,我只需要找到最近的点,我决定尝试其他一些功能.

毕达哥拉斯定理的简单实现给了我大约30%的加速.考虑到我可以做得更好,我写了以下内容:

def dumb(point1, point2):
    lat1, lon1 …
Run Code Online (Sandbox Code Playgroud)

python optimization geography distance

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

嘲弄一个班级的建设

我刚刚开始使用Python的模拟库来帮助编写更简洁和隔离的单元测试.我的情况是我有一个类从一个非常多毛的格式读取数据,我想在这个类上测试一个以干净格式呈现数据的方法.

class holds_data(object):
    def __init__(self, path):
        """Pulls complicated data from a file, given by 'path'.

        Stores it in a dictionary. 
        """
        self.data = {}
        with open(path) as f:
            self.data.update(_parse(f))

    def _parse(self, file):
        # Some hairy parsing code here
        pass

    def x_coords(self):
        """The x coordinates from one part of the data
        """
        return [point[0] for point in self.data['points']]
Run Code Online (Sandbox Code Playgroud)

上面的代码简化了我的工作.实际上,这_parse是一个相当重要的方法,我在功能级别上进行了测试.

但是,我希望能够x_coords在单元测试级别进行测试.如果我通过给它一个路径来实例化这个类,它将违反单元测试规则,因为:

在以下情况下,测试不是单元测试:

  • 它涉及文件系统

所以,我希望能够修改__init__方法holds_data,然后只需填写self.data所需的部分x_coords.就像是: …

python unit-testing mocking

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

如何在某些数据结构中表示奇怪的图形

表示图形的简单方法是使用以下形式的数据结构:

{1:[2,3],
 2:[1,3],
 3:[1,2]}
Run Code Online (Sandbox Code Playgroud)

此字典中的键是节点,并且边缘由它们连接的其他节点的列表表示.如果链接不对称,则此数据结构也可以轻松表示有向图:

{1:[2],
 2:[3],
 3:[1]}
Run Code Online (Sandbox Code Playgroud)

我对图理论知之甚少,所以我要提出的建议可能已经有了一个简单的解决方案,但我不知道该寻找什么.我遇到的情况是图形有些指向,取决于您所在的节点和您来自的节点.为了说明,我有一张图:

奇怪的方向图

想象一下你在卡丁车中沿着边缘A加速,而在节点1处,你将左边悬挂在边缘B上.由于你走得太快,当你击中节点3时,你被迫继续前进到边缘F.但是,如果你来自边缘F,你将能够继续前进到边缘E或B.很明显,节点3连接到1和2,但是否可以从该节点到达它们取决于哪个你来自哪个方向.

我想知道是否有一个图论理论概念描述了这个和/或是否有一个简单的数据结构来描述它.虽然我将在python中编写代码,但我会从任何合理适用的语言中获取建议.

编辑:我试图发布一个图像与此同时,但我不确定它是否出现.如果它不在这里是图像的链接

编辑2:我应该清楚.发布的图像是完整图形的一部分,其中屏幕上有更多节点来自A,D和F.

python language-agnostic graph data-structures

10
推荐指数
1
解决办法
735
查看次数