我更喜欢使用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绘图?
是否可以查询matplotlib颜色循环的当前状态?换句话说,是否有一个函数get_cycle_state将以下列方式运行?
>>> plot(x1, y1)
>>> plot(x2, y2)
>>> state = get_cycle_state()
>>> print state
2
Run Code Online (Sandbox Code Playgroud)
我希望状态是将在绘图中使用的下一个颜色的索引.或者,如果它返回下一个颜色(上例中默认循环的"r"),那也没关系.
我试图使用seaborn,因为它的distplot功能.但我更喜欢默认的matplotlib设置.当我导入seaborn时,它会自动改变我的身材的外观.
如何在不改变图形外观的情况下使用seaborn功能?
我用factorplotin seaborn和get facetgrid对象绘制了我的数据,但仍无法理解如何在这样的情节中设置以下属性:
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]在轴上的坐标两x和y,我想.
我正在研究一个python(2.7)程序,它产生了很多不同的matplotlib图(数据不是随机的).我愿意实施一些测试(使用unittest)以确保生成的数字是正确的.例如,我将预期的图形(数据或图像)存储在某个地方,我运行我的函数并将结果与参考进行比较.有没有办法做到这一点 ?
有时我在使用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)
一个人需要采取额外的步骤来挤压它.
在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,以便它们只适用于选定的代码子集,还是我必须手动来回切换?
我有一个实用程序函数,用于在我有两个或更多个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版本.
我使用以下代码
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的每个值的相同子图中.