matplotlib 编辑此代码以删除两行和两列

vsikbqxv  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(135)

我有一些代码可以生成模7乘法的凯莱表,即(Z/7Z,x)。
我不希望它打印第一个灰色行或灰色列。
我不想让它在第二行和第二列显示零。
我不想让它显示数字,所以我猜color = 'none'。
我不希望它将分割线显示为黑色,而是显示为“无”。
我想偏移cmap,所以1现在是紫色,6是红色(不是0 --〉6,而是1 --〉6)

import numpy as np
import matplotlib.pyplot as plt

# Create Cayley table
table = np.zeros((8, 8), dtype=int)
for i in range(8):
    for j in range(8):
        table[i][j] = ((i-1) * (j-1)) % 7

# Create figure and axis objects
fig, ax = plt.subplots()

# Hide axes
ax.axis('off')

# Create table with rainbow colors
table_obj = ax.table(cellText=table.astype(str), loc='center', cellColours=plt.cm.get_cmap('rainbow')(table/6))

# Set table properties
table_obj.auto_set_font_size(False)
table_obj.set_fontsize(14)
table_obj.scale(1, 2)

# Color first row and first column
for i in range(8):
    cell = table_obj[0, i]
    cell.set_facecolor('grey')
    text = cell.get_text()
    if i == 0:
        text.set_text('')
    else:
        text.set_text(str(i-1))
    text.set_color('white')
    text.set_fontsize(14)
    text.set_position((0.5, 0.5))

for i in range(8):
    cell = table_obj[i, 0]
    cell.set_facecolor('grey')
    text = cell.get_text()
    if i == 0:
        text.set_text('')
    else:
        text.set_text(str(i-1))
    text.set_color('white')
    text.set_fontsize(14)
    text.set_position((0.5, 0.5))

# Add white '+' at position [0,0]
cell = table_obj[0, 0]
text = cell.get_text()
text.set_text('+')
text.set_color('white')
text.set_fontsize(14)
text.set_position((0.5, 0.5))

# Show plot
plt.show()

我试着改变for循环,但是前两行和前两列仍然出现,条目表[0,0]只是显示为空白和紫色--对应于0。

# Create Cayley table
table = np.zeros((8, 8), dtype=int)
for i in range(1, 8):
    for j in range(1, 8):
        table[i][j] = ((i-1) * (j-1)) % 7

-- snip --

# Color first row and first column
for i in range(1, 8):
    cell = table_obj[0, i]
    cell.set_facecolor('grey')
    text = cell.get_text()
    if i == 0:
        text.set_text('')
    else:
        text.set_text(str(i-1))
    text.set_color('white')
    text.set_fontsize(14)
    text.set_position((0.5, 0.5))

for i in range(1, 8):
    cell = table_obj[i, 0]
    cell.set_facecolor('grey')
    text = cell.get_text()
    if i == 0:
        text.set_text('')
    else:
        text.set_text(str(i-1))
    text.set_color('white')
    text.set_fontsize(14)
    text.set_position((0.5, 0.5))

-- snip --
dwthyt8l

dwthyt8l1#

你似乎想展示一个模7乘法表的热图,但没有零。这可以用几行海运代码来创建:

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

num = 7
num_range = np.arange(1, num)
mult = num_range.reshape(1, -1) * num_range.reshape(-1, 1) % num

sns.heatmap(mult, xticklabels=False, yticklabels=False, annot=False, square=True,
            cmap=plt.get_cmap('rainbow', num), cbar=False)
plt.show()

通过seaborn的选项,你可以调整它的外观。这里有一个例子。只要关闭你不想要的修改。

ax = sns.heatmap(mult, xticklabels=True, yticklabels=True, annot=True, square=True, linewidths=1,
                 cmap=plt.get_cmap('rainbow', num - 1), cbar=True, vmin=0.5, vmax=num - 0.5)
ax.tick_params(labeltop=True, labelbottom=False, length=0)

相关问题