用statsmodel改变图形大小

mlg*_*080 3 python matplotlib statsmodels

我正在尝试使用statsmodel包制作QQ图.但是,该数字的分辨率非常低,以至于我无法在演示中使用结果.

我知道要使networkX图形绘制出更高分辨率的图像我可以使用:

plt.figure( figsize=(N,M) )
networkx.draw(G)
Run Code Online (Sandbox Code Playgroud)

并改变N和M的值以获得理想的结果.

但是,当我尝试使用statsmodel包中的QQ图同样的方法时,它似乎对结果图的大小没有影响,即,当我使用时

plt.Figure( figsize = (N,M) )
statsmodels.qqplot_2samples(sample1, sample2, line = 'r')
Run Code Online (Sandbox Code Playgroud)

改变M和N对数字大小没有影响.关于如何解决这个问题的想法(以及为什么这个方法不起作用)?

Lev*_*ian 9

plt.rc("figure", figsize=(16,8))只需在绘图之前使用即可。


cel*_*cel 7

您可以使用在绘图前mpl.rc_context临时设置默认值figsize.

import numpy as np
import matplotlib as mpl
from statsmodels.graphics.gofplots import qqplot_2samples

np.random.seed(10)
sample1 = np.random.rand(10)
sample2 = np.random.rand(10)
n, m = 6, 6

with mpl.rc_context():
    mpl.rc("figure", figsize=(n,m))
    qqplot_2samples(sample1, sample2, line = 'r')
Run Code Online (Sandbox Code Playgroud)

情节


Bry*_*ler 6

这是一个很好的解决方案,也适用于其他情节 - 我赞成它。这是 acf 和 pacf 图的实现。

N, M = 12, 6
fig, ax = plt.subplots(figsize=(N, M))
plot_pacf(df2, lags = 40, title='Daily Female Births', ax=ax)
plt.show()
Run Code Online (Sandbox Code Playgroud)


unu*_*tbu 5

qqplot_2samples函数具有一个ax参数,允许您指定应在其上绘制绘图的matplotlib轴对象。如果您不提供ax,则会为您创建一个新的axis对象。

因此,作为cel解决方案的替代方法,如果您希望创建自己的图形,则还应该将图形的axes对象传递给qqplot_2samples

sm.qqplot_2samples(sample1, sample2, line='r', ax=ax)
Run Code Online (Sandbox Code Playgroud)

例如,

import scipy.stats as stats
import matplotlib.pyplot as plt
import statsmodels.api as sm

N, M = 6, 5
fig, ax = plt.subplots(figsize=(N, M))
sample1 = stats.norm.rvs(5, size=1000)
sample2 = stats.norm.rvs(10, size=1000)
sm.qqplot_2samples(sample1, sample2, line='r', ax=ax)
plt.show()
Run Code Online (Sandbox Code Playgroud)