图表只显示1个图表中的数据,而不显示其他图表中的数据

2024-06-06 09:12:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码有问题。它只显示一个图形的数据,而另一个图形是空白的。我不明白为什么它不起作用。
我使用的是subplot()函数,我猜原因可能是我的函数的格式。你知道吗

import numpy as np
import matplotlib.pyplot as plt
import cvxopt as opt
from cvxopt import blas, solvers
import pandas as pd
import mpld3
from mpld3 import plugins

np.random.seed(123)
solvers.options['show_progress'] = False

n_assets = 4

n_obs = 1000  # original 1000

return_vec = np.random.randn(n_assets, n_obs)

def rand_weights(n):
    k = np.random.rand(n)
    return k / sum(k) print(rand_weights(n_assets)) print(rand_weights(n_assets))

def random_portfolio(returns):
    p = np.asmatrix(np.mean(returns,axis=1))
    w = np.asmatrix(rand_weights(returns.shape[0]))
    C = np.asmatrix(np.cov(returns))

    mu = w * p.T
    sigma = np.sqrt(w * C * w.T)

    #this recursion reduces outlier to keep the graph nice
    if sigma > 2:
      return random_portfolio(returns)
    return mu, sigma

n_portfolios = 500

means, stds = np.column_stack([random_portfolio(return_vec) for _ in range(n_portfolios)])


plt.plot(return_vec.T, alpha=.4); 
plt.xlabel('time') 
plt.ylabel('returns') 
plt.figure(1) 
plt.subplot(212)

plt.plot(stds, means, 'o', markersize = 5) 
plt.xlabel('std') 
plt.ylabel('mean') 
plt.title('Mean and standard deviation of returns of randomly generated portfolios') 
plt.subplot(211) 
plt.figure(1)

plt.show()

my graph


Tags: importreturnasnppltrandomsigmareturns
1条回答
网友
1楼 · 发布于 2024-06-06 09:12:52

您需要在第一次调用plt.plot之前移动行plt.subplot(211)。这是因为对plt.subplot的调用必须在该子图的实际绘制之前。你知道吗

相关问题 更多 >