小编mwa*_*kom的帖子

使用matplotlib面向对象的界面用seaborn绘图

我更喜欢使用matplotlibOOP风格:

f, axarr = plt.subplots(2, sharex=True)
axarr[0].plot(...)
axarr[1].plot(...)
Run Code Online (Sandbox Code Playgroud)

这样可以更轻松地跟踪多个图形和子图.

问题:如何使用seaborn这种方式?或者,如何将此示例更改为OOP样式?如何将seaborn绘图函数描述为lmplot哪个Figure或哪个Axes绘图?

python oop matplotlib seaborn

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

获取matplotlib颜色循环状态

是否可以查询matplotlib颜色循环的当前状态?换句话说,是否有一个函数get_cycle_state将以下列方式运行?

>>> plot(x1, y1)
>>> plot(x2, y2)
>>> state = get_cycle_state()
>>> print state
2
Run Code Online (Sandbox Code Playgroud)

我希望状态是将在绘图中使用的下一个颜色的索引.或者,如果它返回下一个颜色(上例中默认循环的"r"),那也没关系.

python matplotlib

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

如何在不更改matplotlib默认值的情况下使用seaborn?

我试图使用seaborn,因为它的distplot功能.但我更喜欢默认的matplotlib设置.当我导入seaborn时,它会自动改变我的身材的外观.

如何在不改变图形外观的情况下使用seaborn功能?

python matplotlib seaborn

63
推荐指数
2
解决办法
6506
查看次数

如何使用seaborn FacetGrid更改字体大小?

我用factorplotin seaborn和get facetgrid对象绘制了我的数据,但仍无法理解如何在这样的情节中设置以下属性:

  1. 图例大小:当我绘制大量变量时,我会得到非常小的图例,字体很小.
  2. y和x标签的字体大小(与上面类似的问题)

python seaborn

38
推荐指数
4
解决办法
7万
查看次数

matplotlib是否具有在轴坐标中绘制对角线的功能?

Matplotlib轴具有函数axhline,axvline用于在给定的y或x坐标(分别)上绘制水平或垂直线,与Axes上的数据比例无关.

绘制恒定对角线是否有类似的功能?例如,如果我有一个具有相似域的变量的散点图,通常有用的是知道它们是否高于或低于以下行y = x:

mean, cov = [0, 0], [(1, .6), (.6, 1)]
x, y = np.random.multivariate_normal(mean, cov, 100).T
y += x + 1
f, ax = plt.subplots(figsize=(6, 6))
ax.scatter(x, y, c=".3")
ax.plot([-3, 3], [-3, 3], ls="--", c=".3")
ax.set(xlim=(-3, 3), ylim=(-3, 3))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这当然可以通过抓取轴限制(ax.get_xlim()等等)以编程方式完成,但是a)需要一些额外的步骤而b)在更多数据可能最终出现在图上并改变极限的情况下是脆弱的.(实际上在某些情况下,只需添加常量线就可以拉伸轴).

例如,最好是这样做,ax.axdline(ls="--", c=".3")但是不清楚matplotlib代码库中是否存在这样的东西.所有你需要做的是修改axhline代码绘制[0, 1]轴上的坐标两xy,我想.

python numpy matplotlib

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

如何针对使用matplotlib的代码编写单元测试?

我正在研究一个python(2.7)程序,它产生了很多不同的matplotlib图(数据不是随机的).我愿意实施一些测试(使用unittest)以确保生成的数字是正确的.例如,我将预期的图形(数据或图像)存储在某个地方,我运行我的函数并将结果与​​参考进行比较.有没有办法做到这一点 ?

python matplotlib python-unittest

35
推荐指数
3
解决办法
4765
查看次数

如何在Pandas中打开一系列元组?

有时我在使用Pandas时会得到一系列元组/列表.例如,当执行group-by并传递具有多个返回值的函数时,这很常见:

import numpy as np
from scipy import stats
df = pd.DataFrame(dict(x=np.random.randn(100),
                       y=np.repeat(list("abcd"), 25)))
out = df.groupby("y").x.apply(stats.ttest_1samp, 0)
print out

y
a       (1.3066417476, 0.203717485506)
b    (0.0801133382517, 0.936811414675)
c      (1.55784329113, 0.132360504653)
d     (0.267999459642, 0.790989680709)
dtype: object
Run Code Online (Sandbox Code Playgroud)

