首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在matplotlib.axes.Axes.table中设置alpha?

在matplotlib.axes.Axes.table中设置alpha?
EN

Stack Overflow用户
提问于 2021-04-05 05:32:53
回答 1查看 85关注 0票数 1

我正在尝试理解如何在matplotlib表中设置alpha级别。我试着用一个全局rcParams来设置它,但是不太确定该怎么做?(我想更改标题颜色中的透明度)。一般来说,我不确定这是否可以全局完成,如果不能,我如何将参数传递到表中?提前进行Thx检查。

代码语言:javascript
复制
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from cycler import cycler
import six

# Set universal font and transparency
plt.rcParams["font.family"] = "DejaVu Sans"
plt.rcParams['axes.prop_cycle'] = cycler(alpha=[0.5])

raw_data = dict(Simulation=[42, 39, 86, 15, 23, 57],
                SP500=[52, 41, 79, 80, 34, 47],
                NASDAQ=[62, 37, 84, 51, 67, 32],
                Benchmark=[72, 43, 36, 26, 53, 88])

df = pd.DataFrame(raw_data, index=pd.Index(
    ['Sharpe Ratio', 'Sortino Ratio', 'Calmars Ratio', 'VaR', 'CVaR', 'Max DD'], name='Metric'),
                  columns=pd.Index(['Simulation', 'SP500', 'NASDAQ', 'Benchmark'], name='Series'))


def create_table(data, col_width=None, row_height=None, font_size=None,
                 header_color='#000080', row_colors=None, edge_color='w',
                 header_columns=0, ax=None, bbox=None):
    if row_colors is None:
        row_colors = ['#D8D8D8', 'w']
    if bbox is None:
        bbox = [0, 0, 1, 1]
    if ax is None:
        size = (np.array(data.shape[::-1]) + np.array([0, 1])) * np.array([col_width, row_height])
        fig, ax = plt.subplots(figsize=size)
        ax.axis('off')

    ax.axis([0, 1, data.shape[0], -1])

    data_table = ax.table(cellText=data.values, colLabels=data.columns, rowLabels=data.index,
                          bbox=bbox, cellLoc='center', rowLoc='left', colLoc='center',
                          colWidths=([col_width] * len(data.columns)))
    cell_map = data_table.get_celld()
    for i in range(0, len(data.columns)):
        cell_map[(0, i)].set_height(row_height * 0.20)

    data_table.auto_set_font_size(False)
    data_table.set_fontsize(font_size)

    for k, cell in six.iteritems(data_table._cells):
        cell.set_edgecolor(edge_color)
        if k[0] == 0 or k[1] < header_columns:
            cell.set_text_props(weight='bold', color='w')
            cell.set_facecolor(header_color)
        else:
            cell.set_facecolor(row_colors[k[0] % len(row_colors)])

    return ax


ax = create_table(df, col_width=1.5, row_height=0.5, font_size=8)

ax.set_title("Risk Measures", fontweight='bold')

ax.axis('off')

plt.tight_layout()

plt.savefig('risk_parameter_table[1].pdf')

plt.show()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-05 06:57:38

您可以在表的_cells上手动执行set_alpha()

如果只想更改标头,请检查是否为row == 0col == -1

代码语言:javascript
复制
def create_table(...):
    ...

    for (row, col), cell in data_table._cells.items():
        if (row == 0) or (col == -1):
            cell.set_alpha(0.5)

    return ax

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66946065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档