Correlogram

Financial Portfolio Metrics

Correlation analysis of investment performance indicators by asset class

Output
Financial Portfolio Metrics
Python
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

np.random.seed(123)

n = 180
asset_classes = np.random.choice(['Equity', 'Bond', 'Commodity'], n)
data = {
    'Return (%)': np.where(asset_classes == 'Equity', np.random.normal(12, 8, n),
                          np.where(asset_classes == 'Bond', np.random.normal(4, 2, n), np.random.normal(8, 12, n))),
    'Volatility': np.where(asset_classes == 'Equity', np.random.normal(18, 5, n),
                          np.where(asset_classes == 'Bond', np.random.normal(5, 1.5, n), np.random.normal(22, 8, n))),
    'Sharpe': np.random.normal(0.8, 0.4, n),
    'Beta': np.where(asset_classes == 'Equity', np.random.normal(1, 0.3, n),
                    np.where(asset_classes == 'Bond', np.random.normal(0.2, 0.1, n), np.random.normal(0.5, 0.2, n))),
    'Asset': asset_classes
}
df = pd.DataFrame(data)

plt.style.use('dark_background')
sns.set_style("darkgrid", {'axes.facecolor': '#0a0a0f', 'figure.facecolor': '#0a0a0f', 'grid.color': '#333333'})

palette = {'Equity': '#27D3F5', 'Bond': '#6CF527', 'Commodity': '#F5B027'}

g = sns.pairplot(
    df,
    hue='Asset',
    palette=palette,
    height=2,
    kind='reg',
    diag_kind='kde',
    markers=['o', '^', 's'],
    plot_kws={'scatter_kws': {'alpha': 0.6, 's': 45, 'edgecolor': 'white', 'linewidths': 0.4}, 'line_kws': {'linewidth': 2}},
    diag_kws={'alpha': 0.5, 'linewidth': 2.5}
)

g.fig.set_facecolor('#0a0a0f')
for ax in g.axes.flat:
    if ax:
        ax.set_facecolor('#0a0a0f')
        for spine in ax.spines.values():
            spine.set_color('#333333')
        ax.tick_params(colors='#888888')
        ax.xaxis.label.set_color('white')
        ax.yaxis.label.set_color('white')

g.fig.suptitle('Portfolio Risk-Return Analysis', fontsize=14, fontweight='bold', color='white', y=1.02)
plt.setp(g._legend.get_title(), color='white')
plt.setp(g._legend.get_texts(), color='white')

plt.tight_layout()
plt.show()
Library

Matplotlib

Category

Statistical

Did this help you?

Support PyLucid to keep it free & growing

Support