"解压缩"这个结构的正确方法是什么,以便我得到一个包含两列的DataFrame?

一个相关的问题是我如何将这个结构或结果数据框解包为两个系列/数组对象.这几乎有效:

t, p = zip(*out)
Run Code Online (Sandbox Code Playgroud)

但它t

 (array(1.3066417475999257),
 array(0.08011333825171714),
 array(1.557843291126335),
 array(0.267999459641651))
Run Code Online (Sandbox Code Playgroud)

一个人需要采取额外的步骤来挤压它.

python pandas

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

是否有用于临时更改matplotlib设置的上下文管理器?

pandas和中seaborn,可以使用with关键字临时更改显示/绘图选项,该关键字仅将指定的设置应用于缩进代码,同时保持全局设置不变:

print(pd.get_option("display.max_rows"))

with pd.option_context("display.max_rows",10):
    print(pd.get_option("display.max_rows"))

print(pd.get_option("display.max_rows"))
Run Code Online (Sandbox Code Playgroud)

日期:

60
10
60
Run Code Online (Sandbox Code Playgroud)

当我同样尝试with mpl.rcdefaults():或者with mpl.rc('lines', linewidth=2, color='r'):,我收到AttributeError: __exit__.

有没有办法临时更改matplotlib中的rcParams,以便它们只适用于选定的代码子集,还是我必须手动来回切换?

python matplotlib pandas seaborn

13
推荐指数
2
解决办法
1559
查看次数

从迭代产品中制作一个Pandas MultiIndex?

我有一个实用程序函数,用于在我有两个或更多个iterables时创建Pandas MultiIndex,并且我想为这些迭代中的值的每个唯一配对创建一个索引键.看起来像这样

import pandas as pd
import itertools

def product_index(values, names=None):
    """Make a MultiIndex from the combinatorial product of the values."""
    iterable = itertools.product(*values)
    idx = pd.MultiIndex.from_tuples(list(iterable), names=names)
    return idx
Run Code Online (Sandbox Code Playgroud)

并且可以像:

a = range(3)
b = list("ab")
product_index([a, b])
Run Code Online (Sandbox Code Playgroud)

创造

MultiIndex(levels=[[0, 1, 2], [u'a', u'b']],
           labels=[[0, 0, 1, 1, 2, 2], [0, 1, 0, 1, 0, 1]])
Run Code Online (Sandbox Code Playgroud)

这很好用,但它似乎是一个常见的用例,我很惊讶我必须自己实现它.所以,我的问题是,我在Pandas库中错过/误解了哪些提供此功能?

编辑补充:这个功能已经被添加到大熊猫作为MultiIndex.from_product为0.13.1版本.

python pandas

12
推荐指数
1
解决办法
3116
查看次数

在Seaborn FacetGrid中绘制多个DataFrame列

我使用以下代码

import seaborn as sns

g = sns.FacetGrid(dataframe, col='A', hue='A')
g.map(plt.plot, 'X', 'Y1')
plt.show()
Run Code Online (Sandbox Code Playgroud)

制作一个像这样的seaborn facet情节: 示例小平面图

现在我想在y轴上用另一个变量添加另一行,称为Y2.结果应该类似于垂直堆叠由两个图获得的图

g = sns.FacetGrid(dataframe, col='A', hue='A')
g.map(plt.plot, 'X', 'Y1')
plt.show()

g = sns.FacetGrid(dataframe, col='A', hue='A')
g.map(plt.plot, 'X', 'Y2')
plt.show()
Run Code Online (Sandbox Code Playgroud)

两行示例图

但在单个图中,没有重复的x轴和标题("A = <值>")并且没有创建新FacetGrid对象.

注意

g = sns.FacetGrid(dataframe, col='A', hue='A')
g.map(plt.plot, 'X', 'Y1')
g.map(plt.plot, 'X', 'Y2')
plt.show()
Run Code Online (Sandbox Code Playgroud)

没有实现这一点,因为它导致Y1和Y2的曲线显示在A的每个值的相同子图中.

python plot matplotlib pandas seaborn

9
推荐指数
1
解决办法
7630
查看次数

标签 统计

python ×10

matplotlib ×7

seaborn ×5

pandas ×4

numpy ×1

oop ×1

plot ×1

python-unittest ×1